Proxy-authenticatie in Selenium wordt lastig wanneer de browser – en niet de webpagina – om een gebruikersnaam en wachtwoord vraagt. De juiste oplossing hangt af van het type proxy, de browser, de Selenium-versie en of de inloggegevens buiten de test kunnen worden verstrekt. Deze handleiding beschrijft betrouwbare Selenium 4-methoden, waar oudere oplossingen nog steeds werken en waarom code voor het afhandelen van alerts vaak faalt.
Wat is een volmacht?
Een proxy is een tussenpersoon die namens uw browser verzoeken naar websites verzendt. De bestemming ziet het IP-adres van de proxy in plaats van de machine waarop Selenium draait. Testteams gebruiken proxies om regionale ervaringen te valideren, verkeer via gecontroleerde netwerken te routeren, verzoeken te inspecteren of geautomatiseerde taken te verdelen.
Een proxy-URL bevat doorgaans een host en poort, zoals bijvoorbeeld: proxy.example.test:8080Privédiensten vereisen mogelijk ook een gebruikersnaam en wachtwoord. Selenium kan het proxy-eindpunt configureren via browseropties, maar authenticatieprompts worden beheerd door de browser en zijn niet altijd zichtbaar voor WebDriver zoals een gewoon HTML-formulier.
Gebruik automatisering alleen waar je daarvoor toestemming hebt, respecteer de websitevoorwaarden en houd inloggegevens buiten de broncode en testlogboeken.
Verschil tussen SOCKS en HTTP-proxy
HTTP-proxies begrijpen webverkeer en worden doorgaans geconfigureerd met aparte HTTP- en HTTPS-waarden. SOCKS-proxies werken op een lager niveau en kunnen verschillende soorten TCP-verkeer verwerken zonder het applicatieprotocol te interpreteren. SOCKS5 ondersteunt bovendien authenticatie en is meestal de voorkeursversie van SOCKS.
| Kenmerk | HTTP/HTTPS-proxy | SOCKS5 proxy |
|---|---|---|
| Verkeer | Ontworpen voor webverzoeken van browsers | Werkt met meerdere TCP-gebaseerde applicaties. |
| Protocolbewustzijn | Begrijpt HTTP-verzoeken en -headers. | Stuurt verkeer door zonder de HTTP-semantiek te lezen. |
| Selenium-configuratie | Stel de HTTP- en SSL-proxyvelden in. | Stel het SOCKS-eindpunt en de versie in. |
| Typisch gebruik | Webtesten, filteren, caching, inspectie | Flexibele tunneling en niet-HTTP-verkeer |
De browser en de proxyprovider moeten dezelfde methode ondersteunen. Een geldig eindpunt garandeert niet dat Selenium een native gebruikersnaam/wachtwoorddialoogvenster automatisch kan invullen.
Hoe om te gaan met proxy's in Selenium WebDriver in Chrome
Voor een proxy die geen interactieve authenticatie vereist, kan Selenium 4 een proxy toewijzen. Proxy bezwaar maken tegen ChromeOptions. De huidige officiële Selenium-browseropties-documentatie Dit illustreert deze op capaciteiten gebaseerde aanpak.
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");
Voor SOCKS5 moet u in plaats daarvan het SOCKS-eindpunt en de versie instellen:
Proxy proxy = new Proxy();
proxy.setSocksProxy("proxy.example.test:1080");
proxy.setSocksVersion(5);
ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);
Geauthenticeerde proxy's vereisen extra planning. Het opnemen van inloggegevens in een URL kan door moderne browsers worden geweigerd en kan geheimen blootleggen. Geef de voorkeur aan de volgende benaderingen:
- IP-adressen op de whitelist: Autoriseer het vaste openbare IP-adres van uw CI-runner of Selenium Grid-node, zodat er geen dialoogvenster in de browser verschijnt.
- Lokale gateway: Plaats een vertrouwde doorstuurproxy op de testmachine. Selenium maakt lokaal verbinding zonder inloggegevens, waarna de gateway de authenticatie stroomopwaarts uitvoert.
- Gecontroleerde browserextensie: Maak een interne Chrome-extensie die de proxy configureert en authenticatievragen beantwoordt. Laad deze extensie alleen vanuit een beveiligd testartefact.
- Configuratie op rasterniveau: Configureer netwerkinstellingen en geheimen op het Selenium-knooppunt in plaats van inloggegevens aan elke test te verstrekken.
Lees de inloggegevens uit een secret manager of omgevingsspecifieke testconfiguratie. Voeg ze nooit toe aan Git, print ze nooit naar de console-uitvoer en neem ze nooit op in schermafbeeldingen. Controleer na het starten het exit-IP-adres met een goedgekeurd test-eindpunt voordat u de testsuite voortzet.
ERR_PROXY_CONNECTION_FAILED Normaal gesproken geeft dit aan dat de host, poort, protocol of netwerkpad onjuist is. Herhaaldelijk 407 Proxy Authentication Required De antwoorden duiden op ontbrekende of afgewezen inloggegevens.Het AutoIt-programma gebruiken
AutoIt kan Windows-dialoogvensters automatiseren door een venster te lokaliseren, inloggegevens in te voeren en op een knop te drukken. Het was ooit een veelgebruikte oplossing voor Selenium, omdat WebDriver geen browser-eigendomsvensters voor authenticatie kon bedienen.
De methode is kwetsbaar: ze werkt alleen op Windows, vereist een ontgrendeld interactief bureaublad, is afhankelijk van venstertitels en timing, en faalt meestal in headless containers of externe CI-agents. Bovendien kan ze wachtwoorden onthullen via scripts of procesargumenten.
Als een verouderde omgeving geen andere keuze biedt, compileer dan het AutoIt-script, sla het op in een gecontroleerde testomgeving, haal de inloggegevens veilig op tijdens de uitvoering en wacht op het exacte dialoogvenster in plaats van een vaste wachttijd te gebruiken. Beperk deze techniek tot een geïsoleerde Windows-runner. Voor onderhoudbare testomgevingen zijn IP-whitelisting, een gateway of centraal geconfigureerde Grid-nodes veiligere opties.
Waarschuwingen gebruiken
Selenium kan JavaScript-alerts verwerken die door webpagina-code worden gegenereerd:
Alert alert = new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.alertIsPresent());
alert.accept();
Een dialoogvenster voor proxy-authenticatie wordt echter normaal gesproken weergegeven in de browserinterface, niet als een JavaScript-melding. Daarom... driver.switchTo().alert() gooit vaak NoAlertPresentException zelfs wanneer er een prompt voor inloggegevens zichtbaar is. Dezelfde beperking geldt voor veel HTTP basic-auth-dialoogvensters.
Gebruik de alert-API pas nadat u hebt bevestigd dat WebDriver de prompt herkent. Als dit niet het geval is, verwijdert u de prompt via de netwerkconfiguratie of gebruikt u een van de hierboven beschreven methoden met een geauthenticeerde proxy. Dit is stabieler dan het coördineren van toetsaanslagen met een venster dat Selenium niet kan inspecteren.
Veelgestelde vragen
Kan Selenium rechtstreeks een proxy instellen?
Ja. Selenium 4 kan HTTP-, SSL- of SOCKS-instellingen doorgeven via de browseropties en proxyfunctionaliteit. Dit configureert het eindpunt, maar voltooit mogelijk niet de authenticatieprompt van de browser.
Waarom werkt username:password@host:port niet in Chrome?
Moderne browsers blokkeren mogelijk inloggegevens die in URL's zijn ingebed, en de syntaxis kan geheimen in logbestanden en de browsegeschiedenis laten lekken. Gebruik in plaats daarvan IP-whitelisting, een beveiligde gateway of een gecontroleerde testomgeving.
Kan Selenium een proxy-aanmelding afhandelen met switchTo().alert()?
Meestal niet. Proxy-authenticatie gebeurt doorgaans via de gebruikersinterface van de browser in plaats van via een JavaScript-melding, waardoor WebDriver mogelijk meldt dat er geen melding bestaat.
Werkt proxy-authenticatie in headless Chrome?
Het kan werken wanneer de authenticatie zonder interactieve prompt is opgelost. IP-whitelisting, een lokale gateway of configuratie op knooppuntniveau zijn beter geschikt voor uitvoering zonder grafische interface.
Moet ik AutoIt gebruiken voor Selenium proxy-authenticatie?
Gebruik het alleen voor een beperkte, verouderde Windows-workflow. Het is kwetsbaar in CI-omgevingen en minder veilig dan het elimineren van het dialoogvenster via netwerkconfiguratie.
Welk proxytype is het meest geschikt voor browserautomatisering?
Het hangt af van de geautoriseerde taak. HTTP-proxy's zijn eenvoudig voor webverkeer, SOCKS5 is flexibel en residentiële netwerken kunnen helpen bij locatiebepaling. Vergelijk de opties in onze gids over proxytypen.
