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

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?


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

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

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')
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.