Как программно сделать firefox без головы в Selenium с помощью Python?


125

Я запускаю этот код с python, selenium и firefox, но все еще получаю «головную» версию 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)

Я также пробовал несколько вариантов двоичного кода:

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

2
Я просто хотел добавить, что ваша версия Firefox должна быть 56+, чтобы это работало. Мне потребовалось время, чтобы понять, почему какое-либо из опубликованных решений не сработало на моем. developer.mozilla.org/en-US/Firefox/Headless_mode
Бора Ли

Ответы:


224

Чтобы запустить браузер Firefox без подключения к голове, вы можете установить headlessсвойство через Options()класс следующим образом:

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

Есть еще один способ реализовать безголовый режим. Если вам необходимо отключить или включить режим обезглавленного в Firefox, без изменения коды, вы можете установить переменные окружения MOZ_HEADLESSв любой других, если вы хотите , чтобы запустить Firefox без головы, или не установлены вообще.

Это очень полезно, когда вы используете, например, непрерывную интеграцию и хотите запускать функциональные тесты на сервере, но при этом иметь возможность запускать тесты в нормальном режиме на вашем ПК.

$ MOZ_HEADLESS=1 python manage.py test # testing example in Django with headless Firefox

или

$ 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

Как настроить ChromeDriver для запуска браузера Chrome в режиме Headless через Selenium?


4
Обновленный Selenium (3.14.1) и PhantomJS теперь устарели, поэтому ни один из моих тестов не работал. Пришлось перейти на Firefox - без головы в спешке. Спасибо за это отличное резюме
MortenB

5
MOZ_HEADLESS = 1 тест python manage.py сделал свое дело! Больше нет необходимости в xvfb-run (:
Nicky Kouffeld

23

Первый ответ больше не работает.

Это сработало для меня:

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' отлично работает!
hirnwunde

1
добавить from selenium import webdriverв invokewebdriver.Firefox()
Snow

2
Принятый ответ по-прежнему работает с последней версией Firefoxиgeckodriver
CONvid19


2

Просто примечание для людей, которые, возможно, нашли это позже (и хотят, чтобы это было сделано с помощью Java); FirefoxOptionsтакже может включать безголовый режим:

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

6
Этот вопрос касается Python, а не Java.
Мапио,

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')
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.