Como fazer o firefox headless programaticamente no Selenium com python?

124

Estou executando este código com python, selenium e firefox, mas ainda obtenho a versão 'principal' do 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)

Também tentei algumas variações de binário:

binary = FirefoxBinary('C:\\Program Files\\Nightly\\firefox.exe', log_file=sys.stdout)
        binary.add_command_line_options("--headless")
Tintinabulador Zea
fonte
2
Eu só queria acrescentar que a sua versão do Firefox deve ser 56+ para que isso funcione. Levei um tempo para descobrir por que alguma das soluções postadas não funcionou na minha. developer.mozilla.org/en-US/Firefox/Headless_mode
Bora Lee

Respostas:

223

Para invocar o navegador Firefox sem cabeça, você pode definir a headlesspropriedade por meio da Options()classe da seguinte maneira:

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

Existe outra maneira de realizar o modo sem cabeça. Se você precisar desabilitar ou habilitar o modo headless no Firefox, sem alterar o código, você pode definir a variável de ambiente MOZ_HEADLESSpara qualquer coisa se quiser que o Firefox execute headless ou não defini-la de todo.

Isso é muito útil quando você está usando, por exemplo, integração contínua e deseja executar os testes funcionais no servidor, mas ainda conseguir executar os testes no modo normal em seu 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

Como configurar o ChromeDriver para iniciar o navegador Chrome no modo Headless por meio do Selenium?

DebanjanB
fonte
4
Selenium atualizado (3.14.1) e PhantomJS agora estão obsoletos, então nenhum dos meus testes funcionou. Tive que mudar para o Firefox --headless com pressa. Obrigado por este excelente resumo
MortenB
5
MOZ_HEADLESS = 1 teste python manage.py resolveu! Não há mais necessidade de executar o xvfb (:
Nicky Kouffeld
23

A primeira resposta não funciona mais.

Isso funcionou para mim:

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
fonte
Python 3.8.2 / selenium .__ version__ == '3.141.0' funciona muito bem!
hirnwunde
1
adicionar from selenium import webdriverpara invocarwebdriver.Firefox()
Neve,
2
A resposta aceita ainda funciona com a versão mais recente de Firefoxegeckodriver
CONvid19
2

Apenas uma nota para as pessoas que podem ter encontrado isso mais tarde (e querem uma maneira java de conseguir isso); FirefoxOptionstambém é capaz de ativar o modo sem cabeça:

FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setHeadless(true);
TomasH
fonte
6
Esta pergunta é sobre Python, não 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
fonte