¿Cómo hacer que Firefox sin cabeza mediante programación en Selenium con Python?

124

Estoy ejecutando este código con python, selenium y firefox, pero todavía obtengo la versión 'principal' 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)

También probé algunas variaciones de binario:

binary = FirefoxBinary('C:\\Program Files\\Nightly\\firefox.exe', log_file=sys.stdout)
        binary.add_command_line_options("--headless")
Tintinabulator Zea
fuente
2
Solo quería agregar que su versión de Firefox debe ser 56+ para que esto funcione. Me tomó un tiempo descubrir por qué alguna de las soluciones publicadas no funcionaba en la mía. developer.mozilla.org/en-US/Firefox/Headless_mode
Bora Lee

Respuestas:

223

Para invocar el navegador Firefox sin cabeza, puede establecer la headlesspropiedad a través de la Options()clase de la siguiente manera:

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

Hay otra forma de lograr el modo sin cabeza. Si necesita deshabilitar o habilitar el modo sin cabeza en Firefox, sin cambiar el código, puede configurar la variable de entorno MOZ_HEADLESSen lo que sea si desea que Firefox se ejecute sin cabeza o no lo configure en absoluto.

Esto es muy útil cuando está utilizando, por ejemplo, la integración continua y desea ejecutar las pruebas funcionales en el servidor pero aún poder ejecutar las pruebas en modo normal en su 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

¿Cómo configurar ChromeDriver para iniciar el navegador Chrome en modo sin cabeza a través de Selenium?

DebanjanB
fuente
4
Selenium actualizado (3.14.1) y PhantomJS ahora están en desuso, por lo que ninguna de mis pruebas funcionó. Tuve que cambiar a Firefox, sin cabeza a toda prisa. Gracias por este excelente resumen
MortenB
5
MOZ_HEADLESS = 1 ¡La prueba de python manage.py funcionó! Ya no es necesario ejecutar xvfb (:
Nicky Kouffeld
23

La primera respuesta ya no funciona.

Esto funcionó para mí:

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
fuente
Python 3.8.2 / selenium .__ version__ == '3.141.0' ¡funciona muy bien!
hirnwunde
1
añadir from selenium import webdriverpara invocarwebdriver.Firefox()
Nieve
2
La respuesta aceptada todavía funciona con la última versión de Firefoxygeckodriver
CONvid19
2

Solo una nota para las personas que puedan haber encontrado esto más tarde (y quieran una forma Java de lograrlo); FirefoxOptionstambién es capaz de habilitar el modo sin cabeza:

FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setHeadless(true);
TomasH
fuente
6
Esta pregunta es sobre Python, no sobre 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
fuente