WebDriverException:消息:浏览器似乎已经退出,然后才能使用GeckoDriver Selenium和Python连接错误

时间:2018-09-13 18:54:40

标签: python-3.x selenium firefox selenium-webdriver geckodriver

大约有100个关于同一问题的帖子,但似乎没有一个适合我,因此再次询问。我正在尝试使用Python和Selenium启动Firefox浏览器,但出现以下错误:

  

WebDriverException :消息:浏览器似乎已经退出,然后我们才能连接。如果您在FirefoxBinary构造函数中指定了log_file,请检查它的详细信息。

我尝试了网络上的每个答案,但似乎无济于事。

这是我的代码:

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

caps = DesiredCapabilities.FIREFOX
caps["marionette"] = False

binary = FirefoxBinary('d:\\Desktop\\IEDriver\\geckodriver.exe')

options = Options()
options.set_headless(headless=True)
driver = webdriver.Firefox(firefox_binary=binary, firefox_options=options, executable_path=r'd:\\Desktop\\IEDriver\\geckodriver.exe')
driver.get("http://google.com/")
print ("Headless Firefox Initialized")
driver.quit()

如果我设置了caps["marionette"] = True,那么我得到的错误是

  

SessionNotCreatedException :消息:无法找到一组匹配的功能

我正在运行的软件版本:

Firefox :62.0(64位)

:3.14.0

壁虎:0.21.0

Python :3

操作系统:Windows 8.1 64位

任何帮助将不胜感激。

编辑:我已经卸载并重新安装了Firefox,但是没有用。还尝试安装Firefox 61.0.2,仍然没有运气。

5 个答案:

答案 0 :(得分:1)

此错误消息...

WebDriverException: Message: The browser appears to have exited before we could connect. 
If you specified a log_file in the FirefoxBinary constructor, check it for details.

...表示 GeckoDriver 无法启动/产生新的 WebBrowser ,即 Firefox浏览器会话。

您需要注意以下几点:

  • 要设置FirefoxBinary,您需要使用FirefoxOptions(),而不是传递 geckodriver 二进制文件的绝对路径,您必须传递所需 firefox 二进制文件的绝对路径
  • 在使用 GeckoDriver v0.21.0 时,您必须强制使用牵线木偶,因此请使其保持不变(默认为true)或设置木偶 true
  • 您自己的代码(其中包含一些小的更改)将是:

    from selenium import webdriver
    from selenium.webdriver.firefox.options import Options
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    binary = r'C:\Program Files\Mozilla Firefox\firefox.exe'
    options = Options()
    options.set_headless(headless=True)
    options.binary = binary
    cap = DesiredCapabilities().FIREFOX
    cap["marionette"] = True #optional
    driver = webdriver.Firefox(firefox_options=options, capabilities=cap, executable_path="C:\\Utility\\BrowserDrivers\\geckodriver.exe")
    driver.get("http://google.com/")
    print ("Headless Firefox Initialized")
    driver.quit()
    
  • 控制台输出:

    Headless Firefox Initialized
    
  • 在这里您可以找到有关Unable to find a matching set of capabilities with selenium 3.4.3, firefox 54.0 and gecko driver 0.17

  • 的详细讨论

答案 1 :(得分:1)

确保(尤其是在Windows(Win 10)上),您的浏览器和控制器(python / C / java / perl / etc)都是x64或win32,Microsoft不会再在它们之间进行改动。

因此,如果您尝试通过x32位python控制64位浏览器(默认情况下会从firefox下载),它将在您可以连接之前退出。.安装并安装win32版本的firefox发生

答案 2 :(得分:0)

在不同的论坛上尝试了几乎所有答案后,可以通过简单的自我试用解决问题,即您需要以62位或32位安装python,firefox浏览器和geckodriver。在这种情况下,不匹配导致了我的问题。

在确保对所有3个组件使用相同的位版本后,只需使用以下行运行firefox:

ffPath = "C:\\Drivers\\geckodriver.exe"
os.environ["webdriver.firefox.driver"] = ffPath
driver = webdriver.Firefox(executable_path=ffPath)
driver.get(url)

答案 3 :(得分:0)

对我来说,问题是python和gekodriver之间的版本不匹配。一旦所有参与的聚会都是64位的,它就像一个魅力

答案 4 :(得分:-1)

binary = r'C:\Program Files\Mozilla Firefox\firefox.exe'
options = Options()
options.binary = binary
browser = webdriver.Firefox(firefox_options=options, executable_path=r"C:\Drivers\geckodriver.exe")