Geckodriver/Firefox 如何在没有 Marionette 的情况下工作?(针对 FF 53 运行 python selenium 3)

mbl*_*ley 3 python firefox selenium marionette geckodriver

我只在硒控制的 Firefox 弹出窗口中看到一个奇怪的“不受信任的证书”错误。很具体。为了解决这个问题,各种谷歌结果建议关闭牵线木偶,如下所示:

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = False
driver = webdriver.Firefox()
Run Code Online (Sandbox Code Playgroud)

这有效,但如何?Geckodriver 在 Marionette 关闭的情况下如何工作?

这个其他堆栈溢出答案

Marionette 是 Mozilla 的 Gecko 引擎的自动化驱动程序。

答案继续明确地说它应该失败:

“在使用 Firefox 53.x 浏览器的情况下,如果您通过 DesiredCapabilities 类将“marionette”强行设置为 false,您将观察到 UnreachableBrowserException。”

那么,这到底是怎么工作的呢?

Deb*_*anB 5

您已经处理了以下几件事:

  1. "untrusted cert" error only on selenium-controlled firefox pop-ups:这是一个常见问题,我们可以通过WebDriver通过DesiredCapabilities类配置实例来避免这种情况。
  2. turning off marionettemarionette当我们使用 Selenium 3.x 和最近的 Mozilla Firefox 浏览器版本时,关闭不再是一个解决方案。通过 DesiredCapabilities 类将“marionette”强制设置为 false,您将无法打开 48.x 以上版本的 Mozilla Firefox 浏览器。
  3. 关于您的代码,我在您的代码中没有看到任何重大错误。您已通过课堂将“marionette”设置为 false,DesiredCapabilities但仍然有效,并打开旧版本的 Mozilla Firefox 浏览器会话,该会话也安装在您的机器上,版本低于 48.x
  4. 为了进行快速测试,我只是复制了您的代码并打开了 url https://www.whatismybrowser.com/

代码

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

    firefox_capabilities = DesiredCapabilities.FIREFOX
    firefox_capabilities['marionette'] = False
    driver = webdriver.Firefox()
    driver.get('https://www.whatismybrowser.com/')
Run Code Online (Sandbox Code Playgroud)

结果:Mozilla Firefox 47 版已打开。

在此处输入图片说明

  1. 现在根据 Selenium 3.4.x 规范,我做了一些修改。将“牵线木偶”设置为 true 并executable_path在初始化驱动程序时添加。

需要注意的是,当前的 Selenium-Python 绑定对于 geckodriver 是不稳定的,并且看起来是特定于架构的。您可以在此处找到 github讨论合并。因此,您可能还需要firefox_binary在初始化webdriver时将 firefox 二进制文件的绝对路径作为参数传递

代码

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

binary = FirefoxBinary('C:\\Program Files\\Mozilla Firefox\\firefox.exe')
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
driver = webdriver.Firefox(firefox_binary=binary,executable_path='C:\\Utility\\BrowserDrivers\\geckodriver.exe')
driver.get('https://www.whatismybrowser.com/')
Run Code Online (Sandbox Code Playgroud)

结果:Mozilla Firefox 53 版已打开。

在此处输入图片说明