[PYTHON] Python으로 Selenium에서 프로그래밍 방식으로 파이어 폭스 헤드리스를 만드는 방법은 무엇입니까?
PYTHONPython으로 Selenium에서 프로그래밍 방식으로 파이어 폭스 헤드리스를 만드는 방법은 무엇입니까?
파이썬, 셀레늄, 파이어 폭스로이 코드를 실행하고 있지만 여전히 파이어 폭스의 '헤드'버전을 얻습니다.
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")
해결법
-
==============================
1.Selenium v3.6.0의 출시 노트에는 헤드리스 모드에서 Firefox 및 Chrome을 시작하기위한 추가 옵션이 명시되어 있습니다. 따라서 headless 인수를 호출하려면 다음과 같이 Options 클래스를 사용해야합니다.
Selenium v3.6.0의 출시 노트에는 헤드리스 모드에서 Firefox 및 Chrome을 시작하기위한 추가 옵션이 명시되어 있습니다. 따라서 headless 인수를 호출하려면 다음과 같이 Options 클래스를 사용해야합니다.
from selenium import webdriver from selenium.webdriver.firefox.options import Options options = Options() options.add_argument("--headless") driver = webdriver.Firefox(firefox_options=options, executable_path="C:\\Utility\\BrowserDrivers\\geckodriver.exe") print("Firefox Headless Browser Invoked") driver.get('http://google.com/') driver.quit()
헤드리스 모드에서 파이어 폭스 브라우저와 크롬 브라우저를 호출하는 것은 프로그래밍 방식으로 set_headless (headless = boolean_value) 메소드를 다음과 같이 쉽게 사용할 수있게되었습니다.
헤드리스 모드를 수행하는 세 번째 방법이 있습니다. 코드를 변경하지 않고 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
Firefox 브라우저와 Chrome 브라우저를 호출하려면 다음과 같이 Options () 클래스를 통해 --headless 속성을 설정할 수 있습니다.
from selenium import webdriver from selenium.webdriver.firefox.options import Options options = Options() options.headless = True driver = webdriver.Firefox(firefox_options=options, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe') driver.get("http://google.com/") print ("Headless Firefox Initialized") driver.quit()
이제 firefox_options 또는 chrome_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의 새로운 로컬 세션을 시작하기위한 업데이트 된 __init__ 메소드는 다음과 같습니다 :
def __init__(self, firefox_profile=None, firefox_binary=None, timeout=30, capabilities=None, proxy=None, executable_path="geckodriver", options=None, service_log_path="geckodriver.log", firefox_options=None, service_args=None, desired_capabilities=None, log_path=None): """Starts a new local session of Firefox. Based on the combination and specificity of the various keyword arguments, a capabilities dictionary will be constructed that is passed to the remote end. The keyword arguments given to this constructor are helpers to more easily allow Firefox WebDriver sessions to be customised with different options. They are mapped on to a capabilities dictionary that is passed on to the remote end. As some of the options, such as `firefox_profile` and `options.profile` are mutually exclusive, precedence is given from how specific the setting is. `capabilities` is the least specific keyword argument, followed by `options`, followed by `firefox_binary` and `firefox_profile`. In practice this means that if `firefox_profile` and `options.profile` are both set, the selected profile instance will always come from the most specific variable. In this case that would be `firefox_profile`. This will result in `options.profile` to be ignored because it is considered a less specific setting than the top-level `firefox_profile` keyword argument. Similarily, if you had specified a `capabilities["moz:firefoxOptions"]["profile"]` Base64 string, this would rank below `options.profile`. :param firefox_profile: Instance of ``FirefoxProfile`` object or a string. If undefined, a fresh profile will be created in a temporary location on the system. :param firefox_binary: Instance of ``FirefoxBinary`` or full path to the Firefox binary. If undefined, the system default Firefox installation will be used. :param timeout: Time to wait for Firefox to launch when using the extension connection. :param capabilities: Dictionary of desired capabilities. :param proxy: The proxy settings to us when communicating with Firefox via the extension connection. :param executable_path: Full path to override which geckodriver binary to use for Firefox 47.0.1 and greater, which defaults to picking up the binary from the system path. :param options: Instance of ``options.Options``. :param service_log_path: Where to log information from the driver. :param desired_capabilities: alias of capabilities. In future versions of this library, this will replace 'capabilities'. This will make the signature consistent with RemoteWebDriver. """
from https://stackoverflow.com/questions/46753393/how-to-make-firefox-headless-programmatically-in-selenium-with-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬에서의 프로세스 당 CPU 사용량 (0) | 2018.11.02 |
---|---|
[PYTHON] 클래스의 메소드에 파이썬 장식자를 적용하기 (0) | 2018.11.02 |
[PYTHON] 세트의 모든 부분 집합을 얻는 방법? (powerset) (0) | 2018.11.02 |
[PYTHON] Python과 OpenCV를 사용하여 붉은 색 찾기 (0) | 2018.11.02 |
[PYTHON] Python으로 구동되는 PhantomJS / Selenium의 CSS / 기타 리소스 다운로드 방지 (0) | 2018.11.02 |