如何在 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 所建议的那样,使用 requestsurllib 进行此类工作更为方便。您可以使用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 文件已损坏。