我用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
是的,每个配置都完全相同。尽管这似乎很愚蠢,但它不起作用,正在折磨我。 我是否需要在机器之间考虑任何事项? 预先感谢。
答案 0 :(得分:1)
根据您的问题和代码块,以及使用以下测试配置的情况:
您必须强制使用木偶功能。要实现这一目标:
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 >包含:
r
)开关来提及。您的代码行将是:
driver = Firefox(executable_path=r'C:\path\to\geckodriver.exe', firefox_options=options, capabilities=cap)