Die Proxy-Authentifizierung in Selenium wird schwierig, wenn der Browser – und nicht die Webseite – nach Benutzername und Passwort fragt. Die richtige Lösung hängt vom Proxy-Typ, Browser, der Selenium-Version und davon ab, ob die Anmeldeinformationen außerhalb des Tests bereitgestellt werden können. Dieser Leitfaden erläutert zuverlässige Ansätze für Selenium 4, wo ältere Workarounds noch anwendbar sind und warum Code zur Alarmbehandlung häufig fehlschlägt.

Was ist ein Proxy?

Ein Proxy ist ein Vermittler, der Anfragen im Namen Ihres Browsers an Websites sendet. Das Ziel sieht die IP-Adresse des Proxys anstelle der IP-Adresse des Rechners, auf dem Selenium ausgeführt wird. Testteams verwenden Proxys, um regionale Erfahrungen zu validieren, Datenverkehr über kontrollierte Netzwerke zu leiten, Anfragen zu prüfen oder automatisierte Arbeitslasten zu verteilen.

Eine Proxy-URL enthält üblicherweise einen Host und einen Port, wie zum Beispiel: proxy.example.test:8080Private Dienste erfordern möglicherweise auch einen Benutzernamen und ein Passwort. Selenium kann den Proxy-Endpunkt über Browseroptionen konfigurieren, die Authentifizierungsabfragen werden jedoch vom Browser gesteuert und sind nicht immer wie bei einem normalen HTML-Formular für WebDriver zugänglich.

Wählen Sie ein geeignetes Netzwerk: Statische Adressen eignen sich gut für Whitelisting, während rotierende Netzwerke für die Erfassung großer Datenmengen geeignet sind. Leitfaden für Anbieter von Wohnbevollmächtigungen erklärt die praktischen Unterschiede.

Automatisierung sollte nur dort eingesetzt werden, wo man die entsprechende Autorisierung hat, die Nutzungsbedingungen der Website beachtet und Zugangsdaten aus dem Quellcode und den Testprotokollen fernhält.

Unterschied zwischen SOCKS und HTTP-Proxy

HTTP-Proxys verstehen Webverkehr und werden üblicherweise mit separaten HTTP- und HTTPS-Werten konfiguriert. SOCKS-Proxys arbeiten auf einer niedrigeren Ebene und können verschiedene Arten von TCP-Verkehr übertragen, ohne das Anwendungsprotokoll zu interpretieren. SOCKS5 unterstützt zusätzlich die Authentifizierung und ist in der Regel die bevorzugte SOCKS-Version.

CharakteristischHTTP/HTTPS-ProxySOCKS5-Proxy
TrafficEntwickelt für Browser-WebanfragenFunktioniert mit mehreren TCP-basierten Anwendungen
ProtokollbewusstseinVersteht HTTP-Anfragen und HeaderLeitet den Datenverkehr weiter, ohne die HTTP-Semantik zu lesen.
Selenium-SetupHTTP- und SSL-Proxy-Felder festlegenLegen Sie den SOCKS-Endpunkt und die Version fest.
Typische VerwendungWebtests, Filterung, Caching, InspektionFlexibles Tunneling und Nicht-HTTP-Verkehr

Browser und Proxy-Anbieter müssen dieselbe Methode unterstützen. Ein gültiger Endpunkt garantiert nicht, dass Selenium einen nativen Benutzername/Passwort-Dialog automatisch ausfüllen kann.

Wie man in Selenium Webdriver in Chrome mit Proxys umgeht

Für einen Proxy, der keine interaktive Authentifizierung erfordert, kann Selenium 4 eine zuweisen. Proxy widersprechen ChromeOptions. Die jetzige offizielle Selenium-Browseroptionen-Dokumentation demonstriert diesen fähigkeitsbasierten Ansatz.

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

Für SOCKS5 legen Sie stattdessen den SOCKS-Endpunkt und die Version fest:

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

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

Authentifizierte Proxys erfordern zusätzliche Planung. Das Einbetten von Anmeldeinformationen in eine URL kann von modernen Browsern abgelehnt werden und sensible Daten preisgeben. Folgende Vorgehensweisen sind vorzuziehen:

  1. IP-Zulassungsliste: Autorisieren Sie die feste öffentliche IP-Adresse Ihres CI-Runners oder Selenium Grid-Knotens, damit kein Browserdialog angezeigt wird.
  2. Lokales Gateway: Platzieren Sie einen vertrauenswürdigen Weiterleitungsproxy auf dem Testrechner. Selenium verbindet sich lokal ohne Anmeldeinformationen, und das Gateway authentifiziert sich vorgelagert.
  3. Kontrollierte Browsererweiterung: Erstellen Sie eine interne Chrome-Erweiterung, die den Proxy konfiguriert und Authentifizierungsanfragen beantwortet. Laden Sie diese Erweiterung nur aus einem geschützten Testartefakt.
  4. Konfiguration auf Netzebene: Konfigurieren Sie Netzwerk und Geheimnisse auf dem Selenium-Knoten, anstatt die Anmeldeinformationen an jeden Test zu verteilen.

Lesen Sie die Zugangsdaten aus einem Geheimnismanager oder einer umgebungsspezifischen Testkonfiguration. Speichern Sie diese niemals in Git, geben Sie sie nicht in der Konsole aus und fügen Sie sie nicht in Screenshots ein. Überprüfen Sie nach dem Start die Exit-IP-Adresse mit einem genehmigten Testendpunkt, bevor Sie die Testsuite fortsetzen.

Häufige Fehler: ERR_PROXY_CONNECTION_FAILED Normalerweise deutet dies darauf hin, dass der Host, der Port, das Protokoll oder der Netzwerkpfad falsch ist. Wiederholt 407 Proxy Authentication Required Die Antworten deuten auf fehlende oder abgelehnte Anmeldeinformationen hin.

Verwendung des AutoIt-Tools

AutoIt kann Windows-Dialoge automatisieren, indem es ein Fenster findet, Anmeldeinformationen eingibt und eine Schaltfläche drückt. Früher war dies eine gängige Selenium-Lösung, da WebDriver keine browserseitigen Authentifizierungsfenster bedienen konnte.

Die Methode ist fehleranfällig: Sie funktioniert nur unter Windows, erfordert einen entsperrten interaktiven Desktop, ist von Fenstertiteln und dem Timing abhängig und schlägt üblicherweise in Headless-Containern oder auf entfernten CI-Agenten fehl. Außerdem kann sie Passwörter über Skripte oder Prozessargumente offenlegen.

Wenn eine bestehende Umgebung keine Alternative zulässt, kompilieren Sie das AutoIt-Skript, speichern Sie es an einem kontrollierten Testort, rufen Sie die Anmeldeinformationen sicher zur Laufzeit ab und warten Sie auf den exakten Dialog, anstatt eine feste Wartezeit zu verwenden. Beschränken Sie diese Methode auf einen isolierten Windows-Runner. Für wartungsfreundliche Testumgebungen sind IP-Whitelisting, ein Gateway oder zentral konfigurierte Grid-Knoten sicherere Alternativen.

Verwenden von Warnungen

Selenium kann JavaScript-Warnmeldungen verarbeiten, die vom Webseitencode erzeugt werden:

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

Ein Dialog zur Proxy-Authentifizierung wird jedoch normalerweise vom Browser (Chrome) angezeigt und ist keine JavaScript-Warnung. Daher driver.switchTo().alert() wirft oft NoAlertPresentException selbst wenn eine Anmeldeaufforderung angezeigt wird. Dieselbe Einschränkung gilt für viele HTTP-Basisauthentifizierungsdialoge.

Verwenden Sie die Alert-API erst, nachdem Sie sichergestellt haben, dass WebDriver die Eingabeaufforderung erkennt. Falls dies nicht der Fall ist, entfernen Sie die Eingabeaufforderung über die Netzwerkkonfiguration oder verwenden Sie eine der oben beschriebenen Methoden mit authentifiziertem Proxy. Dies ist stabiler als die Koordination von Tastatureingaben mit einem Fenster, das Selenium nicht untersuchen kann.

Häufig gestellte Fragen

Kann Selenium einen Proxy direkt einrichten?

Ja. Selenium 4 kann HTTP-, SSL- oder SOCKS-Einstellungen über die Browseroptionen und die Proxy-Funktion weiterleiten. Dadurch wird der Endpunkt konfiguriert, eine browserseitige Authentifizierung wird jedoch möglicherweise nicht abgeschlossen.

Warum schlägt die Eingabe von Benutzername:Passwort@Host:Port in Chrome fehl?

Moderne Browser blockieren möglicherweise in URLs eingebettete Anmeldeinformationen, und die Syntax kann Geheimnisse in Protokollen und im Browserverlauf preisgeben. Verwenden Sie stattdessen IP-Whitelisting, ein sicheres Gateway oder eine kontrollierte Testinfrastruktur.

Kann Selenium eine Proxy-Anmeldung mit switchTo().alert() verarbeiten?

Normalerweise nicht. Die Proxy-Authentifizierung erfolgt üblicherweise über die Browser-Benutzeroberfläche und nicht über eine JavaScript-Warnung, daher kann WebDriver melden, dass keine Warnung vorhanden ist.

Funktioniert die Proxy-Authentifizierung im Headless-Modus von Chrome?

Es funktioniert, wenn die Authentifizierung ohne interaktive Eingabeaufforderung erfolgt. Für die Ausführung ohne Benutzeroberfläche eignen sich IP-Whitelisting, ein lokales Gateway oder Konfigurationen auf Knotenebene besser.

Sollte ich AutoIt für die Selenium-Proxy-Authentifizierung verwenden?

Verwenden Sie es nur für eingeschränkte, ältere Windows-Workflows. Es ist in CI-Umgebungen fehleranfällig und weniger sicher als die Vermeidung von Dialogen durch Netzwerkkonfiguration.

Welcher Proxy-Typ eignet sich am besten für die Browserautomatisierung?

Es hängt von der jeweiligen Aufgabe ab. HTTP-Proxys sind unkompliziert für Webverkehr, SOCKS5 ist flexibel, und Heimnetzwerke eignen sich für Standorttests. Vergleichen Sie die verschiedenen Optionen in unserem Leitfaden zu Proxy-Typen.