首页 > 解决方案 > 尽管驱动程序位于 /usr/local/bin 中,但 Selenium “无法找到一组匹配的功能”

问题描述

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

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

我尝试过的是以下代码。

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

标签: python-3.xseleniumfirefoxselenium-webdrivergeckodriver

解决方案


此错误消息...

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

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

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

解决方案

  • 将Selenium升级到当前级别版本 3.141.59
  • 将GeckoDriver升级到GeckoDriver v0.23.0级别。
  • 确保 GeckoDriver 存在于指定位置。
  • 确保 GeckoDriver 对非 root 用户具有可执行权限。
  • 将Firefox版本升级到Firefox v64.0。水平。
  • 通过IDE清理项目工作区并仅使用所需的依赖项重建项目。
  • 仅限Windows 操作系统)使用CCleaner工具在执行测试套件之前和之后清除所有操作系统琐事。
  • 仅限 LinuxOS)在执行测试套件之前和之后释放和释放 Ubuntu/Linux Mint 中未使用/缓存的内存
  • 如果您的基本Web 客户端版本太旧,请通过Revo Uninstaller卸载它并安装最新的 GA 和发布版本的Web 客户端
  • 重新启动系统
  • 在启动 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')
      
  • Test以非 root 用户身份执行。

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

推荐阅读