Вопрос-ответ

Selenium - Basic Authentication via url

Selenium - базовая аутентификация по URL

В моем Selenium-Testchromedriver-2.24) я пытаюсь получить доступ к своей веб-странице с помощью базовой аутентификации со следующим утверждением:

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

Но Google Chrome выдает мне следующее предупреждение в консоли:


[Устаревание] Запросы к вспомогательным ресурсам, URL-адреса которых содержат встроенные учетные данные (например, https://user:pass@host/), заблокированы. Смотрите https://www.chromestatus.com/feature/5669008342777856 для получения более подробной информации.


В помеченной ссылке упоминается, что поддержка была прекращена:


Отменена поддержка встроенных учетных данных в запросах дополнительных ресурсов. (удалено)


Теперь мой вопрос в том, есть ли другой способ базовой аутентификации из Selenium?

ПРИМЕЧАНИЕ: это не помогло: как обрабатывать заголовки HTTP Basic Auth в Selenium Webdriver с использованием Java?

Переведено автоматически
Ответ 1

Базовая аутентификация по URL заблокирована только для вспомогательных ресурсов. Таким образом, вы все равно можете использовать ее в домене:

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

Вы также могли бы создать небольшое расширение для автоматической установки учетных данных при их запросе:

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

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

Ответ 2

В этом были некоторые обновленияlink, поскольку :


Chromium Issue 435547 Отменена поддержка встроенных учетных данных в запросах дополнительных ресурсов. (удалено)


Мы должны блокировать запросы к вспомогательным ресурсам, которые содержат встроенные учетные данные (например, "http://ima_user:hunter2@example.com/yay.tiff"). Такие ресурсы будут обрабатываться как сетевые ошибки.


Однако функциональность базовой аутентификации по-прежнему работает с Selenium 3.4.0, geckodriver версии 0.18.0, chromedriver версии 2.31.488763, Google Chrome 60.x и Mozilla Firefox 53.0 благодаря привязкам Selenium-Java.

Вот пример кода, который пытается открыть URL http://the-internet.herokuapp.com/basic_auth с действительным набором учетных данных, и это работает.

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:admin@the-internet.herokuapp.com/basic_auth");
}
}

Chrome:

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:admin@the-internet.herokuapp.com/basic_auth");
}
}
Ответ 3

Подход Флорана Б. с вызовом .get по URL дважды сработал для меня с небольшими изменениями. В JS:

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

работает в Google Chrome 62.0.3202.94 с ChromeDriver 2.33.506092, и подход, похоже, совместим с firefox 56.0.2 с geckodriver 0.19.1 и phantomjs 2.1.1, все под управлением Debian linux 9.

Я полагаю, что происходит то, что первый вызов устанавливает заголовок авторизации, отправляемый браузером. Второй вызов удаляет учетные данные из URL, и учетные данные больше не применяются к вспомогательным ресурсам. then синхронизирует два запроса, обеспечивая порядок.

Ответ 4

Новые функции для Chrome и базовая аутентификация через remote-debug: просто для ссылки здесь, чтобы люди, которые застряли, могли найти решение для Chrome и не только: Удаленная отладка Chrome в seleniumgrid

java selenium selenium-webdriver