无法找到与firefox,python,selenium匹配的一组功能(使用vagrant)

时间:2017-06-27 18:01:44

标签: python selenium firefox vagrant

使用:Selenium 3.4.3,Firefox 54,geckodriver 0.17.0

我通过在我的虚拟机上使用precision64框在python中创建Firefox webdriver来获取此错误消息。我的笔记本电脑正在运行Mac OS Sierra。这是我的错误消息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 152, in __init__
    keep_alive=True)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 98, in __init__
    self.start_session(desired_capabilities, browser_profile)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 188, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 256, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Unable to find a matching set of capabilities

我正在运行browser = webdriver.Firefox()。 我已尝试在 vagrant 目录中指定geckodriver可执行文件的路径,即browser = webdriver.Firefox('/vagrant/'),但仍无法找到匹配的功能集。 我的geckodriver与我尝试运行的脚本位于同一目录中。我已将vagrant文​​件夹添加到我的路径中。 我相信我所使用的所有内容都是最新的,根据我this one所见的各种帖子。

有谁知道为什么我会遇到这个问题?提前谢谢。

2 个答案:

答案 0 :(得分:2)

如果其他人遇到此问题:问题似乎是虚拟机没有显示器,并且需要像pyvirtualbox这样的虚拟显示器或像phantomJS这样的无头浏览器。

编辑: 我正在添加如何实现我列出的两个解决方案的示例。通常,您采取的解决此问题的方法取决于您拥有的限制。最简单的方法是不使用虚拟机,但如果您确实需要使用虚拟机,则需要采用上述两种方法之一。

# PHANTOM JS SOLUTION
from selenium import webdriver
driver = webdriver.PhantomJS() # assuming your phantomJS driver is in your path already
driver.get("https://www.google.com")
driver.quit() # only use this when done with automation

# PYVIRTUALBOX SOLUTION
from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(1920, 1080)).start()
driver = webdriver.Firefox()
driver.get("https://www.google.com")
display.close() # use this only once you are finished with automation
driver.quit()

答案 1 :(得分:0)

#Code Snippet

      from selenium import webdriver
from      selenium.webdriver.firefox.firefox_binary import FirefoxBinary
binary = FirefoxBinary('/Applications/Firefox.app/Contents/MacOS/firefox-bin')
driver = webdriver.Firefox(executable_path = "/usr/local/bin/geckodriver")
driver.get("http://www.google.com")
print driver.title
driver.quit()