首先,机器和 Package 规格:我在跑步:
ChromeDriver version 75.0.3770.140
Selenium: version '3.141.0'
WSL (linux subsystem) of windows 10
我试图通过selenium运行chromebrowser。我发现:these命令,通过google chrome使用selenium。
我有一个test目录,其中只有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在预期的位置,我使用的是windows 10,从here,预期的位置是C:\Program Files(x86)\Google\Chrome\Application\chrome.exe;这是它在我机器上的位置(我从Chrome属性表中复制并粘贴了这个位置)。
- ChromeDriver具有非root用户的可执行权限。
1.我肯定已经安装了Google Chrome v75.0(我可以看到产品版本75.0.3770.100)
1.我以非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/
然而,由于这看起来更像是一个警告而不是一个错误,我点击“确定”关闭对话框,一个新的标签在浏览器中打开;但是URL只是'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。
2条答案
按热度按时间pkwftd7m1#
此错误消息...
...表示ChromeDriver无法启动/生成新的WebBrowser,即Chrome Browser会话。
二进制位置
binary_location设置/获取Chrome(可执行文件)二进制文件的位置,定义为:
所以根据你的代码测试,
options.binary_location='/home/kela/test_dir/chromedriver'
是不正确的。解决方案
如果 Chrome 安装在默认位置,您可以安全地删除此属性。如果 Chrome 安装在自定义位置,您需要使用
options.binary_location
* 属性 * 指向 Chrome 安装。您可以在Selenium中找到详细的讨论:WebDriverException:Chrome无法启动:crashed as google-chrome is no longer running so ChromeDriver is assuming that Chrome has crashed
实际上,代码块将是:
此外,还应确保:
h9vpoimq2#
如果您导入的是Firefox选项而不是Chrome选项,则必须确保导入正确的选项才能启动selenium
你的案子
更改此:
对此: