【问题标题】:Selenium ChromeDriver does not recognize newly compiled Headless Chromium (Python)Selenium ChromeDriver 无法识别新编译的 Headless Chromium (Python)
【发布时间】:2017-03-05 10:14:45
【问题描述】:

我正在尝试将新的 (2016) headless 版本的 Chromium 与 Selenium/ChromeDriver 一起使用(过去,我将 Firefox 与 xfvb 一起使用,但这有望更好)。

我根据找到的here 的说明从源代码(我没有找到任何预构建的二进制文件)编译了一个无头版本的 Chromium,然后我使用以下代码通过 Selenium 启动它:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

l_option = Options()
l_option.add_argument('headless')
l_option.add_argument('disable-notifications')
l_option.binary_location = '/home/fi11222/Headless_Chromium/headless_shell'
l_driver = webdriver.Chrome(chrome_options=l_option)

相同的代码适用于标准铬(如果我删除 binary.location 选项)

但是,我收到以下错误:

selenium.common.exceptions.WebDriverException: Message: unknown error: unrecognized Chrome version: HeadlessChrome/59.0.3032.0
  (Driver info: chromedriver=2.27.440175 (9bc1d90b8bfa4dd181fbbf769a5eb5e575574320),platform=Linux 4.4.0-53-generic x86_64)

显然,无头 chromium 二进制文件是使用 ChromeDriver 无法识别的版本 ID 编译的。救命!!

环境:

  • 编译:Ubuntu 16.04 服务器
  • Selenium 执行:Linux Mint 18.1

【问题讨论】:

  • 检查您的 chrome 驱动程序支持的 Chrome 版本。我读到它支持 Chrome 54 到 56,而你的 headless chrome 是 59。尝试安装以前的 chrome 版本
  • 我不能。因为 59 之前的版本显然不支持 headless 模式。该功能只能追溯到 2016 年年中。顺便说一句,我怎么知道 Chrome Webdriver 支持哪个特定版本?
  • 另外,我检查了 ChromeDriver Sources。显然没有最高版本,只有最低版本,现在显然是 55。所以问题出在其他地方。
  • sites.google.com/a/chromium.org/chromedriver/downloads 它说最新版本:ChromeDriver 2.27 支持 Chrome v54-56 当您使用 Selenium 时,您必须注意浏览器版本,并且只使用当前 selenium 驱动程序支持的版本。通常,selenium 驱动程序有点落后于浏览器。
  • 我想使用 Chromium 的原因是它是唯一的原生无头浏览器,它也与广泛使用的生产浏览器相同。对于非常讨厌和复杂的网站,HtmlUnit 和 PhantomJS 就是不适合。尤其是滚动,它不像普通浏览器那样工作,因此它会给使用动态加载的网站带来问题。可以使用带有 xfvb 的普通 Firefox 或 Chrome 来使其“无头”,但它很麻烦并且在应用升级时容易损坏。因此我希望使用 Headless Chromium。

标签: python selenium selenium-chromedriver chromium headless-browser


【解决方案1】:

ChromeHeadless 自 this patch(在您发布消息后创建)以来被 chromedriver 识别,该功能仅在 chromedriver 2.29(2017 年 4 月发布)后可用。确保您在 PATH 中拥有此 chromedriver 可执行文件,并且 Selenium 正在选择它,而不是您可能拥有的任何其他 chromedriver。

另外,请注意 - 根据headless Chrome documentation - 您需要再传递两个标志:

l_option.add_argument('remote-debugging-port=9222')
l_option.add_argument('disable-gpu')

至于无头 Chrome 的预构建二进制文件 - 该选项自 Chrome 57 起可用,因此当前通过官方 Google 存储库分发的所有版本都支持该选项(即稳定的 Chrome 58 和不稳定的 Chrome 59)。它是Chrome 59 的亮点,所以在特征稳定之前预计会有一些粗糙的边缘。

【讨论】:

  • 附加选项导致 chrome 无法访问,对我来说,唯一必要的选项是 options.add_argument('headless')options.add_argument('window-size=1904x950')
  • 我正在使用 chromedriver 2.32 并添加了所需的标志,但我仍然无法无头工作。
  • @SebastianL 我也是。我怀疑这是因为我们现在使用的是 Chrome 60,但还没有找到解决办法。你解决了这个问题吗?
  • 但我可以在我的项目 pycharm 中看到最新的更新 2.24.1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多