使用 Selenium 和 python 将文件下载到指定位置

Posted

技术标签:

【中文标题】使用 Selenium 和 python 将文件下载到指定位置【英文标题】:Downloading file to specified location with Selenium and python 【发布时间】:2014-10-04 18:31:21 【问题描述】:

好的,到目前为止,我已经将我的程序转到了我想从中下载链接并选择它的网站,然后出现了 firefox 对话框,我不知道该怎么做。我想将此文件保存到我桌面上的文件夹中。我将它用于夜间构建,所以我需要它来工作。请帮忙。

这是我从网站上获取下载链接的代码:

driver = web driver.Firefox()
driver.implicitly_wait(5)
driver.get("Name of web site I'm grabbing from")
driver.find_element_by_xpath("//a[contains(text(), 'DEV.tgz')]".click()

【问题讨论】:

【参考方案1】:

你需要让Firefox自动保存这个特定的文件类型。

这可以通过设置browser.helperApps.neverAsk.saveToDisk 首选项来实现:

from selenium import webdriver

profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.folderList", 2)
profile.set_preference("browser.download.manager.showWhenStarting", False)
profile.set_preference("browser.download.dir", 'PATH TO DESKTOP')
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/x-gzip")

driver = webdriver.Firefox(firefox_profile=profile)
driver.get("Name of web site I'm grabbing from")
driver.find_element_by_xpath("//a[contains(text(), 'DEV.tgz')]").click()

更多解释:

browser.download.folderList 告诉它不要使用默认的Downloads 目录 browser.download.manager.showWhenStarting 轮流显示下载进度 browser.download.dir 设置下载目录 browser.helperApps.neverAsk.saveToDisk 告诉 Firefox 自动下载所选 mime-types 的文件

您可以在浏览器中的about:config 查看所有这些首选项。这里还有一个非常详细的文档页面:About:config entries。

此外,我不会使用xpath 方法,而是使用find_element_by_partial_link_text()

driver.find_element_by_partial_link_text("DEV.tgz").click()

另见:

Access to file download dialog in Firefox Firefox + Selenium WebDriver and download a csv file automatically

【讨论】:

“profile = webdriver.FFP”行出现错误,IndentationError: unexpected indent @JeradBill 这与您的特定代码有关。不是我提供的。 WebDriver 不可知的方式这样做有什么好主意吗? (例如 FirefoxPhantomJS 可互换) 是否可以为所有文件设置browser.helperApps.neverAsk.saveToDisk?我不知道我下载的文件类型。 @alecxe chromdriver 选项browser.helperApps.neverAsk.saveToDisk 的等效项是什么?【参考方案2】:

如果应用程序是动态生成的(mime-types)使用 Chrome 浏览器将是更好的方法,因为 Chrome 不会打开文件下载弹出窗口。但如果您需要多次下载,则应启用多次下载选项。

【讨论】:

我正在尝试使用 Chrome 执行相同的操作,但我无法设置下载文件的位置。相同的配置文件功能似乎不起作用。有谁知道如何在 Chrome 中设置下载位置? chromePrefs.put("download.default_directory",downloadFilepath); _ChromeOptions.setExperimentalOption("prefs", chromePrefs); @niNa browser.helperApps.neverAsk.saveToDisk 怎么样?

以上是关于使用 Selenium 和 python 将文件下载到指定位置的主要内容,如果未能解决你的问题,请参考以下文章

使用 Selenium 和 python 为 Instagram 提供上传文件路径

使用 Selenium Python 将文件上传到 Twitter

使用 Python 和 Selenium 将 APK 上传到解释为 URL 的网页

python 爬虫 selenium

将 PhantomJS 与 Selenium Webdriver 和 Python 一起使用

python selenium的文件下载在chrome、IE下如何设置并实现