Как Geckodriver / Firefox работает без Marionette? (запуск pelon selenium 3 против FF 53)

Я вижу странную ошибку «ненадежного сертификата» только на всплывающих окнах, управляемых селеном. Очень специфично. Чтобы решить эту проблему, различные результаты Google предложили отключить марионетку, например:

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities firefox_capabilities = DesiredCapabilities.FIREFOX firefox_capabilities['marionette'] = False driver = webdriver.Firefox() 

И это работает, но как? Как вообще работает geckodriver с Marionette?

Из этого другого ответа на переполнение стека :

Marionette – это драйвер для автоматизации движка Gecko Mozilla.

В ответе говорится о том, что это должно потерпеть неудачу:

«В случае использования браузеров Firefox 53.x, если вы решительно настроили« марионетку »на false через класс DesiredCapabilities, вы увидите исключение UnreachableBrowserException».

Итак, как это работает?

Вот ответы на все ваши вопросы:

  1. "untrusted cert" error only on selenium-controlled firefox pop-ups . Это обычная проблема, и мы можем избежать этого, настроив экземпляр WebDriver через класс DesiredCapabilities .
  2. turning off marionette : отключение marionette больше не является решением, когда мы работаем с Selenium 3.x и последними версиями Mozilla Firefox Browser. Сильно настроив «марионетку» на false через класс DesiredCapabilities, вы не сможете открыть браузер Mozilla Firefox выше версии 48.x.
  3. Что касается вашего кода, я не вижу серьезных ошибок в вашем коде. Вы установили «марионетку» в false через класс DesiredCapabilities но все еще работаете и открываете сеанс Mozilla Firefox Browser устаревших версий, который также установлен на вашем компьютере, который ниже версии 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/') 

Результат : открывается Mozilla Firefox версии 47.

введите описание изображения здесь

  1. Теперь, согласно спецификациям Selenium 3.4.x, я сделал пару модификаций. Повернул «марионетку» к истинному и добавленному executable_path при инициализации драйвера.

Следует отметить, что текущая привязка Selenium-Python нестабильна с geckodriver и выглядит специфичной для архитектуры. Вы можете найти обсуждение github и объединиться здесь. Таким образом, вам может потребоваться передать абсолютный путь двоичного firefox_binary firefox как аргумент firefox_binary при инициализации webdriver

Код :

 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/') 

Результат : открывается версия Mozilla Firefox версии 53.

введите описание изображения здесь

Дайте мне знать, если это ответит на ваш вопрос.