python selenium 3.0 - 未识别安装在默认位置的Firefox 47.0.1。 (geckodriver)

时间:2016-10-26 18:03:53

标签: python firefox selenium-webdriver geckodriver

以下是我的环境:

  1. 操作系统:Windows 10 - 64(家庭版)
  2. 浏览器:Firefox 47.0.1(32位)
  3. Python:2.7.10.12(64位)
  4. selenium:3.0.1
  5. Geckodriver:geckodriver-v0.11.1-win64.zip
  6. Firefox安装在C:\Program Files (x86)\Mozilla Firefox

    geckodriver.exe位于C:\Python27\Scripts位置。

    以下是我的python代码:

    from selenium import webdriver
    
    driver = webdriver.Firefox()
    driver.get("http://www.python.org")
    

    出现以下错误:

    Traceback (most recent call last):
      File "examples1.py", line 5, in <module>
        driver = webdriver.Firefox()
      File "C:\Python27\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 152, in __init__
        keep_alive=True)
      File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 92, in __init__
        self.start_session(desired_capabilities, browser_profile)
      File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 179, in start_session
        response = self.execute(Command.NEW_SESSION, capabilities)
      File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute
        self.error_handler.check_response(response)
      File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.WebDriverException: Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line
    

    我的问题是虽然firefox安装在默认位置,但webdriver无法找到它并引发错误。

    注意:当我明确指定Firefox二进制位置时,它正在工作。

    binary = FirefoxBinary(r'C:\Program Files (x86)\Mozilla Firefox\firefox.exe')
    driver = webdriver.Firefox(firefox_binary=binary)
    

2 个答案:

答案 0 :(得分:0)

出现此错误的原因是Python无法直接找到FirefoxBinary函数。

我遇到了类似的问题。通过参考函数解决了它:

from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

后来发现该解决方案已经可以here(间接)。

答案 1 :(得分:0)

重新启动我的计算机解决了这个问题。(如果您将geckodriver.exe保留在其中一个PATH位置,则可能需要这样做。

不确定这是否是需要解决的真正问题,而是其中一个变量。

geckodriver.exe和Firefox版本支持的小背景:

来自geckodriver github页面:

Firefox 47 is explicitly not supported

因此,如果您要使用Firefox 47.0.1版本,请使用Firefox driver,而不是geckodriver

  1. 如果是硒2.53,则无需进行任何其他操作(无需设置geckodriver,因为selenium 2.53使用Firefox driver default)。
  2. 在Selenium 3.0中,我们必须使用geckodriver设置geckodriver路径(因为defaultFirefoxSelenium 3.0的{​​{1}}驱动程序)并将System.setProperty设置为marionette,因此将禁用false功能并使用默认的Firefox驱动程序。
  3. 示例代码:

    geckodriver

    参考文献:

    1. https://github.com/mozilla/geckodriver#supported-firefoxen
    2. https://github.com/mozilla/geckodriver/issues/224
    3. https://stackoverflow.com/a/40658421/2575259