Як зробити Firefox без голови без програмного забезпечення у Selenium з python?


124

Я використовую цей код з python, селеном та firefox, але все одно отримую 'head' версію 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
Бора Лі

Відповіді:


223

Щоб без голосу викликати браузер 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 у режимі без голови через Selenium?


4
Оновлений селен (3.14.1) та PhantomJS тепер застарілий, тому жоден з моїх тестів не працював. Довелося перейти на Firefox - без голови поспішаючи. Дякую за цей чудовий підсумок
MortenB

5
MOZ_HEADLESS = 1 тест python manag.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 / селен .__ версія__ == '3.141.0' чудово працює!
hirnwunde

1
додати from selenium import webdriverдля викликуwebdriver.Firefox()
Сніг

2
Прийнята відповідь як і раніше працює з останньою версією Firefoxіgeckodriver
CONvid19


2

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

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

6
Це питання стосується Python, а не 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')
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.