168 votes

Comment rendre Firefox headless de manière programmatique dans Selenium avec Python ?

J'exécute ce code avec python, selenium et firefox mais j'obtiens toujours la version 'head' 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 aussi essayé quelques variations du binaire :

binary = FirefoxBinary('C:\\Program Files\\Nightly\\firefox.exe', log_file=sys.stdout)
        binary.add_command_line_options("--headless")

2 votes

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 les solutions proposées ne fonctionnaient pas sur le mien. developer.mozilla.org/en-US/Firefox/Headless_mode

315voto

New contributor Points 31198

Pour invoquer Firefox Browser sans tête, vous pouvez définir l'option headless la propriété par Options() 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 y a un autre moyen d'accomplir le mode sans tête. Si vous avez besoin de désactiver ou d'activer le mode sans tête dans Firefox, sans modifier le code, vous pouvez définir la variable d'environnement MOZ_HEADLESS a quoi que ce soit si vous voulez que Firefox fonctionne sans tête, ou ne le définissez pas du tout.

Ceci est très utile lorsque vous utilisez, par exemple, l'intégration continue et que vous voulez exécuter les tests fonctionnels sur 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

o

$ 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

Étapes de la vidéo YouTube


Outro

Comment configurer ChromeDriver pour lancer le navigateur Chrome en mode Headless via Selenium ?

4 votes

J'ai mis à jour Selenium (3.14.1) et PhantomJS est maintenant déprécié, donc aucun de mes tests n'a fonctionné. J'ai dû passer à Firefox --headless à la hâte. Merci pour cet excellent résumé

6 votes

MOZ_HEADLESS=1 python manage.py test a fait l'affaire ! Plus besoin de xvfb-run ( :

0 votes

Je suggérerais d'enlever au moins le premier lien vers YouTube, c'est une vidéo de 15 minutes pour juste dire options.addArguments("--headless"); . Les gens n'ont pas besoin de passer par les pubs de YouTube pour voir ça.

45voto

Philippe Delteil Points 204

La première réponse ne fonctionne plus.

Cela a marché 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")

1 votes

Python 3.8.2 / selenium.__version__ == '3.141.0' fonctionne très bien !

1 votes

Ajouter from selenium import webdriver pour invoquer webdriver.Firefox()

3 votes

La réponse acceptée fonctionne toujours avec la dernière version de Firefox y geckodriver

14voto

Jack Suze Points 118

Ma réponse :

set_headless(headless=True) is deprecated. 

https://seleniumhq.github.io/selenium/docs/api/py/webdriver_firefox/selenium.webdriver.firefox.options.html

options.headless = True

fonctionne pour moi

4voto

rahul rai Points 2035
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')

3voto

mana Points 59

Pour le PO ou toute autre personne intéressée, voici la section du code qui fonctionne pour moi avec firefox actuellement :

opt = webdriver.FirefoxOptions()
opt.add_argument('-headless')
ffox_driver = webdriver.Firefox(executable_path='\path\to\geckodriver', options=opt)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X