tag name instalar execute_script example como python selenium python-3.x selenium-webdriver browser

name - selenium webdriver python



¿Cómo lidiar con certificados usando Selenium? (9)

Estoy usando Selenium para iniciar un navegador. ¿Cómo puedo tratar con las páginas web (URL) que le pedirán al navegador que acepte o no un certificado?

En Firefox, puedo tener un sitio web como ese que me pide que acepte su certificado de esta manera:

En el navegador Internet Explorer, puedo obtener algo como esto:

En Google Chrome:

Repito mi pregunta: ¿cómo puedo automatizar la aceptación del certificado de un sitio web cuando abro un navegador (Internet Explorer, Firefox y Google Chrome) con Selenium (lenguaje de programación Python) ?


Crear un perfil y luego un controlador nos ayuda a resolver el problema del certificado en Firefox:

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


Elimine todo, excepto el certificado necesario, del almacén de certificados de su navegador y luego configure el navegador para seleccionar automáticamente el certificado cuando solo haya un certificado presente.


Javascript:

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();


Para Firefox Python:

El error del certificado auto firmado de Firefox ahora se ha corregido: acepta el certificado ssl con marionette firefox webdrive python splinter

"acceptSslCerts" debe reemplazarse por "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")


Para Firefox:

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

Para Chrome podemos usar:

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

Para Internet Explorer podemos usar:

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


Para las personas que se acerquen a esta pregunta relacionada con el cromo sin cabeza a través del selenio python, puede encontrar que https://bugs.chromium.org/p/chromium/issues/detail?id=721739#c102 es útil.

Parece que puedes hacer

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

o algo similar a lo siguiente (puede necesitar adaptarse para python):

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


Parece que todavía no tiene una decisión estándar de este problema. En otras palabras, todavía no puede decir "Está bien, haga una certificación, sea lo que sea si es Internet Explorer, Mozilla o Google Chrome". Pero encontré una publicación que muestra cómo solucionar el problema en Mozilla Firefox. Si le interesa, puede consultarlo here .


Solo una actualización con respecto a este problema.

Requiere controladores:

Linux: Centos 7 64bit, Window 7 64bit

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)

Código

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();


Para Firefox, debe establecer la accept_untrusted_certs FirefoxProfile() en 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()

Para Chrome, debe agregar el argumento --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()

Para Internet Explorer, debe establecer la capacidad deseada de acceptSslCerts :

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

De hecho, de acuerdo con la documentación Desired Capabilities , establecer la capacidad de acceptSslCerts en True debería funcionar para todos los navegadores, ya que es una capacidad de lectura / escritura genérica:

acceptSslCerts

booleano

Si la sesión debe aceptar todos los certificados SSL de forma predeterminada.

Demostración de trabajo para Firefox:

>>> from selenium import webdriver

Estableciendo acceptSslCerts en 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()

Estableciendo acceptSslCerts en 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()