首页 > 解决方案 > selenium.common.exceptions.SessionNotCreatedException:消息:无法找到与 GeckoDriver、Selenium 和 Firefox 匹配的一组功能

问题描述

我已经开发了一个带有 selenium 和 firefox webdriver 的 python 脚本。在我的机器上工作正常。但如果我在另一台机器上执行相同的脚本,则会出现以下错误。

Traceback (most recent call last):
  File "insurance_web_monitor.py", line 13, in <module>
    driver = Firefox(executable_path='geckodriver', firefox_options=options)
  File "C:\Python34\lib\site-packages\selenium\webdriver\firefox\webdriver.py",
line 167, in __init__
    keep_alive=True)
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", l
ine 156, in __init__
    self.start_session(capabilities, browser_profile)
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", l
ine 251, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", l
ine 320, in execute
    self.error_handler.check_response(response)
  File "C:\Python34\lib\site-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

这是我的代码

import os
from selenium.webdriver import Firefox
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as expected
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities


if __name__ == "__main__":
    options = Options()
    cap = DesiredCapabilities().FIREFOX
    cap["marionette"] = False
    options.add_argument('-headless')
    driver = Firefox(executable_path='geckodriver', firefox_options=options, capabilities=cap)
    wait = WebDriverWait(driver, timeout=10)
    driver.get('http://www.google.com')
    driver.save_screenshot(
        os.path.join(os.path.dirname(os.path.realpath(__file__)), os.getcwd(), 'screenshot1.png'))
    wait.until(expected.visibility_of_element_located((By.NAME, 'q'))).send_keys('headless firefox' + Keys.ENTER)
    wait.until(expected.visibility_of_element_located((By.CSS_SELECTOR, '#ires a'))).click()
    print(driver.page_source)
    driver.quit()

我机器中的配置是,

Windows => 7 Professional 64-bit
Python => 3.4.4
Selenium => 3.14
Firefox => 61.0.2
geckodriver => 0.21.0

其他机器上的配置是,

Windows => 7 Professional 64-bit
Python => 3.4.4
Selenium => 3.14
Firefox => 61.0.2
geckodriver => 0.21.0

是的,每个配置都完全相同。虽然这看起来很愚蠢,但它不起作用,它在折磨我。我在机器之间有什么需要考虑的吗?提前致谢。

标签: pythonseleniumfirefoxselenium-webdrivergeckodriver

解决方案


根据您使用以下测试配置的问题和代码块:

  • 硒 => 3.14
  • 壁虎司机 => 0.21.0
  • 火狐=> 61.0.2

你必须强制使用能力秘偶。要实现这一点:

  • 您可以保持功能木偶不变,因为默认marionette设置为True
  • 您还可以按如下方式指定功能木偶:

    cap = DesiredCapabilities().FIREFOX
    cap["marionette"] = True
    

这个用例

此错误消息...

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

...暗示GeckoDriver无法启动/产生新的WebBrowserFirefox 浏览器会话。

您看到的错误背后有多种可能性,可以通过下面提到的以下任何步骤来解决:

  • 当您在Windows 操作系统上时,您需要传递密钥 executable_path以及包含以下内容的

    • GeckoDriver绝对路径
    • GeckoDriver绝对路径应通过单引号和单反斜杠以及原始 ( ) 开关提及。r
    • 包括GeckoDriver二进制文件的扩展。
    • 您的代码行将是:

      driver = Firefox(executable_path=r'C:\path\to\geckodriver.exe', firefox_options=options, capabilities=cap)
      

参考


推荐阅读