python - 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
是的,每个配置都完全相同。虽然这看起来很愚蠢,但它不起作用,它在折磨我。我在机器之间有什么需要考虑的吗?提前致谢。
解决方案
根据您使用以下测试配置的问题和代码块:
- 硒 => 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无法启动/产生新的WebBrowser即Firefox 浏览器会话。
您看到的错误背后有多种可能性,可以通过下面提到的以下任何步骤来解决:
当您在Windows 操作系统上时,您需要传递密钥 executable_path以及包含以下内容的值:
- GeckoDriver的绝对路径。
- GeckoDriver的绝对路径应通过单引号和单反斜杠以及原始 ( ) 开关提及。
r
- 包括GeckoDriver二进制文件的扩展。
您的代码行将是:
driver = Firefox(executable_path=r'C:\path\to\geckodriver.exe', firefox_options=options, capabilities=cap)
参考
推荐阅读
- apache-spark - Apache Avro 作为 Apache Spark 2.4 中的内置数据源
- c# - 拆分字符串,然后区分列和数据c#
- python - 如何以格式打印字典中的信息?错误消息:'dict' 对象没有属性 'format'
- mysql - 从多个表中计算总数
- macos - 在 NSScrollView 内容和外部对象之间添加约束
- azure - 使用公司代理实现 Azure Key Vault
- python-3.x - 无法从另一个包导入模块
- flutter - 在颤动中淡入所选选项卡文本中的动画。即使不透明度为零,选定的选项卡文本也会占用空间
- sql - Goland 可以使用其他 SQL 包自动完成 SQL 语句吗?
- javascript - 操作嵌入在 iframe 中的 powerpoint