복붙노트

[PYTHON] Selenium을 사용하여 인증서를 처리하는 방법은 무엇입니까?

PYTHON

Selenium을 사용하여 인증서를 처리하는 방법은 무엇입니까?

Selenium을 사용하여 브라우저를 시작합니다. 브라우저가 인증서를 수락하도록 요청할 웹 페이지 (URL)를 어떻게 처리 할 수 ​​있습니까?

파이어 폭스에서는 다음과 같은 웹 사이트에서 인증서를 수락하도록 요청할 수 있습니다.

Internet Explorer 브라우저에서 다음과 같이 표시 될 수 있습니다.

Google 크롬 :

내 질문을 반복 : Selenium (Python 프로그래밍 언어)을 사용하여 브라우저 (Internet Explorer, Firefox 및 Chrome)를 시작할 때 웹 사이트 인증서의 수락을 자동화하는 방법은 무엇입니까?

해결법

  1. ==============================

    1.Firefox의 경우 accept_untrusted_certs FirefoxProfile () 옵션을 True로 설정해야합니다.

    Firefox의 경우 accept_untrusted_certs FirefoxProfile () 옵션을 True로 설정해야합니다.

    from selenium import webdriver
    
    profile = webdriver.FirefoxProfile()
    profile.accept_untrusted_certs = True
    
    driver = webdriver.Firefox(firefox_profile=profile)
    driver.get('https://cacert.org/')
    
    driver.close()
    

    Chrome의 경우 --ignore-certificate-errors ChromeOptions () 인수를 추가해야합니다.

    from selenium import webdriver
    
    options = webdriver.ChromeOptions()
    options.add_argument('--ignore-certificate-errors')
    
    driver = webdriver.Chrome(chrome_options=options)
    driver.get('https://cacert.org/')
    
    driver.close()
    

    Internet Explorer의 경우 acceptSslCerts 원하는 기능을 설정해야합니다.

    from selenium import webdriver
    
    capabilities = webdriver.DesiredCapabilities().INTERNETEXPLORER
    capabilities['acceptSslCerts'] = True
    
    driver = webdriver.Ie(capabilities=capabilities)
    driver.get('https://cacert.org/')
    
    driver.close()
    

    실제로 Desired Capabilities 문서에 따르면 acceptSslCerts 기능을 True로 설정하는 것은 일반적인 읽기 / 쓰기 기능이므로 모든 브라우저에서 작동해야합니다.

    Firefox의 실무 데모 :

    >>> from selenium import webdriver
    

    acceptSslCerts를 False로 설정 :

    >>> capabilities = webdriver.DesiredCapabilities().FIREFOX
    >>> capabilities['acceptSslCerts'] = False
    >>> driver = webdriver.Firefox(capabilities=capabilities)
    >>> driver.get('https://cacert.org/')
    >>> print(driver.title)
    Untrusted Connection
    >>> driver.close()
    

    acceptSslCerts를 True로 설정 :

    >>> capabilities = webdriver.DesiredCapabilities().FIREFOX
    >>> capabilities['acceptSslCerts'] = True
    >>> driver = webdriver.Firefox(capabilities=capabilities)
    >>> driver.get('https://cacert.org/')
    >>> print(driver.title)
    Welcome to CAcert.org
    >>> driver.close()
    
  2. ==============================

    2.Firefox의 경우 :

    Firefox의 경우 :

    ProfilesIni profile = new ProfilesIni();
    FirefoxProfile myprofile = profile.getProfile("default");
    myprofile.setAcceptUntrustedCertificates(true);
    myprofile.setAssumeUntrustedCertificateIssuer(true);
    WebDriver driver = new FirefoxDriver(myprofile);
    

    Chrome의 경우 다음을 사용할 수 있습니다.

    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    capabilities.setCapability("chrome.switches", Arrays.asList("--ignore-certificate-errors"));
    driver = new ChromeDriver(capabilities);
    

    Internet Explorer의 경우 다음을 사용할 수 있습니다.

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);      
    Webdriver driver = new InternetExplorerDriver(capabilities);
    
  3. ==============================

    3.Firefox 파이썬의 경우 :

    Firefox 파이썬의 경우 :

    Firefox 자체 서명 인증서 버그가 수정되었습니다. 마리오 네트 파이어 폭스 webdrive 파이썬 파편으로 SSL 인증서 받아

    "acceptSslCerts"는 "acceptInsecureCerts"로 대체되어야합니다.

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
    
    caps = DesiredCapabilities.FIREFOX.copy()
    caps['acceptInsecureCerts'] = True
    ff_binary = FirefoxBinary("path to the Nightly binary")
    
    driver = webdriver.Firefox(firefox_binary=ff_binary, capabilities=caps)
    driver.get("https://expired.badssl.com")
    
  4. ==============================

    4.자바 스크립트 :

    자바 스크립트 :

    const capabilities = webdriver.Capabilities.phantomjs();
    capabilities.set(webdriver.Capability.ACCEPT_SSL_CERTS, true);
    capabilities.set(webdriver.Capability.SECURE_SSL, false);
    capabilities.set('phantomjs.cli.args', ['--web-security=no', '--ssl-protocol=any', '--ignore-ssl-errors=yes']);
    const driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome(), capabilities).build();
    
  5. ==============================

    5.Python 셀레늄을 통해 헤드리스 크롬과 관련된이 질문을하는 사람들에게 유용 할 수있는 https://bugs.chromium.org/p/chromium/issues/detail?id=721739#c102를 찾을 수 있습니다.

    Python 셀레늄을 통해 헤드리스 크롬과 관련된이 질문을하는 사람들에게 유용 할 수있는 https://bugs.chromium.org/p/chromium/issues/detail?id=721739#c102를 찾을 수 있습니다.

    네가 할 수있는 것처럼 보인다.

    chrome_options = Options()
    chrome_options.add_argument('--allow-insecure-localhost')
    

    또는 다음의 라인을 따라 뭔가 (파이썬에 적응해야 할 수도 있음) :

    ChromeOptions options = new ChromeOptions()
    DesiredCapabilities caps = DesiredCapabilities.chrome()
    caps.setCapability(ChromeOptions.CAPABILITY, options)
    caps.setCapability("acceptInsecureCerts", true)
    WebDriver driver = new ChromeDriver(caps)
    
  6. ==============================

    6.셀레늄 파이썬에서는 desired_capabilities를 다음과 같이 설정해야합니다.

    셀레늄 파이썬에서는 desired_capabilities를 다음과 같이 설정해야합니다.

    desired_capabilities = {
        "acceptInsecureCerts": True
    }
    
  7. ==============================

    7.브라우저의 인증서 저장소에서 필요한 인증서를 제외하고 모두 삭제 한 다음 인증서가 하나만있는 경우 인증서를 자동으로 선택하도록 브라우저를 구성합니다.

    브라우저의 인증서 저장소에서 필요한 인증서를 제외하고 모두 삭제 한 다음 인증서가 하나만있는 경우 인증서를 자동으로 선택하도록 브라우저를 구성합니다.

  8. ==============================

    8.프로필과 드라이버를 생성하면 Firefox에서 인증서 문제를 해결하는 데 도움이됩니다.

    프로필과 드라이버를 생성하면 Firefox에서 인증서 문제를 해결하는 데 도움이됩니다.

    var profile = new FirefoxProfile();
    profile.SetPreference("network.automatic-ntlm-auth.trusted-uris","DESIREDURL");
    driver = new FirefoxDriver(profile);
    
  9. ==============================

    9.이 문제와 관련된 업데이트입니다.

    이 문제와 관련된 업데이트입니다.

    드라이버 필요 :

    Linux : Centos 7 64 비트, Window 7 64 비트

    Firefox : 52.0.3

    Selenium Webdriver : 3.4.0 (Windows), 3.8.1 (Linux Centos)

    GeckoDriver : v0.16.0 (Windows), v0.17.0 (Linux Centos)

    암호

    System.setProperty("webdriver.gecko.driver", "/home/seleniumproject/geckodrivers/linux/v0.17/geckodriver");
    
    ProfilesIni ini = new ProfilesIni();
    
    
    // Change the profile name to your own. The profile name can 
    // be found under .mozilla folder ~/.mozilla/firefox/profile. 
    // See you profile.ini for the default profile name
    
    FirefoxProfile profile = ini.getProfile("default"); 
    
    DesiredCapabilities cap = new DesiredCapabilities();
    cap.setAcceptInsecureCerts(true);
    
    FirefoxBinary firefoxBinary = new FirefoxBinary();
    
    GeckoDriverService service =new GeckoDriverService.Builder(firefoxBinary)
        .usingDriverExecutable(new 
    File("/home/seleniumproject/geckodrivers/linux/v0.17/geckodriver"))
        .usingAnyFreePort()
        .usingAnyFreePort()
        .build();
    try {
        service.start();
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    FirefoxOptions options = new FirefoxOptions().setBinary(firefoxBinary).setProfile(profile).addCapabilities(cap);
    
    driver = new FirefoxDriver(options);
    driver.get("https://www.google.com");
    
    System.out.println("Life Title -> " + driver.getTitle());
    driver.close();
    
  10. ==============================

    10.나는 셀렌 웹 드라이버 3.1 PhantomJSDriver 함께 .net C #에서이 작업을 수행 할 수있었습니다.

    나는 셀렌 웹 드라이버 3.1 PhantomJSDriver 함께 .net C #에서이 작업을 수행 할 수있었습니다.

     [TestMethod]
        public void headless()
        {
    
    
            var driverService = PhantomJSDriverService.CreateDefaultService(@"C:\Driver\phantomjs\");
            driverService.SuppressInitialDiagnosticInformation = true;
            driverService.AddArgument("--web-security=no");
            driverService.AddArgument("--ignore-ssl-errors=yes");
            driver = new PhantomJSDriver(driverService);
    
            driver.Navigate().GoToUrl("XXXXXX.aspx");
    
            Thread.Sleep(6000);
        }
    
  11. ==============================

    11.이 문제에 대한 표준적인 결정이 아직없는 것 같습니다. 다른 말로하면 - 여전히 Internet Explorer, Mozilla 또는 Google Chrome의 경우 "인증을 받겠습니다."라고 말할 수는 없습니다. 그러나 모질라 파이어 폭스에서이 문제를 해결하는 방법을 보여주는 한 개의 게시물을 발견했습니다. 관심이있는 경우 여기에서 확인할 수 있습니다.

    이 문제에 대한 표준적인 결정이 아직없는 것 같습니다. 다른 말로하면 - 여전히 Internet Explorer, Mozilla 또는 Google Chrome의 경우 "인증을 받겠습니다."라고 말할 수는 없습니다. 그러나 모질라 파이어 폭스에서이 문제를 해결하는 방법을 보여주는 한 개의 게시물을 발견했습니다. 관심이있는 경우 여기에서 확인할 수 있습니다.

  12. from https://stackoverflow.com/questions/24507078/how-to-deal-with-certificates-using-selenium by cc-by-sa and MIT license