首先,机器和包装规格: 我正在跑步:
ChromeDriver version 75.0.3770.140
Selenium: version '3.141.0'
WSL (linux subsystem) of windows 10
我正在尝试通过硒运行chromebrowser。我发现:these个命令,可以通过Google chrome使用硒。
我有一个测试目录,其中只有chromedriver二进制文件和脚本。该目录的位置是:/ home / kela / test_dir /
我运行了代码:
import selenium
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
options = Options()
options.binary_location='/home/kela/test_dir/chromedriver'
driver = webdriver.Chrome(chrome_options = options,executable_path='/home/kela/test_dir/chromedriver')
此代码的输出为:
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: No matching capabilities found
有人可以解释为什么当相同脚本适用于没有功能的其他人时为什么需要功能吗?我确实尝试添加:
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
但是我遇到了同样的错误。所以我不确定我需要添加哪些功能(考虑到没有它的其他人也可以使用?)
编辑1:在下面解决DebanjanB的评论:
Chromedriver位于预期的位置。我正在使用Windows10。在here中,预期位置是C:\ Program Files(x86)\ Google \ Chrome \ Application \ chrome.exe;这就是我的机器上的位置(我从chrome属性表中复制并粘贴了此位置)。
ChromeDriver对非root用户具有可执行权限。
我肯定已经安装了Google Chrome v75.0(我可以看到产品版本为75.0.3770.100)
我正在以非root用户身份运行脚本,因为我的bash命令行以$而不是#结尾(例如,kela:〜/ test_dir $而不是kela:〜/ test_dir#)
编辑2:根据下面DebanjanB的回答,我非常接近它可以工作,但效果不尽人意。
代码:
import selenium
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.chrome.options import Options
options = Options()
options.binary_location='/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'
driver = webdriver.Chrome(options=options)
driver.get('http://google.com/')
产生一个对话框,显示如下:
Google Chrome cannot read and write to it's data directory: /tmp/.com/google.Chrom.gyw63s
因此,我再次检查了我的Chrome权限,然后应该可以写到Chrome了:
另外,我可以看到/ tmp /中有一堆.com目录:
.com.google.Chrome.4jnWme/ .com.google.Chrome.FdNyKP/ .com.google.Chrome.VAcWMQ/ .com.google.Chrome.ZbkRx0/ .com.google.Chrome.iRrceF/
.com.google.Chrome.A2QHHB/ .com.google.Chrome.G7Y51c/ .com.google.Chrome.WD8BtK/ .com.google.Chrome.cItmhA/ .com.google.Chrome.pm28hN/
但是,由于这似乎更像是警告而不是错误,因此我单击“确定”关闭对话框,并在浏览器中打开了一个新标签;但网址只是“ data :,”。如果我从脚本中删除行'driver.get('http://google.com')',也会发生相同的事情,所以我知道警告/问题在于行:
driver = webdriver.Chrome(chrome_options = options,executable_path='/home/kela/test_dir/chromedriver')
例如,从here,我尝试添加:
options.add_argument('--profile-directory=Default')
但是会弹出同样的警告。
编辑3:
随着第3版开始转向一个不同于此处专门解决的问题,我提出了一个新问题here。
答案 0 :(得分:-1)
此错误消息...
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: No matching capabilities found
...表示 ChromeDriver 无法启动/产生新的 WebBrowser ,即 Chrome浏览器会话。
binary_location设置/获取 Chrome (可执行)二进制文件的位置,并定义为:
def binary_location(self, value):
"""
Allows you to set where the chromium binary lives
:Args:
- value: path to the Chromium binary
"""
self._binary_location = value
因此,根据您的代码试用,options.binary_location='/home/kela/test_dir/chromedriver'
是错误的。
如果在默认位置安装了 Chrome ,则可以安全地删除此属性。如果 Chrome 安装在自定义位置,则需要使用options.binary_location
属性指向 Chrome 安装。
中找到详细的讨论
有效地,您的代码块将是:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.binary_location=r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
driver = webdriver.Chrome(options=options, executable_path='/home/kela/test_dir/chromedriver.exe')
driver.get('http://google.com/')
此外,请确保以下内容:
在使用 ChromeDriver v75.0 时,请确保使用以下版本的 Google Chrome v75.0 :
---------ChromeDriver 75.0.3770.8 (2019-04-29)---------
Supports Chrome version 75
以非root用户用户的身份执行 Selenium Test 。