selenium.common.exceptions.SessionNotCreatedException:消息:无法找到与GeckoDriver,Selenium和Firefox匹配的功能集

时间:2018-08-24 10:55:06

标签: python selenium firefox selenium-webdriver geckodriver

我用firefox webdriver开发了一个带有selenium的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

是的,每个配置都完全相同。尽管这似乎很愚蠢,但它不起作用,正在折磨我。 我是否需要在机器之间考虑任何事项? 预先感谢。

1 个答案:

答案 0 :(得分:1)

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

  • 硒=> 3.14
  • geckodriver => 0.21.0
  • Firefox => 61.0.2

您必须强制使用木偶功能。要实现这一目标:

  • 您可以保留功能木偶,因为默认情况下marionette设置为
  • 您还可以如下指定功能木偶

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

此用例

此错误消息...

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

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

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

  • Windows操作系统上,您需要传递 executable_path 以及 value >包含:

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

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

参考