Wie kann man Firefox programmgesteuert in Selen mit Python kopflos machen?

124

Ich führe diesen Code mit Python, Selen und Firefox aus, erhalte aber immer noch die 'Head'-Version von Firefox:

binary = FirefoxBinary('C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe', log_file=sys.stdout)
binary.add_command_line_options('-headless')
self.driver = webdriver.Firefox(firefox_binary=binary)

Ich habe auch einige Variationen von Binärdateien ausprobiert:

binary = FirefoxBinary('C:\\Program Files\\Nightly\\firefox.exe', log_file=sys.stdout)
        binary.add_command_line_options("--headless")
Tintinabulator Zea
quelle
2
Ich wollte nur hinzufügen, dass Ihre Firefox-Version 56+ sein sollte, damit dies funktioniert. Ich habe eine Weile gebraucht, um herauszufinden, warum eine der veröffentlichten Lösungen bei mir nicht funktioniert hat. developer.mozilla.org/en-US/Firefox/Headless_mode
Bora Lee

Antworten:

221

Um Firefox Browser kopflos aufzurufen, können Sie die headlessEigenschaft über die Options()Klasse wie folgt festlegen :

from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.headless = True
driver = webdriver.Firefox(options=options, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
driver.get("http://google.com/")
print ("Headless Firefox Initialized")
driver.quit()

Es gibt noch einen anderen Weg, um den kopflosen Modus zu erreichen. Wenn Sie den Headless-Modus in Firefox deaktivieren oder aktivieren müssen, ohne den Code zu ändern, können Sie die Umgebungsvariable MOZ_HEADLESSauf einen beliebigen Wert setzen, wenn Firefox kopflos ausgeführt werden soll oder überhaupt nicht.

Dies ist sehr nützlich, wenn Sie beispielsweise die kontinuierliche Integration verwenden und die Funktionstests auf dem Server ausführen möchten, die Tests jedoch weiterhin im normalen Modus auf Ihrem PC ausführen können.

$ MOZ_HEADLESS=1 python manage.py test # testing example in Django with headless Firefox

oder

$ export MOZ_HEADLESS=1   # this way you only have to set it once
$ python manage.py test functional/tests/directory
$ unset MOZ_HEADLESS      # if you want to disable headless mode

Outro

Wie konfiguriere ich ChromeDriver, um den Chrome-Browser im Headless-Modus über Selenium zu starten?

DebanjanB
quelle
4
Upgraded Selenium (3.14.1) und PhantomJS sind jetzt veraltet, sodass keiner meiner Tests funktioniert hat. Musste zu Firefox wechseln - ohne Kopf in Eile. Vielen Dank für diese hervorragende Zusammenfassung
MortenB
5
MOZ_HEADLESS = 1 Python-Manage.py-Test hat es geschafft! Kein xvfb-run mehr nötig (:
Nicky Kouffeld
23

Die erste Antwort funktioniert nicht mehr.

Das hat bei mir funktioniert:

from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium import webdriver

options = FirefoxOptions()
options.add_argument("--headless")
driver = webdriver.Firefox(options=options)
driver.get("http://google.com")
Philippe Delteil
quelle
Python 3.8.2 / Selen .__ version__ == '3.141.0' funktioniert großartig!
hirnwunde
1
from selenium import webdriverZum Aufrufen hinzufügenwebdriver.Firefox()
Schnee
2
Die akzeptierte Antwort funktioniert immer noch mit der neuesten Version von Firefoxundgeckodriver
CONvid19
2

Nur eine Notiz für Leute, die dies später gefunden haben (und Java-Weg wollen, um dies zu erreichen); FirefoxOptionskann auch den Headless-Modus aktivieren:

FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setHeadless(true);
TomasH
quelle
6
Diese Frage bezieht sich auf Python, nicht auf Java.
Mapio
0
Used below code to set driver type based on need of Headless / Head for both Firefox and chrome:

// Can pass browser type 

if brower.lower() == 'chrome':
    driver = webdriver.Chrome('..\drivers\chromedriver')
elif brower.lower() == 'headless chrome':
    ch_Options = Options()
    ch_Options.add_argument('--headless')
    ch_Options.add_argument("--disable-gpu")
    driver = webdriver.Chrome('..\drivers\chromedriver',options=ch_Options)
elif brower.lower() == 'firefox':
    driver = webdriver.Firefox(executable_path=r'..\drivers\geckodriver.exe')
elif brower.lower() == 'headless firefox':
    ff_option = FFOption()
    ff_option.add_argument('--headless')
    ff_option.add_argument("--disable-gpu")
    driver = webdriver.Firefox(executable_path=r'..\drivers\geckodriver.exe', options=ff_option)
elif brower.lower() == 'ie':
    driver = webdriver.Ie('..\drivers\IEDriverServer')
else:
    raise Exception('Invalid Browser Type')
rahul rai
quelle