如何在 Python 中使用 Selenium 和 Firefox 下载文件?
How to download file with Selenium and Firefox in Python?
我正在尝试下载一个文件,其中包含由 Python 控制的 Selenium、Geckodriver 和 Firefox。该文件实际上已下载,但即使在文件下载后驱动程序仍在处理某些内容。
我用来下载文件的代码:
from selenium import webdriver
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList", 2)
fp.set_preference("browser.download.dir", downloaddir)
fp.set_preference("browser.download.useDownloadDir", True)
fp.set_preference("browser.download.viewableInternally.enabledTypes", "")
fp.set_preference("browser.download.manager.useWindow", False)
fp.set_preference("browser.download.manager.showWhenStarting", False)
fp.set_preference("browser.download.manager.closeWhenDone", True);
fp.set_preference('browser.helperApps.neverAsk.openFile', "application/zip")
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/zip")
fp.set_preference("pdfjs.disabled", True)
driver = webdriver.Firefox(firefox_profile=fp)
driver.get('http://speedtest.tele2.net/10MB.zip')
driver.close() # this code never gets called
有人知道这是怎么回事吗?
我知道当您单击元素时有解决方法。
问题是我使用无法单击但需要直接访问的组合 url。
Versions (linux):
Gecko 0.29.1
Firefox 89.0
Python 3.9.5
更新
隐式超时配置为 5 分钟,超过 5 分钟就会失败。
所以我的问题是:
有没有一种方法可以下载直接在 selenium 中实现的文件而不会引发任何类型的错误(当然是在理想情况下)?
正如@cards 所建议的那样,使用 requests
或 urllib
进行此类工作更为方便。您可以使用selenium
分页或点击,然后通过检查网站HTML来使用requests
。
import requests
# retrieve the web content
response = requests.get("http://speedtest.tele2.net/10MB.zip")
# save it as local file
with open("filename.zip", "wb") as file:
file.write(response.content)
P.S。您提供的 URL 下载的 zip 文件已损坏。
我正在尝试下载一个文件,其中包含由 Python 控制的 Selenium、Geckodriver 和 Firefox。该文件实际上已下载,但即使在文件下载后驱动程序仍在处理某些内容。
我用来下载文件的代码:
from selenium import webdriver
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList", 2)
fp.set_preference("browser.download.dir", downloaddir)
fp.set_preference("browser.download.useDownloadDir", True)
fp.set_preference("browser.download.viewableInternally.enabledTypes", "")
fp.set_preference("browser.download.manager.useWindow", False)
fp.set_preference("browser.download.manager.showWhenStarting", False)
fp.set_preference("browser.download.manager.closeWhenDone", True);
fp.set_preference('browser.helperApps.neverAsk.openFile', "application/zip")
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/zip")
fp.set_preference("pdfjs.disabled", True)
driver = webdriver.Firefox(firefox_profile=fp)
driver.get('http://speedtest.tele2.net/10MB.zip')
driver.close() # this code never gets called
有人知道这是怎么回事吗? 我知道当您单击元素时有解决方法。 问题是我使用无法单击但需要直接访问的组合 url。
Versions (linux):
Gecko 0.29.1
Firefox 89.0
Python 3.9.5
更新
隐式超时配置为 5 分钟,超过 5 分钟就会失败。
所以我的问题是: 有没有一种方法可以下载直接在 selenium 中实现的文件而不会引发任何类型的错误(当然是在理想情况下)?
正如@cards 所建议的那样,使用 requests
或 urllib
进行此类工作更为方便。您可以使用selenium
分页或点击,然后通过检查网站HTML来使用requests
。
import requests
# retrieve the web content
response = requests.get("http://speedtest.tele2.net/10MB.zip")
# save it as local file
with open("filename.zip", "wb") as file:
file.write(response.content)
P.S。您提供的 URL 下载的 zip 文件已损坏。