[PYTHON] Selenium을 사용하여 인증서를 처리하는 방법은 무엇입니까?
PYTHONSelenium을 사용하여 인증서를 처리하는 방법은 무엇입니까?
Selenium을 사용하여 브라우저를 시작합니다. 브라우저가 인증서를 수락하도록 요청할 웹 페이지 (URL)를 어떻게 처리 할 수 있습니까?
파이어 폭스에서는 다음과 같은 웹 사이트에서 인증서를 수락하도록 요청할 수 있습니다.
Internet Explorer 브라우저에서 다음과 같이 표시 될 수 있습니다.
Google 크롬 :
내 질문을 반복 : Selenium (Python 프로그래밍 언어)을 사용하여 브라우저 (Internet Explorer, Firefox 및 Chrome)를 시작할 때 웹 사이트 인증서의 수락을 자동화하는 방법은 무엇입니까?
해결법
-
==============================
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.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.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.자바 스크립트 :
자바 스크립트 :
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.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.셀레늄 파이썬에서는 desired_capabilities를 다음과 같이 설정해야합니다.
셀레늄 파이썬에서는 desired_capabilities를 다음과 같이 설정해야합니다.
desired_capabilities = { "acceptInsecureCerts": True }
-
==============================
7.브라우저의 인증서 저장소에서 필요한 인증서를 제외하고 모두 삭제 한 다음 인증서가 하나만있는 경우 인증서를 자동으로 선택하도록 브라우저를 구성합니다.
브라우저의 인증서 저장소에서 필요한 인증서를 제외하고 모두 삭제 한 다음 인증서가 하나만있는 경우 인증서를 자동으로 선택하도록 브라우저를 구성합니다.
-
==============================
8.프로필과 드라이버를 생성하면 Firefox에서 인증서 문제를 해결하는 데 도움이됩니다.
프로필과 드라이버를 생성하면 Firefox에서 인증서 문제를 해결하는 데 도움이됩니다.
var profile = new FirefoxProfile(); profile.SetPreference("network.automatic-ntlm-auth.trusted-uris","DESIREDURL"); driver = new FirefoxDriver(profile);
-
==============================
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.나는 셀렌 웹 드라이버 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.이 문제에 대한 표준적인 결정이 아직없는 것 같습니다. 다른 말로하면 - 여전히 Internet Explorer, Mozilla 또는 Google Chrome의 경우 "인증을 받겠습니다."라고 말할 수는 없습니다. 그러나 모질라 파이어 폭스에서이 문제를 해결하는 방법을 보여주는 한 개의 게시물을 발견했습니다. 관심이있는 경우 여기에서 확인할 수 있습니다.
이 문제에 대한 표준적인 결정이 아직없는 것 같습니다. 다른 말로하면 - 여전히 Internet Explorer, Mozilla 또는 Google Chrome의 경우 "인증을 받겠습니다."라고 말할 수는 없습니다. 그러나 모질라 파이어 폭스에서이 문제를 해결하는 방법을 보여주는 한 개의 게시물을 발견했습니다. 관심이있는 경우 여기에서 확인할 수 있습니다.
from https://stackoverflow.com/questions/24507078/how-to-deal-with-certificates-using-selenium by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 하위 프로세스 : Windows에서 하위 프로세스 삭제 (0) | 2018.10.04 |
---|---|
[PYTHON] 장고 템플릿에서 getattr () 스타일 룩업 수행하기 (0) | 2018.10.04 |
[PYTHON] 파이썬 팬더 중복 열 제거 (0) | 2018.10.04 |
[PYTHON] Windows에서 fcntl 대체 (0) | 2018.10.04 |
[PYTHON] 소수점 이하의 소수점을 반올림하는 법? (0) | 2018.10.04 |