[英]Spynner programmatic python browser to download files from cgi file-server: jquery selector for browser.click()?
我正在嘗試使用 spynner,有狀態的程序化 web 瀏覽器從受 cookie 保護的 web / cgi 文件存儲庫下載文件。
Spynner 使用 jquery 之類的選擇器來告訴瀏覽器點擊什么。
我有文件的鏈接
<a href="index.cgi?page=download&file=%2Fhome%2Fjdataserver%2Fpublic_html%2Fuser_data%2Fcompany%2F.ftpquota" class="ar">
但是,當我告訴 spynner 單擊該鏈接時,什么都沒有下載。 我的代碼是
import spynner
from spynner import browser
import pyquery
import private
import pynotify
import time
User_File_Area_URL="http://dataserver.com/cgi-bin/index.cgi"
agent = browser.Browser()
agent.load("http://dataserver.com/cgi-bin/index.cgi")
agent.wait(3)
agent.create_webview(True)
agent.show()
agent.fill("input[name=login]",private.uname)
agent.fill("input[name=password]",private.password)
agent.click("input[type=submit]")
#agent.wait(3)
#Pyquery Browser
d=pyquery.PyQuery(agent.html)
print str(d(".td1 .ar"))
agent.click(".td1 .ar",wait_load=True)
cookies = agent.get_cookies()
print cookies
整個元素如下所示。 出於隱私原因,我更改了服務器名稱和其他屬性。
<a href="index.cgi?dir=%2Fhome%2Fjdataserver%2Fpublic_html%2Fuser_data%2Fcompany%2FUntarred" class="ar"><img src="http://www.dataserver.com/img/efm_v1_6/folder.gif" width="16" height="16" border="0"/> Untarred</a><a href="index.cgi?page=download&file=%2Fhome%2Fjdataserver%2Fpublic_html%2Fuser_data%2Fcompany%2F.ftpquota" class="ar"><img src="http://www.dataserver.com/img/efm_v1_6/download.gif" width="16" height="16" border="0" alt="Download" title="Download"/></a>
我讓它與適當的 jquery 選擇器一起使用,並且還使用了 spynner.browser.download() 方法。
文件鏈接嵌套在圖像標簽中
一旦我為保存文件的 href 鏈接使用了適當的標簽,瀏覽器就會將文件下載到名為 www.servername.com 的目錄中。
browser.click('a[href$="*.sca"]')
我也可以使用 browser.download(human_readable_url, open("outfile.txt","w")) 寫入所述文件。
代碼粘貼在這里
#!/usr/bin/python
import private
import spynner
from spynner import browser
import pyquery
import urlparse
import urllib
b = browser.Browser()
b.load("http://structures.com/cgi-bin/index.cgi")
#browser.debug_level = spynner.DEBUG
def fill_login_form():
b.fill("input[name=login]",private.uname)
b.fill("input[name=password]",private.password)
b.click("input[type=submit]")
def click_download():
pass
#b.create_webview(True)
b.fill("input[name=login]",private.uname)
b.fill("input[name=password]",private.password)
b.click("input[type=submit]")
b.wait_load()
d = pyquery.PyQuery(b.html)
print str(d('a[href$="ftpquota"]'))
# Test Downloading by clicking a link which will download file called .ftpquota
# Jquery pattern $= indicates a pattern that ends with "ftpquota"
#b.click('a[href$="ftpquota"]')
raw_href = d('a[href$="ftpquota"]').attr("href")
href = urllib.unquote(raw_href)
print "HREF" , raw_href
print "Unquted" , href
print "urlparse.urlsplit()", urlparse.urlsplit(href)
print "Current URL", b.url
print "Synthesized url" , urlparse.urljoin(b.url, href)
#d.make_links_absolute(base_url=b.url)
filename = raw_href.split("%2F")[-1]
b.download(href, open(filename, "w"))
下載有效
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.