我正在使用 python-selenium 和 Chrome 59 并尝试自动执行简单的下载序列。当我正常启动浏览器时,下载可以工作,但是当我在无头模式下这样做时,下载不起作用。
# Headless implementation
from selenium import webdriver
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("headless")
driver = webdriver.Chrome(chrome_options=chromeOptions)
driver.get('https://www.mockaroo.com/')
driver.find_element_by_id('download').click()
# ^^^ Download doesn't start
# Normal Mode
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.mockaroo.com/')
driver.find_element_by_id('download').click()
# ^^^ Download works normally
我什至尝试添加默认路径:
prefs = {"download.default_directory" : "/Users/Chetan/Desktop/"}
chromeOptions.add_argument("headless")
chromeOptions.add_experimental_option("prefs",prefs)
添加默认路径在正常实现中是有效的,但在无头版本中仍然存在同样的问题。
如何在无头模式下开始下载?
是的,这是一个“功能”,为了安全。正如之前提到的,这里是错误讨论:https://bugs.chromium.org/p/chromium/issues/detail?id=696481 https://bugs.chromium.org/p/chromium/issues/detail?id=696481
Chrome 版本 62.0.3196.0 或更高版本中添加了支持以启用下载。
这是一个 python 实现。我必须将该命令添加到 chromedriver 命令中。我会尝试提交 PR,以便将来将其包含在库中。
def enable_download_in_headless_chrome(self, driver, download_dir):
# add missing support for chrome "send_command" to selenium webdriver
driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': download_dir}}
command_result = driver.execute("send_command", params)
作为参考,这里有一个小存储库来演示如何使用它:https://github.com/shawnbutton/PythonHeadlessChrome https://github.com/shawnbutton/PythonHeadlessChrome
更新2020-05-01有评论说这不再有效。鉴于这个补丁已经发布一年多了,他们很可能已经更改了底层库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)