2017-06-13 4 views
2

Ich sehe eine bizarre "nicht vertrauenswürdigen Cert" Fehler nur auf Selen-kontrollierten Firefox-Pop-ups. Sehr spezifisch. Um dieses Problem zu lösen, vorgeschlagen verschiedene Google-Ergebnisse marionette, wie folgt:Wie funktioniert Geckodriver/Firefox ohne Marionette? (Laufen Python Selen 3 gegen FF 53)

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 

firefox_capabilities = DesiredCapabilities.FIREFOX 
firefox_capabilities['marionette'] = False 
driver = webdriver.Firefox() 

Und das funktioniert, aber wie ?? Wie funktioniert Geckodriver überhaupt mit Marionette?

Von this other Stack Overflow answer:

Marionette ist ein Automatisierungs Treiber für Mozillas Gecko-Engine.

Die Antwort geht weiter ausdrücklich zu sagen, es scheitern sollte:

mariniert ‚false durch DesiredCapabilities Klasse„Bei der Firefox 53.x-Browser verwenden, wenn Sie mit Nachdruck auf‘Sie beobachten wird Nicht erreichbarBrowserException. "

Also, wie zum Teufel funktioniert das?

Antwort

2

Hier sind die Antworten auf alle Ihre Fragen:

  1. "untrusted cert" error only on selenium-controlled firefox pop-ups: Dies ist ein häufiges Problem und wir können das vermeiden, durch die WebDriver Instanz durch DesiredCapabilities Klasse zu konfigurieren.
  2. turning off marionette: Ausschalten marionette ist keine Lösung mehr, während wir mit Selenium 3.x und aktuellen Mozilla Firefox Browser-Versionen arbeiten. Durch gewaltsame Einstellung "marionette" auf false durch DesiredCapabilities Klasse können Sie Mozilla Firefox Browser nicht über Version 48.x öffnen.
  3. Über Ihren Code, sehe ich keine wesentlichen Fehler in Ihrem Code. Sie haben "marionette" auf false durch DesiredCapabilities Klasse eingestellt, aber funktioniert immer noch und öffnen Sie eine Mozilla Firefox Browser-Sitzung von älteren Versionen, die auch auf Ihrem Computer installiert ist, die Version 48.x
  4. Um einen schnellen Test zu machen, ich kopierte einfach Ihren Code und öffnete die URL https://www.whatismybrowser.com/.

-Code:

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

Ergebnis: Mozilla Firefox Version 47 geöffnet.

enter image description here

  1. Jetzt nach Selenium 3.4.x Spezifikationen, machte ich ein paar Änderungen. "marionette" zu True gedreht und executable_path beim Initialisieren des Treibers hinzugefügt.

Es ist anzumerken, dass die aktuelle Selen-Python-Bindung mit geckodriver instabil ist und sieht Architektur spezifisch.Sie können die Github discussion und merge hier finden. So können Sie zusätzlich den absoluten Pfad des firefox binär als firefox_binary Argument übergeben müssen, während die Initialisierung WebDriver

-Code:

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

Ergebnis: Mozilla Firefox Version 53 geöffnet .

enter image description here

Lassen Sie mich wissen, ob dies Ihre Frage beantwortet.

Verwandte Themen