铬无头和硒下载

发布于 2021-01-29 15:59:07

我正在使用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)

在常规实现中,添加默认路径是可行的,但是无头版本仍然存在相同的问题。

如何使下载以无头模式开始?

关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    是的,这是安全的“功能”。如前所述,这里是bug讨论: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

    更新2020-05-01 有评论说这不再起作用。鉴于此补丁已经使用了一年多,因此很有可能他们已更改了底层库。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看