Selenium: autenticación básica mediante URL

Resuelto Lino asked hace 7 años • 6 respuestas

En mi Selenium-Test(con chromedriver-2.24), estoy intentando acceder a mi página web mediante autenticación básica con la siguiente declaración:

WebDriver driver  = ...;
driver.get("http://admin:admin@localhost:8080/project/");

Pero Google Chrome me da la siguiente advertencia en la consola:

[Obsoleto] Las solicitudes de subrecursos cuyas URL contienen credenciales integradas (por ejemplo, https://user:pass@host/) están bloqueadas. Consulte https://www.chromestatus.com/feature/5669008342777856 para obtener más detalles.

En el enlace etiquetado se menciona que se eliminó el soporte:

Eliminación de soporte para credenciales integradas en solicitudes de subrecursos. (remoto)

Mi pregunta ahora es: ¿existe otra forma de autenticación básica desde Selenium?

NOTA : esto no ha ayudado: ¿ Cómo manejar los encabezados de autenticación básica HTTP en Selenium Webdriver usando Java?

Lino avatar Jul 27 '17 15:07 Lino
Aceptado

La autenticación básica a través de URL está bloqueada solo para los subrecursos. Entonces aún puedes usarlo en el dominio:

driver.get("http://admin:admin@localhost:8080");
driver.get("http://localhost:8080/project");

También puedes crear una pequeña extensión para configurar automáticamente las credenciales cuando se soliciten:

options = webdriver.ChromeOptions()
options.add_extension(r'C:\dev\credentials.zip')

https://gist.github.com/florentbr/25246cd9337cebc07e2bbb0b9bf0de46

Florent B. avatar Jul 27 '2017 12:07 Florent B.

Hubo algunas actualizaciones en esto linkcomo:

Chromium Issue 435547Eliminación de soporte para credenciales integradas en solicitudes de subrecursos. (remoto)

Deberíamos bloquear las solicitudes de subrecursos que contengan credenciales integradas (por ejemplo, " http://ima_user: [email protected] /yay.tiff "). Dichos recursos se manejarían como errores de red.

Sin embargo, la funcionalidad de autenticación básica todavía funciona con Selenium 3.4.0 , geckodriver v0.18.0 , chromedriver v2.31.488763 , Google Chrome 60.x y Mozilla Firefox 53.0 a través de enlaces Selenium-Java .

Aquí está el código de ejemplo que intenta abrir la URL http://the-internet.herokuapp.com/basic_auth con un conjunto válido de credenciales y funciona.

Firefox:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class BasicAuthentication_FF 
{
    public static void main(String[] args) 
    {
        System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
        WebDriver driver =  new FirefoxDriver();
        driver.navigate().to("http://admin:[email protected]/basic_auth");
    }
}

Cromo:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class BasicAuthentication_Chrome 
{
    public static void main(String[] args) 
    {
        System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("start-maximized");
        options.addArguments("disable-infobars");
        options.addArguments("--disable-extensions");
        WebDriver driver =  new ChromeDriver(options);
        driver.navigate().to("http://admin:[email protected]/basic_auth");
    }
}
undetected Selenium avatar Jul 27 '2017 13:07 undetected Selenium

El enfoque de Florent B. de llamar a .get en la URL dos veces funcionó para mí con una ligera modificación. En JS:

driver
        .get('http://admin:admin@localhost:8080')
        .then( () => driver.get('http://localhost:8080') )

trabajando en Google Chrome 62.0.3202.94 con ChromeDriver 2.33.506092 y el enfoque parece compatible con Firefox 56.0.2 con geckodriver 0.19.1 y phantomjs 2.1.1, todo bajo Debian Linux 9.

Lo que creo que está sucediendo es que la primera llamada configura el encabezado de Autorización enviado por el navegador. La segunda llamada elimina las credenciales de la URL y ya no se aplican a los subrecursos. El thensincroniza las dos solicitudes asegurando el orden.

Tongfa avatar Nov 18 '2017 02:11 Tongfa