【问题标题】:Spynner programmatic python browser to download files from cgi file-server: jquery selector for browser.click()?Spynner 编程 python 浏览器从 cgi 文件服务器下载文件:browser.click() 的 jquery 选择器?
【发布时间】:2011-10-25 01:30:22
【问题描述】:

我正在尝试使用 spynner,一种有状态的程序化网络浏览器,从受 cookie 保护的网络/cgi 文件存储库下载文件。

Spynner 使用类似 jquery 的选择器来告诉浏览器点击什么。

我有一个文件链接

<a href="index.cgi?page=download&amp;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&amp;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>

【问题讨论】:

    标签: python jquery-selectors wget


    【解决方案1】:

    我让它与适当的 jquery 选择器一起使用,并且还使用了 spynner.browser.download() 方法。

    文件链接嵌套在图片标签中

    一旦我为保存文件的 href 链接使用了适当的标签,浏览器就会将文件下载到名为 www.servername.com 的目录中。

    以 *.sca 结尾的所有文件为目标

    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"))
    

    下载成功

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      相关资源
      最近更新 更多