Come rendere firefox senza testa a livello di programmazione in Selenium con python?


124

Sto eseguendo questo codice con python, selenio e firefox ma ottengo comunque la versione "head" di 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)

Ho anche provato alcune varianti di binario:

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

2
Volevo solo aggiungere che la tua versione di Firefox dovrebbe essere 56+ affinché funzioni. Mi ci è voluto un po 'per capire perché nessuna delle soluzioni pubblicate non funzionava sulla mia. developer.mozilla.org/en-US/Firefox/Headless_mode
Bora Lee

Risposte:


223

Per richiamare il browser Firefox senza testa, è possibile impostare la headlessproprietà tramite la Options()classe come segue:

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

C'è un altro modo per ottenere la modalità senza testa. Se è necessario disabilitare o abilitare la modalità headless in Firefox, senza modificare il codice, è possibile impostare la variabile di ambiente MOZ_HEADLESSsu qualsiasi cosa se si desidera che Firefox venga eseguito senza headless o non impostarla affatto.

Ciò è molto utile quando si utilizza, ad esempio, l'integrazione continua e si desidera eseguire i test funzionali nel server ma essere comunque in grado di eseguire i test in modalità normale nel 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

outro

Come configurare ChromeDriver per avviare il browser Chrome in modalità Headless tramite Selenium?


4
Selenium aggiornato (3.14.1) e PhantomJS sono ora deprecati, quindi nessuno dei miei test ha funzionato. Ho dovuto passare a Firefox, senza testa in fretta. Grazie per questo eccellente riepilogo
MortenB

5
MOZ_HEADLESS = 1 test di python manage.py ha funzionato! Non c'è più bisogno di xvfb-run (:
Nicky Kouffeld

23

La prima risposta non funziona più.

Questo ha funzionato per me:

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 / selenium .__ version__ == '3.141.0' funziona alla grande!
hirnwunde

1
aggiungi from selenium import webdriverper invocarewebdriver.Firefox()
Neve

2
La risposta accettata funziona ancora con l'ultima versione di Firefoxegeckodriver
CONvid19


2

Solo una nota per le persone che potrebbero averlo trovato più tardi (e vogliono il modo java per ottenerlo); FirefoxOptionsè anche in grado di abilitare la modalità senza testa:

FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setHeadless(true);

6
Questa domanda riguarda Python, non 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')
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.