当前位置: 首页 > 面试题库 >

铬无头和selenium下载

燕钟展
2023-03-14
问题内容

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

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

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


问题答案:

是的,这是安全的“功能”。如前所述,这里是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 有评论说这不再起作用。鉴于此修补程序已经使用了一年多,因此很有可能他们已更改了底层库。



 类似资料:
  • 如何让下载以无头模式启动?

  • 我在我的Ruby on Rails(5.2.1)项目中使用chrome headless with Selenium(3.14.0)和Capybara(3.8.0),我有一个测试,它可以在无头chrome中工作,但不能在无头chrome中工作。我在谷歌chrome稳定版69上使用的是“--无头”标志。 我已经用下面的设置了我的无头chrome,这适用于所有不下载文件的测试。

  • 我在E2E套件中进行了大量测试,其中视频元素被全屏显示,全屏状态得到验证。然而,当无头运行套件时,这些测试失败。页面截图显示,即使在点击全屏按钮后,视频也不是全屏的。有没有办法在无头Chrome上实现全屏功能? 下面是我的配置中的一个功能示例。

  • 我使用Selenium和PhantomJS开发了几个Python脚本。当我转向自动下载时,我切换到了(headed)Firefox(有效),然后是Chrome,有了headless选项,这样浏览器就不会在我面前打开了。 我的第一个脚本访问一个页面和几个HTML元素,与无头Chrome完美地工作。 第二个,然而,工作与头铬。如果我加上“无头”选项,它就不再起作用了。当我试图以headless模式打印

  • 问题内容: 我试图将新的(2016) 无 头版Chromium与Selenium / ChromeDriver一起使用(过去,我将Firefox与xfvb一起使用,但这有望变得更好)。 我根据此处找到的说明从源代码中编译了一个无头版本的Chromium(我没有找到任何预构建的二进制文件),然后使用以下代码通过Selenium启动它: 相同的代码适用于标准铬(如果我删除该选件) 但是,我得到以下错误

  • 问题内容: 我最近在Red Hat Server上安装了Python 2.7,Robot Framework和Selenium Library(我仍然不知道我是否成功…),以便在Web应用程序上运行一些测试。 因此,我尝试使用Robot Framework进行一个简单的测试用例,以查看Selenium Library是否起作用,只是打开一个网页,仅此而已… Selenium Server根据ps的