13

我想使用新的(2016)无头版 Chromium with Selenium/ChromeDriver版本(过去,我使用Firefox与xfvb,但这个承诺是好多了)。Selenium ChromeDriver无法识别新编译的无头铬(Python)

我从来源汇编的Chromium无头版本的基础上,我发现here和指令(我没有找到任何预先生成的二进制文件),然后我用下面的代码通过硒来启动它:

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) 

显然,无头的铬二进制文件是用ChromeDriver无法识别的版本ID编译的。帮帮我 !!

环境:

  • 编辑:Ubuntu的16.04服务器
  • 硒执行:Linux Mint的18.1
+0

检查您的Chrome驱动程序支持的Chrome版本。我读到它支持Chrome 54到56,而你的无头铬是59.尝试安装以前的Chrome版本 – BangTheBank

+3

我不能。因为59之前的版本显然不支持无头模式。该功能可追溯至2016年中期。顺便说一句,我怎么知道什么特定版本的Chrome Webdriver支持? – fi11222

+0

另外,我检查了ChromeDriver来源。显然没有最大版本,只有最小值,现在显然是55。所以问题在于别处。 – fi11222

回答

11

ChromeHeadless由chromedriver因为this patch认可(创建你发布你的消息后),其仅在铬合金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的亮点,所以期望有一些粗糙的边缘,直到特征稳定。

+1

附加选项导致Chrome变得无法访问,对我来说,唯一必要的选项是'options.add_argument('headless')'和'options.add_argument('window-size = 1904x950')'。 – tarikki

+1

我使用chromedriver 2.32添加了所需的标志,但仍然无法无法工作。 –

+1

@Sebastian我也是。我怀疑这是因为我们现在使用的是Chrome 60,但尚未找出修复方法。你有没有设法解决这个问题? – goose