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

2024-09-28 23:31:37 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个网页有一个链接“点击下载”点击哪个文件被下载。 我可以通过转到网页并单击此链接手动下载此文件,但我需要通过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的文件。

尝试了一些东西,比如在标题中添加 “内容处理”:“附件;filename=”data.csv“'}

但它似乎起作用了。有什么想法吗?


Tags: 文件csv函数标记脚本url网页data
2条回答

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

  1. 首先,你可以创建一个火狐档案。要做到这一点:
  2. 关闭所有firefox浏览器
  3. 转到命令提示符并执行firefox.exe-P
  4. 创建配置文件并记下创建新配置文件的文件夹的名称

您可以在这里为您的个人资料设置一些选项,例如-自动从内容下载此类文件等

现在下载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();

希望这可以帮助其他人:)

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

  • 模拟onclick()调用中涉及的逻辑-在您的情况下,使用^{}^{}进行dataform表单提交
  • 高级方法-使用^{}自动实现真正的浏览器,无头(PhantomJS)与否-找到链接并单击它:

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

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

相关问题 更多 >