Python을 사용하여 Selenium에서 프로그래밍 방식으로 firefox 헤드리스를 만드는 방법은 무엇입니까?


124

이 코드를 python, selenium 및 firefox로 실행하고 있지만 여전히 firefox의 'head'버전을 얻습니다.

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
보라 리

답변:


222

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에서 헤드리스 모드를 비활성화하거나 활성화해야하는 경우 Firefox를 헤드리스로 실행하거나 전혀 설정하지 않으려면 환경 변수 MOZ_HEADLESS무엇이든 설정할 수 있습니다.

이는 예를 들어 지속적 통합을 사용하고 서버에서 기능 테스트를 실행하지만 PC에서 일반 모드로 테스트를 실행할 수있는 경우 매우 유용합니다.

$ 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

아우트로

Selenium을 통해 헤드리스 모드에서 Chrome 브라우저를 시작하도록 ChromeDriver를 구성하는 방법은 무엇입니까?


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호출에 추가webdriver.Firefox()
Snow

2
허용 된 답변은 최신 버전 Firefoxgeckodriver
CONvid19


2

나중에 이것을 발견하고이를 달성하기 위해 자바 방식을 원하는 사람들을위한 메모입니다. FirefoxOptions헤드리스 모드를 활성화 할 수도 있습니다.

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

6
이 질문은 자바가 아니라 Python에 관한 것입니다.
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')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.