【问题标题】:Selenium “Unable to find a matching set of capabilities” despite driver being in /usr/local/bin尽管驱动程序位于 /usr/local/bin 中,但 Selenium “无法找到一组匹配的功能”
【发布时间】:2019-05-25 23:36:20
【问题描述】:

我试图使用 selenium webdriver 打开 Firefox 浏览器。我的 geckodriver 已经在 /usr/local/bin 中,因为我正在从事网络抓取项目。

  • Geckodriver 21.0 版
  • Firefox 64.0 版(量子)
  • Selenium 版本 - 3.141.0。

还尝试了版本的 geckodriver,即 17.0、19.0、23.0;找到组合。

我尝试过的代码如下。

from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup

driver=webdriver.Firefox()
driver.get("https://kissanime.ru/")
driver.maximize_window()

执行代码时出现错误:

Traceback (most recent call last):
  File "downloader.py", line 9, in <module>
    driver=webdriver.Firefox()
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/firefox/webdriver.py", line 174, in __init__
keep_alive=True)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities

【问题讨论】:

  • 确保您使用的是正确的 32/64 位版本的二进制文件 - 它应该是统一的 - 例如如果 Firefox 是 64 位的,那么 geckodriver 也必须如此。

标签: python-3.x selenium firefox selenium-webdriver geckodriver


【解决方案1】:

此错误消息...

selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities

...暗示 GeckoDriver 无法启动/产生新的 WebBrowsing 会话,即 Firefox 浏览器 会话。

您的主要问题可能是您使用的二进制文件版本之间的不兼容,如下所示:

解决方案

  • Selenium升级到当前级别Version 3.141.59
  • GeckoDriver升级到GeckoDriver v0.23.0级别。
  • 确保 GeckoDriver 存在于指定位置。
  • 确保 GeckoDriver 对非 root 用户具有可执行权限。
  • Firefox 版本升级到 Firefox v64.0. 级别。
  • 清理你的项目工作区通过你的IDE重建你的项目只需要依赖。
  • 仅限 Windows 操作系统)使用 CCleaner 工具在执行您的测试套件之前和之后清除所有操作系统杂务。
  • 仅限 LinuxOSFree Up and Release the Unused/Cached Memory in Ubuntu/Linux Mint 在执行您的测试套件之前和之后。
  • 如果您的基础 Web Client 版本太旧,请通过Revo Uninstaller 卸载它并安装最新的 GA 和发布版本的 Web Client
  • 进行系统重启
  • 在启动 WebDriver/WebBrowser 会话时传递参数 executable_path 以及 GeckoDriver 的绝对路径,如下所示:

    • Windows 操作系统 格式:

      driver = webdriver.Firefox(executable_path=r'C:\path\to\geckodriver.exe')
      
    • LinuxMAC OS X 格式:

      driver = webdriver.Firefox(executable_path='/path/to/geckodriver')
      
  • 以非 root 用户身份执行 Test

  • 始终在 tearDown(){} 方法中调用 driver.quit() 以优雅地关闭和销毁 WebDriverWeb Client 实例。

【讨论】:

  • 我已经在使用最新版本的 selenium,即 python 3.141.0,拥有最新的 firefox 版本,即 64.0 和最新的 geckodriver,即 23.0,因为你建议清除缓存的内存也试过了,也通过了executable_path 但以同样的错误结束。
  • @DevanshMishra 你能用你当前的代码试验和错误跟踪日志更新这个问题吗?
猜你喜欢
  • 2018-06-14
  • 2017-11-19
  • 2018-07-30
  • 2021-03-25
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多