Uwierzytelnianie proxy w Selenium staje się trudne, gdy przeglądarka – a nie strona internetowa – prosi o nazwę użytkownika i hasło. Właściwe rozwiązanie zależy od typu proxy, przeglądarki, wersji Selenium oraz od tego, czy dane uwierzytelniające można podać poza testem. W tym przewodniku wyjaśniono niezawodne podejścia Selenium 4, gdzie nadal sprawdzają się starsze obejścia, oraz dlaczego kod obsługi alertów często zawodzi.

Co to jest pełnomocnik?

Serwer proxy to pośrednik, który wysyła żądania do stron internetowych w imieniu przeglądarki. Miejsce docelowe widzi adres IP serwera proxy zamiast komputera, na którym działa Selenium. Zespoły testujące używają serwerów proxy do walidacji regionalnych doświadczeń, kierowania ruchem przez kontrolowane sieci, inspekcji żądań lub dystrybucji zautomatyzowanych obciążeń.

Adres URL serwera proxy zazwyczaj zawiera hosta i port, np. proxy.example.test:8080Usługi prywatne mogą również wymagać nazwy użytkownika i hasła. Selenium może skonfigurować punkt końcowy proxy za pomocą opcji przeglądarki, ale monity uwierzytelniające są kontrolowane przez przeglądarkę i nie zawsze są widoczne dla WebDriver, jak w przypadku zwykłego formularza HTML.

Wybierz odpowiednią sieć: Statyczne adresy są wygodne do umieszczania na liście dozwolonych, natomiast sieci rotacyjne umożliwiają gromadzenie danych na dużą skalę. przewodnik po dostawcach serwerów proxy mieszkaniowych wyjaśnia różnice praktyczne.

Używaj automatyzacji tylko wtedy, gdy masz do tego upoważnienie, przestrzegaj warunków witryny i nie udostępniaj danych uwierzytelniających w kodzie źródłowym ani w dziennikach testów.

Różnica między SOCKS a serwerem proxy HTTP

Serwery proxy HTTP rozpoznają ruch sieciowy i są zazwyczaj konfigurowane z oddzielnymi wartościami HTTP i HTTPS. Serwery proxy SOCKS działają na niższym poziomie i mogą obsługiwać różne rodzaje ruchu TCP bez interpretowania protokołu aplikacji. SOCKS5 dodatkowo obsługuje uwierzytelnianie i jest zazwyczaj preferowaną wersją protokołu SOCKS.

CharakterystykaSerwer proxy HTTP/HTTPSSerwer proxy SOCKS5
RuchZaprojektowany dla żądań przeglądarek internetowychWspółpracuje z wieloma aplikacjami opartymi na protokole TCP
Świadomość protokołuRozumie żądania i nagłówki HTTPPrzekazuje ruch bez odczytywania semantyki HTTP
Konfiguracja SeleniumUstaw pola proxy HTTP i SSLUstaw punkt końcowy i wersję SOCKS
Typowe zastosowanieTestowanie stron internetowych, filtrowanie, buforowanie, inspekcjaElastyczne tunelowanie i ruch inny niż HTTP

Przeglądarka i dostawca proxy muszą obsługiwać tę samą metodę. Prawidłowy punkt końcowy nie gwarantuje, że Selenium automatycznie ukończy natywne okno dialogowe z nazwą użytkownika i hasłem.

Jak obsługiwać serwer proxy w Selenium Webdriver w Chrome

W przypadku serwera proxy, który nie wymaga uwierzytelniania interaktywnego, Selenium 4 może przypisać Proxy oponować ChromeOptions. Obecny oficjalna dokumentacja opcji przeglądarki Selenium demonstruje podejście oparte na zdolnościach.

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

Proxy proxy = new Proxy();
proxy.setHttpProxy("proxy.example.test:8080");
proxy.setSslProxy("proxy.example.test:8080");

ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);

WebDriver driver = new ChromeDriver(options);
driver.get("https://example.com");

W przypadku SOCKS5 należy zamiast tego ustawić punkt końcowy i wersję SOCKS:

Proxy proxy = new Proxy();
proxy.setSocksProxy("proxy.example.test:1080");
proxy.setSocksVersion(5);

ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);

Uwierzytelnione serwery proxy wymagają dodatkowego planowania. Osadzanie danych uwierzytelniających w adresie URL może zostać odrzucone przez nowoczesne przeglądarki i ujawnić poufne dane. Preferuj następujące podejścia:

  1. Lista dozwolonych adresów IP: autoryzuj stały publiczny adres IP swojego modułu CI lub węzła Selenium Grid, aby nie pojawiało się okno dialogowe przeglądarki.
  2. Brama lokalna: Umieść zaufany serwer proxy przekierowujący na komputerze testowym. Selenium łączy się lokalnie bez uwierzytelniania, a brama uwierzytelnia się w górę strumienia.
  3. Kontrolowane rozszerzenie przeglądarki: Utwórz wewnętrzne rozszerzenie Chrome, które konfiguruje serwer proxy i odpowiada na pytania dotyczące uwierzytelniania. Wczytaj je tylko z chronionego artefaktu testowego.
  4. Konfiguracja na poziomie siatki: skonfiguruj sieć i sekrety na węźle Selenium zamiast rozsyłać dane uwierzytelniające do każdego testu.

Odczytaj dane uwierzytelniające z menedżera sekretów lub konfiguracji testowej specyficznej dla środowiska. Nigdy nie zatwierdzaj ich w Git, nie zapisuj w konsoli ani nie umieszczaj na zrzutach ekranu. Po uruchomieniu zweryfikuj adres IP wyjścia z zatwierdzonym punktem końcowym testu, zanim przejdziesz dalej.

Częsta awaria: ERR_PROXY_CONNECTION_FAILED zwykle oznacza, że ​​host, port, protokół lub ścieżka sieciowa są nieprawidłowe. Powtarzające się 407 Proxy Authentication Required odpowiedzi wskazują na brakujące lub odrzucone dane uwierzytelniające.

Korzystanie z narzędzia AutoIt

AutoIt może automatyzować okna dialogowe systemu Windows poprzez zlokalizowanie okna, wpisanie danych uwierzytelniających i naciśnięcie przycisku. Kiedyś było to powszechne obejście problemu w Selenium, ponieważ WebDriver nie mógł obsługiwać okien uwierzytelniania należących do przeglądarki.

Ta metoda jest krucha: działa tylko w systemie Windows, wymaga odblokowanego interaktywnego pulpitu, zależy od tytułów okien i czasu ich działania oraz zazwyczaj zawodzi w kontenerach bez interfejsu użytkownika lub zdalnych agentach CI. Może również ujawniać hasła za pomocą skryptów lub argumentów procesów.

Jeśli starsze środowisko nie pozostawia alternatywy, skompiluj skrypt AutoIt, zapisz go w kontrolowanej lokalizacji artefaktów testowych, bezpiecznie pobierz dane uwierzytelniające w czasie wykonywania i poczekaj na odpowiedni dialog, zamiast korzystać ze stałego trybu uśpienia. Ogranicz tę technikę do odizolowanego serwera Windows. W przypadku łatwych w utrzymaniu pakietów, bezpieczniejszymi opcjami są lista dozwolonych adresów IP, brama lub centralnie skonfigurowane węzły Grid.

Korzystanie z alertów

Selenium może obsługiwać alerty JavaScript tworzone przez kod strony internetowej:

Alert alert = new WebDriverWait(driver, Duration.ofSeconds(10))
    .until(ExpectedConditions.alertIsPresent());
alert.accept();

Jednak okno dialogowe uwierzytelniania serwera proxy jest zazwyczaj wyświetlane w przeglądarce Chrome, a nie w alercie JavaScript. Dlatego driver.switchTo().alert() często rzuca NoAlertPresentException nawet gdy widoczny jest monit o podanie danych uwierzytelniających. To samo ograniczenie dotyczy wielu okien dialogowych uwierzytelniania podstawowego HTTP.

Użyj interfejsu API alertów dopiero po potwierdzeniu, że WebDriver rozpoznaje monit. Jeśli nie, usuń monit poprzez konfigurację sieci lub skorzystaj z jednej z metod uwierzytelniania proxy opisanych powyżej. Jest to bardziej stabilne niż koordynowanie naciśnięć klawiszy z oknem, którego Selenium nie może sprawdzić.

FAQ

Czy Selenium może bezpośrednio ustawić serwer proxy?

Tak. Selenium 4 może przekazywać ustawienia HTTP, SSL lub SOCKS przez opcje przeglądarki i funkcję proxy. To konfiguruje punkt końcowy, ale może nie zakończyć monitu uwierzytelnienia w przeglądarce.

Dlaczego w Chrome nie działa polecenie username:password@host:port?

Nowoczesne przeglądarki mogą blokować dane uwierzytelniające osadzone w adresach URL, a ich składnia może powodować wyciek poufnych informacji do logów i historii. Zamiast tego należy korzystać z listy dozwolonych adresów IP, bezpiecznej bramy lub kontrolowanej infrastruktury testowej.

Czy Selenium poradzi sobie z logowaniem proxy za pomocą switchTo().alert()?

Zazwyczaj nie. Uwierzytelnianie proxy odbywa się zazwyczaj za pośrednictwem interfejsu użytkownika przeglądarki, a nie alertu JavaScript, dlatego WebDriver może zgłaszać brak alertu.

Czy uwierzytelnianie proxy działa w przeglądarce Chrome bez interfejsu graficznego?

Może działać, gdy uwierzytelnianie jest rozwiązywane bez interaktywnego monitu. Lista dozwolonych adresów IP, lokalna brama lub konfiguracja na poziomie węzła lepiej sprawdzają się w przypadku wykonywania bezgłowego.

Czy powinienem używać AutoIt do uwierzytelniania proxy Selenium?

Używaj go tylko w przypadku ograniczonego przepływu pracy w starszym systemie Windows. Jest on kruchy w CI i mniej bezpieczny niż eliminacja dialogu poprzez konfigurację sieci.

Który typ serwera proxy jest najlepszy do automatyzacji przeglądarki?

Zależy to od autoryzowanego zadania. Serwery proxy HTTP są proste w obsłudze ruchu internetowego, SOCKS5 jest elastyczny, a sieci domowe mogą pomóc w testowaniu lokalizacji. Porównaj opcje w naszym przewodniku po typach serwerów proxy.