Comment rendre Firefox sans tête par programmation dans Selenium avec Python?

124

J'exécute ce code avec python, sélénium et Firefox, mais j'utilise toujours la version `` principale '' de 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)

J'ai également essayé quelques variantes de binaire:

binary = FirefoxBinary('C:\\Program Files\\Nightly\\firefox.exe', log_file=sys.stdout)
        binary.add_command_line_options("--headless")
Tintinabulateur Zea
la source
2
Je voulais juste ajouter que votre version de Firefox devrait être 56+ pour que cela fonctionne. Il m'a fallu un certain temps pour comprendre pourquoi l'une des solutions affichées ne fonctionnait pas sur la mienne. developer.mozilla.org/en-US/Firefox/Headless_mode
Bora Lee

Réponses:

223

Pour appeler le navigateur Firefox sans tête, vous pouvez définir la headlesspropriété via la Options()classe comme suit:

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()

Il existe une autre façon d'accomplir le mode sans tête. Si vous devez désactiver ou activer le mode sans tête dans Firefox, sans changer le code, vous pouvez définir la variable d'environnement MOZ_HEADLESSsur ce que vous voulez si vous voulez que Firefox fonctionne sans tête, ou ne la définissez pas du tout.

Ceci est très utile lorsque vous utilisez par exemple l'intégration continue et que vous souhaitez exécuter les tests fonctionnels dans le serveur tout en étant capable d'exécuter les tests en mode normal sur votre PC.

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

ou

$ 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

Comment configurer ChromeDriver pour lancer le navigateur Chrome en mode sans tête via Selenium?

DebanjanB
la source
4
La mise à niveau de Selenium (3.14.1) et PhantomJS est désormais obsolète, donc aucun de mes tests n'a fonctionné. J'ai dû passer à Firefox - sans tête à la hâte. Merci pour cet excellent résumé
MortenB
5
MOZ_HEADLESS = 1 test python manage.py a fait l'affaire! Plus besoin de xvfb-run (:
Nicky Kouffeld
23

La première réponse ne fonctionne plus.

Cela a fonctionné pour moi:

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
la source
Python 3.8.2 / sélénium .__ version__ == '3.141.0' fonctionne très bien!
hirnwunde le
1
ajouter from selenium import webdriverà invoquerwebdriver.Firefox()
Neige le
2
La réponse acceptée fonctionne toujours avec la dernière version de Firefoxetgeckodriver
CONvid19
2

Juste une note pour les personnes qui ont peut-être trouvé cela plus tard (et veulent un moyen java d'y parvenir); FirefoxOptionsest également capable d'activer le mode sans tête:

FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setHeadless(true);
TomasH
la source
6
Cette question concerne Python, pas Java.
Mapio le
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
la source