python - selenium.common.exceptions.SessionNotCreatedException : Message: Unable to find a matching set of capabilities with GeckoDriver, Selenium 和 Firefox

标签 python selenium firefox selenium-webdriver geckodriver

我用 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

是的,每个配置都完全相同。虽然这看起来很愚蠢,但它不起作用并且折磨着我。 我是否遗漏了机器之间需要考虑的事项? 提前致谢。

最佳答案

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

  • Selenium => 3.14
  • 壁虎驱动程序 => 0.21.0
  • 火狐 => 61.0.2

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

  • 默认情况下,您可以保持木偶功能不变 marionette设置为True
  • 您还可以指定ma​​rionette功能,如下所示:

    cap = DesiredCapabilities().FIREFOX
    cap["marionette"] = True
    
<小时/>

这个用例

此错误消息...

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

...暗示 GeckoDriver 无法启动/生成新的 WebBrowser,即 Firefox 浏览器 session 。

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

  • 当您使用Windows 操作系统时,您需要传递 key executable_path 以及> 包含:

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

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

引用文献

关于python - selenium.common.exceptions.SessionNotCreatedException : Message: Unable to find a matching set of capabilities with GeckoDriver, Selenium 和 Firefox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52002958/

相关文章:

javascript - 如何在 Firefox 插件中使用 jQuery?

python - 共享可变的问题?

node.js - 无法创建新服务: GeckoDriverService

javascript - 如何阻止 Firefox 在本地主机上缓存文本区域的内容?

google-maps - Google map 中的自定义标记未在 Firefox 中显示

python - 使用 Python 和 selenium 抓取 URL

python - 在python中动态构建随机变量的函数

python - pytest.skip ('Output string' ) 在哪里打印?

python - 我在 python 中有一个 Errno 13 Permission denied with subprocess

java - 如何使用 Spring Boot 配置 Selenium WebDriver 进行 UI 测试?