使用不带url的python脚本从网页下载文件,调用onClick函数

时间:2015-01-26 09:09:16

标签: javascript python html

有一个网页有“点击下载”链接点击下载文件。 我可以通过访问网页并点击此链接手动下载此文件,但我需要通过python脚本下载此文件。

如果我看到源我可以看到锚标签将运行js函数

<a class="download-data-link1" onclick=" document.forms['dataform'].submit()" style="cursor:pointer; vertical-align: middle;">Download in csv</a>

但我不知道csv文件的url,我正在寻找一种通过python下载它的方法。

我知道如果我们有使用httplib的url但是无法理解如何获取没有url的文件,我们可以下载文件。

尝试了一些像标题中添加的内容 'Content-Disposition':'attachment; filename =“data.csv”'}

但似乎有效。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

感谢大家的回答,但我想补充一下,我是如何实现的。

  1. 首先,您可以创建一个firefox配置文件。要做到这一点:
  2. 关闭所有firefox浏览器
  3. 转到cmd提示符并执行firefox.exe -P
  4. 创建个人资料并记下创建新个人资料的文件夹的名称
  5. 您可以在此处为您的个人资料设置一些选项,例如 - 从内容等自动下载这些类型的文件。

    现在下载selenium for python并使用下面的代码

    import os
    from selenium import webdriver
    
    download_dir="D:\a"
    
    fp = webdriver.FirefoxProfile(<profile directory here as in step 4>)
    fp.set_preference("browser.download.dir", download_dir)
    fp.set_preference("browser.download.manager.showWhenStarting",False)
    fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream");
    
    browser = webdriver.Firefox(firefox_profile=fp)
    browser.get("http://pypi.python.org/pypi/selenium")
    # you can use your url here 
    browser.find_element_by_partial_link_text("selenium-2").click()
    # Use your method to identify class or link text here
    browser.close();
    

    希望这可以帮助别人:)

答案 1 :(得分:2)

这里可以应用两个基本选项:

  • 模仿onclick()电话中涉及的逻辑 - 在您的情况下,使用requests提交dataform表单提交,或mechanize
  • 高级方法 - 使用selenium自动化真实浏览器,无头(PhantomJS)或不自动 - 找到链接并单击它:

    from selenium import webdriver
    
    driver = webdriver.PhantomJS()
    driver.get('url here')
    
    driver.find_element_by_class_name('download-data-link1').click()
    

虽然据我所知,点击链接会触发“下载”浏览器对话框出现 - 然后PhantomJS不能选择,因为它不支持下载。如果是ChromeFirefox,您需要调整浏览器功能,以便在不打开弹出窗口的情况下自动下载文件,请参阅: