我用 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。 您还可以指定marionette功能,如下所示:
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/