복붙노트

[PYTHON] Python으로 Selenium에서 프로그래밍 방식으로 파이어 폭스 헤드리스를 만드는 방법은 무엇입니까?

PYTHON

Python으로 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. ==============================

    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.
    
        """
    
  2. from https://stackoverflow.com/questions/46753393/how-to-make-firefox-headless-programmatically-in-selenium-with-python by cc-by-sa and MIT license