iedriverserver for descargar chromedriver c# selenium-webdriver selenium-chromedriver http-basic-authentication

c# - for - selenium java



Selenium Chrome 60 Manejo sin cabezales Autenticación básica Diálogo SAML a través de HTTPS (2)

Quizás pueda realizar una conexión previa utilizando XMLHttpRequest utilizando el método setRequestHeader para que pueda especificar el encabezado de autenticación. Después de realizar una única solicitud, se autenticará para todo el otro tipo de solicitudes. El problema más grande podría ser XSS, dependiendo de su escenario, quizás pueda solucionarlo.

Chrome 59 eliminó la compatibilidad con las URL de https: // usuario: contraseñ[email protected] .

Tengo una prueba de selenio C # que debe funcionar con Chrome versión 60 en Windows en modo " sin cabeza "

ChromeOptions options = new ChromeOptions(); options.AddArgument("headless"); driver = new ChromeDriver(chrome, options);

Aquí está el diálogo requerido de autenticación SAML que trato de manejar en Windows:

En función de la respuesta que se da aquí: Cómo manejar la ventana emergente de autenticación con Selenium WebDriver usando Java ) Puedo ver varias soluciones para manejar esto en Firefox, pero nada para Chrome 60 en modo sin cabeza.

He intentado el siguiente código para visitar una URL con credenciales antes de visitar la URL bajo prueba (sin credenciales), sin embargo, parece que hay un bug con Chrome 60.

goTo("http://user:password@localhost"); // Caches auth, but page itself is blocked goTo("http://localhost"); // Uses cached auth, page renders fine // Continue test as normal

Puedo ver el siguiente código en Firefox maneja la autenticación y el diálogo nunca aparece:

FirefoxProfile profile = new FirefoxProfile(); profile.SetPreference("network.automatic-ntlm-auth.trusted-uris", "https://saml.domain.com"); profile.EnableNativeEvents = false;`

Probé la segunda aproximación ( usando AutoIt ) y eso funciona en Chrome 60 pero NO funciona en Chrome 60 en modo Headless .

//Use AutoIt to wait 4 seconds for the authentication required dialog to appear au3.Sleep(4000); //Use AutoIT to send in the credentials from app.config that are encrypted au3.Send(USERNAME + "{TAB}" + PASSWORD + "{ENTER}"); //Refresh the page driver.Navigate().Refresh();

Espero que haya una mejor solución ahora en 2017 y que haya un enfoque que funcione con Chrome 60 en modo sin cabeza , ¿algún indicador?

Para que quede claro: intentar usar credenciales incrustadas NO funcionará con chrome v59 + porque las solicitudes de sub recursos se bloquearán.


Sé que esto tiene casi un año, pero esto es lo que terminó trabajando para mí en una situación similar. Es cierto que la ventana emergente de autenticación ha cambiado y ChromeDriver ya no parece ser compatible con él ni con el esquema http(s)://user:[email protected] , pero la solución alternativa que encontré here parece Haz el truco. Originalmente se escribió para autenticar un sistema proxy, pero se puede modificar para que funcione con cualquier sistema de autenticación.

Básicamente, necesita hacer una extensión de cromo que maneja ingresar los detalles de inicio de sesión en la página. Se puede agregar una extensión de ChromeOptions.AddExtension(string FilePath) con ChromeOptions.AddExtension(string FilePath) y una extensión es solo un archivo zip con un archivo manifest.json y cualquier código para hacer el trabajo. Aquí están los archivos que necesitará.

manifest.json

{ "version": "1.0.0", "manifest_version": 2, "name": "Chrome Proxy", "permissions": [ "proxy", "tabs", "unlimitedStorage", "storage", "<all_urls>", "webRequest", "webRequestBlocking" ], "background": { "scripts": ["background.js"] }, "minimum_chrome_version":"22.0.0" }

background.js

function callbackFn(details) { return { authCredentials: { username: "YOUR_PROXY_USERNAME", password: "YOUR_PROXY_PASSWORD" } }; } chrome.webRequest.onAuthRequired.addListener( callbackFn, {urls: ["YOUR_WEBSITE_ADDRESS"]}, [''blocking''] );