要在Chromebook上运行Selenium,需要使用哪个版本的Chromium,Selenium和Chromedriver?

时间:2018-06-26 20:23:21

标签: python selenium selenium-chromedriver chromium chromebook

我想在Chromebook上使用Chromedriver运行Selenium测试,但无法使其正常工作。

设置
我已经安装了croutonchromebrew。 chromebrew拥有用于virtualenv和Python3.6的软件包,加上pip install Selenium,我得到了Selenium。从ChromeDriver ChromeOS documentation中,我知道chromedriver在/usr/local/chromedriver中。调用它:

chronos@localhost /usr/local/chromedriver $ chromedriver 
Starting ChromeDriver 2.24 on port 9515
Only local connections are allowed.

给我版本,我只想测试localhost,所以我很好,并拥有:

Versions:  
ChromiumOS 55.0.2883.100 (64-bit)  
Python 3.6  
Selenium bindings for Python 3.13.0  
Chromedriver 2.24  

我(我想)知道Chromedriver的行为类似于端口9515上的服务器,正在等待来自test.py的呼叫。我一直在摆弄直到没有更多的错误因为缺少chromedriver / permissions / etc。

测试文件
我的测试文件仅包含:

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.binary_location = '/etc/chromium.exe'

driver = webdriver.Chrome('/usr/local/chromedriver/chromedriver', chrome_options=chrome_options)
driver.get("http://localhost:8000")

如果我调用python3 test.pyget("http://localhost:8000")没有任何反应,并且在我的python3调用中,我最终得到以下结果:

Traceback (most recent call last):
  File "test.py", line 6, in <module>
    driver = webdriver.Chrome('/usr/local/chromedriver/chromedriver', chrome_options=chrome_options)
  File "/usr/local/demo/venv/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 75, in __init__
    desired_capabilities=desired_capabilities)
  File "/usr/local/demo/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 156, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/demo/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 251, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/demo/venv/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 320, in execute
    self.error_handler.check_response(response)
  File "/usr/local/demo/venv/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: chrome not reachable
  (Driver info: chromedriver=2.24,platform=Linux 3.14.0 x86_64)

我还在chromedriver documentation上找到了此测试脚本,以将chromedriver作为服务运行,其结果与上述相同:

import time

from selenium import webdriver
import selenium.webdriver.chrome.service as service

service = service.Service('/usr/local/chromedriver/chromedriver')
service.start()
capabilities = {'chrome.binary': '/etc/chromium.exe'}
driver = webdriver.Remote(service.service_url, capabilities)
driver.get('http://localhost:8000');
time.sleep(5) # Let the user actually see something!
driver.quit()

您会看到我在功能中将Chrome替换为自定义Chromium。从chromedriver documentation到此SO answer,这是用自定义二进制代码替换默认Chrome二进制文件的方法。

我从github issue中了解到,问题可能出在各个版本的组件之间不能很好地配合,但是指向的Chromedriver documentation并没有真正告诉我从哪里开始寻找尝试哪个版本。

我认为除了不兼容的版本外,我已经涵盖了所有情况,所以问题是,谁能告诉我哪个版本可以运行该版本?

1 个答案:

答案 0 :(得分:1)

此错误消息...

selenium.common.exceptions.WebDriverException: Message: chrome not reachable

...表示 ChromeDriver 无法启动/产生新的 WebBrowser ,即 Chrome浏览器会话。

除了此错误外,还有很多可能性,如下所示:

  • 在使用 Linux操作系统时,当您提到 chromium 二进制文件的绝对路径时,您需要剥离扩展名.exe,如下所示:

    chrome_options.binary_location = '/etc/chromium'
    
  • 在初始化 Chrome 浏览会话时,您需要按以下方式传递参数 chrome_options executable_path

    >
    driver = webdriver.Chrome(executable_path='/usr/local/chromedriver/chromedriver', chrome_options=chrome_options)
    
  • 就像常规的 Chrome浏览器 GA版本一样, Chrome Team 会发布具有增强/修改功能以及对应功能的 ChromeDriver 二进制文件支持的 Chrome浏览器版本。您需要确保正在使用的chromechromedriver二进制文件在Release Notes之后是同步的。

  

您可以在Selenium for ChromeDriver and Chrome Browser

中找到有关版本控制的相关讨论。

但是,您的主要问题是正在使用的二进制文件版本之间的不兼容性

  • 您正在使用 chromedriver = 2.24
  • chromedriver=2.24的发行说明中明确提到以下内容:
  

支持 Chrome v52-54

  • 您正在使用 chrome = 55.0
  • ChromeDriver v2.27的发行说明中明确提到以下内容:
  

支持 Chrome v54-56

因此 ChromeDriver v2.24 Chrome浏览器v55.0

之间存在明显的不匹配

解决方案