Proxyautentisering i Selenium blir svårt när webbläsaren – inte webbsidan – ber om användarnamn och lösenord. Rätt lösning beror på proxytyp, webbläsare, Selenium-version och om inloggningsuppgifterna kan tillhandahållas utanför testet. Den här guiden förklarar tillförlitliga Selenium 4-metoder, var äldre lösningar fortfarande fungerar och varför kod för varningshantering ofta misslyckas.
Vad är en proxy?
En proxy är en mellanhand som skickar förfrågningar till webbplatser för din webbläsares räkning. Destinationen ser proxyns IP-adress istället för maskinen som kör Selenium. Testteam använder proxyservrar för att validera regionala upplevelser, dirigera trafik genom kontrollerade nätverk, inspektera förfrågningar eller distribuera automatiserade arbetsbelastningar.
En proxy-URL innehåller vanligtvis en värd och port, till exempel proxy.example.test:8080Privata tjänster kan också kräva ett användarnamn och lösenord. Selenium kan konfigurera proxyslutpunkten via webbläsarinställningar, men autentiseringsfrågor styrs av webbläsaren och exponeras inte alltid för WebDriver som ett vanligt HTML-formulär.
Använd endast automatisering där du har behörighet, respekterar webbplatsens villkor och håller inloggningsuppgifter borta från källkod och testloggar.
Skillnaden mellan SOCKS och HTTP Proxy
HTTP-proxyer förstår webbtrafik och konfigureras vanligtvis med separata HTTP- och HTTPS-värden. SOCKS-proxyer fungerar på en lägre nivå och kan bära olika typer av TCP-trafik utan att tolka applikationsprotokollet. SOCKS5 stöder dessutom autentisering och är vanligtvis den föredragna SOCKS-versionen.
| Karakteristisk | HTTP/HTTPS-proxy | SOCKS5 proxy |
|---|---|---|
| Trafik | Utformad för webbläsarförfrågningar | Fungerar med flera TCP-baserade applikationer |
| Protokollmedvetenhet | Förstår HTTP-förfrågningar och rubriker | Vidarebefordrar trafik utan att läsa HTTP-semantik |
| Seleninställning | Ange HTTP- och SSL-proxyfält | Ange SOCKS-slutpunkten och versionen |
| Typisk användning | Webbtestning, filtrering, cachning, inspektion | Flexibel tunnling och icke-HTTP-trafik |
Webbläsaren och proxyleverantören måste stödja samma metod. En giltig slutpunkt garanterar inte att Selenium kan slutföra en inbyggd användarnamn/lösenordsdialog automatiskt.
Hur man hanterar proxy i Selenium Webdriver i Chrome
För en proxy som inte kräver interaktiv autentisering kan Selenium 4 tilldela en Proxy protestera mot ChromeOptions. Nuvarande officiell dokumentation för Seleniums webbläsarinställningar demonstrerar detta kompetensbaserade tillvägagångssätt.
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, ange SOCKS-slutpunkten och versionen istället:
Proxy proxy = new Proxy();
proxy.setSocksProxy("proxy.example.test:1080");
proxy.setSocksVersion(5);
ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);
Autentiserade proxyservrar kräver extra planering. Att bädda in autentiseringsuppgifter i en URL kan avvisas av moderna webbläsare och kan avslöja hemligheter. Föredra dessa metoder:
- IP-tillåtelselista: auktorisera den fasta publika IP-adressen för din CI-löpare eller Selenium Grid-nod så att ingen webbläsardialogruta visas.
- Lokal gateway: Placera en betrodd vidarebefordringsproxy på testmaskinen. Selenium ansluter lokalt utan inloggningsuppgifter, och gatewayen autentiserar uppströms.
- Kontrollerad webbläsartillägg: skapa ett internt Chrome-tillägg som konfigurerar proxyn och svarar på autentiseringsproblem. Ladda det endast från en skyddad testartefakt.
- Konfiguration på rutnätsnivå: konfigurera nätverk och hemligheter på Selenium-noden istället för att distribuera autentiseringsuppgifter till varje test.
Läs inloggningsuppgifter från en hemlig hanterare eller miljöspecifik testkonfiguration. Kommentera dem aldrig till Git, skriv ut dem till konsolutdata eller inkludera dem i skärmdumpar. Efter uppstart, verifiera avslutnings-IP:n med en godkänd testslutpunkt innan du fortsätter med sviten.
ERR_PROXY_CONNECTION_FAILED indikerar normalt att värden, porten, protokollet eller nätverkssökvägen är felaktig. Upprepad 407 Proxy Authentication Required Svaren indikerar saknade eller avvisade inloggningsuppgifter.Använda AutoIt-verktyget
AutoIt kan automatisera Windows-dialogrutor genom att hitta ett fönster, skriva inloggningsuppgifter och trycka på en knapp. Det var en gång en vanlig Selenium-lösning eftersom WebDriver inte kunde hantera webbläsarägda autentiseringsfönster.
Metoden är ömtålig: den är endast för Windows, kräver ett olåst interaktivt skrivbord, är beroende av fönstertitlar och timing och misslyckas vanligtvis i headless-containrar eller fjärrstyrda CI-agenter. Den kan också avslöja lösenord genom skript eller processargument.
Om en äldre miljö inte lämnar något alternativ, kompilera AutoIt-skriptet, lagra det på en kontrollerad plats för testartefakter, hämta autentiseringsuppgifter säkert vid körning och vänta på den exakta dialogrutan istället för att använda ett fast viloläge. Begränsa denna teknik till en isolerad Windows-körning. För underhållbara sviter är IP-tillåtelselistning, en gateway eller centralt konfigurerade Grid-noder säkrare val.
Använda Alerts
Selenium kan hantera JavaScript-aviseringar som skapats av webbsideskod:
Alert alert = new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.alertIsPresent());
alert.accept();
En proxyautentiseringsdialogruta är dock normalt sett webbläsarens Chrome-kod, inte en JavaScript-varning. Därför driver.switchTo().alert() kastar ofta NoAlertPresentException även när en uppmaning om autentiseringsuppgifter visas. Samma begränsning gäller för många HTTP-dialogrutor för grundläggande autentisering.
Använd endast varnings-API:et efter att ha bekräftat att WebDriver känner igen prompten. Om den inte gör det, ta bort prompten via nätverkskonfigurationen eller använd någon av de autentiserade proxymetoderna som beskrivs ovan. Detta är mer stabilt än att koordinera tangenttryckningar med ett fönster som Selenium inte kan inspektera.
Vanliga frågor
Kan Selenium ställa in en proxy direkt?
Ja. Selenium 4 kan skicka HTTP-, SSL- eller SOCKS-inställningar via webbläsarens alternativ och proxyfunktioner. Detta konfigurerar slutpunkten men kanske inte slutför en webbläsarägd autentiseringsfråga.
Varför misslyckas användarnamn:lösenord@värd:port i Chrome?
Moderna webbläsare kan blockera inloggningsuppgifter som är inbäddade i URL:er, och syntaxen kan läcka hemligheter till loggar och historik. Använd IP-tillåtelselistning, en säker gateway eller kontrollerad testinfrastruktur istället.
Kan Selenium hantera en proxy-inloggning med switchTo().alert()?
Vanligtvis inte. Proxyautentisering är vanligtvis webbläsargränssnitt snarare än en JavaScript-avisering, så WebDriver kan rapportera att ingen avisering finns.
Fungerar proxyautentisering i headless Chrome?
Det kan fungera när autentiseringen är löst utan en interaktiv prompt. IP-tillåtelselistning, en lokal gateway eller nodnivåkonfiguration är bättre lämpade för headless exekvering.
Ska jag använda AutoIt för Selenium-proxyautentisering?
Använd den endast för ett begränsat äldre Windows-arbetsflöde. Den är spröd i CI och mindre säker än att eliminera dialogrutan genom nätverkskonfiguration.
Vilken proxytyp är bäst för webbläsarautomation?
Det beror på den auktoriserade uppgiften. HTTP-proxyservrar är enkla för webbtrafik, SOCKS5 är flexibelt och bostadsnätverk kan hjälpa till med platstestning. Jämför alternativen i vår guide för proxytyper.
