Как сделать Firefox безголовым программно в Selenium с помощью Python?
Я запускаю этот код с 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")
9 ответов
Чтобы запускать браузер 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
Первый ответ больше не работает.
Это сработало для меня:
from selenium.webdriver.firefox.options import Options as FirefoxOptions
options = FirefoxOptions()
options.add_argument("--headless")
driver = webdriver.Firefox(options=options)
driver.get("http://google.com")
Мой ответ:
set_headless(headless=True) is deprecated.
options.headless = True
работает для меня
Вы можете запустить безголовый Firefox с Selenium на Python, как показано ниже:
from selenium import webdriver
options = webdriver.FirefoxOptions()
options.add_argument("-headless") # Here
driver = webdriver.Firefox(options=options)
Или:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.add_argument("-headless") # Here
driver = webdriver.Firefox(options=options)
Кроме того, в приведенных ниже примерах можно протестировать администратор Django с помощью безголовых Firefox, Selenium, pytest-django и Django. *В моем ответе объясняется, как протестировать Django Admin с помощью нескольких автономных браузеров (Chrome, Microsoft Edge и Firefox), Selenium, pytest-django и Django:
# "tests/test_1.py"
import pytest
from selenium import webdriver
from django.test import LiveServerTestCase
@pytest.fixture(scope="class")
def firefox_driver_init(request):
options = webdriver.FirefoxOptions()
options.add_argument("-headless")
firefox_driver = webdriver.Firefox(options=options)
request.cls.driver = firefox_driver
yield
firefox_driver.close()
@pytest.mark.usefixtures("firefox_driver_init")
class Test_URL_Firefox(LiveServerTestCase):
def test_open_url(self):
self.driver.get(("%s%s" % (self.live_server_url, "/admin/")))
assert "Log in | Django site admin" in self.driver.title
Или:
# "tests/conftest.py"
import pytest
from selenium import webdriver
@pytest.fixture(scope="class")
def firefox_driver_init(request):
options = webdriver.FirefoxOptions()
options.add_argument("-headless")
firefox_driver = webdriver.Firefox(options=options)
request.cls.driver = firefox_driver
yield
firefox_driver.close()
# "tests/test_1.py"
import pytest
from django.test import LiveServerTestCase
@pytest.mark.usefixtures("firefox_driver_init")
class Test_URL_Firefox(LiveServerTestCase):
def test_open_url(self):
self.driver.get(("%s%s" % (self.live_server_url, "/admin/")))
assert "Log in | Django site admin" in self.driver.title
Для OP или для всех, кто в настоящее время заинтересован, вот раздел кода, который в настоящее время работал у меня с firefox:
opt = webdriver.FirefoxOptions()
opt.add_argument('-headless')
ffox_driver = webdriver.Firefox(executable_path='\path\to\geckodriver', options=opt)
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')
from selenium.webdriver.firefox.options import Options
if __name__ == "__main__":
options = Options()
options.add_argument('-headless')
driver = Firefox(executable_path='geckodriver', firefox_options=options)
wait = WebDriverWait(driver, timeout=10)
driver.get('http://www.google.com')
Протестировано, работает, как ожидалось, и это из Официального - Безголовый режим | Mozilla
В настоящее время с этим кодом:
options = Options()
options.headless = True
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install(),options=options)
У нас есть предупреждение:
Предупреждение об устаревании:executable_path устарел, передайте объект службы
Переход на этот работает отлично:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# selenium drivers: https://www.selenium.dev/documentation/webdriver/getting_started/install_drivers/
# pip3 install selenium
# pip3 install webdriver-manager
# for custom firefox installation: link firefox to /usr/bin/firefox, example: ln -s /opt/firefox/firefox-bin /usr/bin/firefox
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.service import Service
options = Options()
options.headless = True
service = Service(executable_path=GeckoDriverManager().install())
driver = webdriver.Firefox(service=service, options=options)
driver.get("http://google.com/")
print("Headless Firefox Initialized")
driver.quit()
Просто примечание для людей, которые, возможно, нашли это позже (и хотят, чтобы это было сделано с помощью Java); FirefoxOptions
также может включать безголовый режим:
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setHeadless(true);