Proxy-godkendelse i Selenium bliver vanskelig, når browseren – ikke websiden – beder om et brugernavn og en adgangskode. Den rigtige løsning afhænger af proxytypen, browseren, Selenium-versionen og om legitimationsoplysningerne kan angives uden for testen. Denne vejledning forklarer pålidelige Selenium 4-tilgange, hvor ældre løsninger stadig fungerer, og hvorfor kode til håndtering af alarmer ofte fejler.
Hvad er en proxy?
En proxy er en mellemmand, der sender anmodninger til websteder på vegne af din browser. Destinationen ser proxyens IP-adresse i stedet for den maskine, der kører Selenium. Testteams bruger proxyer til at validere regionale oplevelser, dirigere trafik gennem kontrollerede netværk, inspicere anmodninger eller distribuere automatiserede arbejdsbelastninger.
En proxy-URL indeholder normalt en vært og port, f.eks. proxy.example.test:8080Private tjenester kan også kræve et brugernavn og en adgangskode. Selenium kan konfigurere proxy-slutpunktet via browserindstillinger, men godkendelsesprompter styres af browseren og eksponeres ikke altid for WebDriver som en almindelig HTML-formular.
Brug kun automatisering, hvor du har autorisation, respekter webstedets vilkår og hold legitimationsoplysninger ude af kildekode og testlogfiler.
Forskellen mellem SOCKS og HTTP Proxy
HTTP-proxyer forstår webtrafik og er normalt konfigureret med separate HTTP- og HTTPS-værdier. SOCKS-proxyer fungerer på et lavere niveau og kan bære forskellige typer TCP-trafik uden at fortolke applikationsprotokollen. SOCKS5 understøtter desuden godkendelse og er normalt den foretrukne SOCKS-version.
| Karakteristisk | HTTP/HTTPS-proxy | SOCKS5-proxy |
|---|---|---|
| Trafik | Designet til webforespørgsler fra browsere | Fungerer med flere TCP-baserede applikationer |
| Protokolbevidsthed | Forstår HTTP-anmodninger og headere | Videresender trafik uden at læse HTTP-semantik |
| Selenopsætning | Angiv HTTP- og SSL-proxyfelter | Angiv SOCKS-slutpunktet og versionen |
| Typisk brug | Webtestning, filtrering, caching, inspektion | Fleksibel tunnelering og ikke-HTTP-trafik |
Browseren og proxyudbyderen skal understøtte den samme metode. Et gyldigt slutpunkt garanterer ikke, at Selenium automatisk kan udfylde en indbygget brugernavn/adgangskode-dialog.
Sådan håndterer du proxy i Selenium Webdriver i Chrome
For en proxy, der ikke kræver interaktiv godkendelse, kan Selenium 4 tildele en Proxy gøre indsigelse mod ChromeOptions. Den nuværende Officiel dokumentation om Seleniums browserindstillinger demonstrerer denne kapacitetsbaserede tilgang.
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");
For SOCKS5 skal du i stedet indstille SOCKS-slutpunktet og -versionen:
Proxy proxy = new Proxy();
proxy.setSocksProxy("proxy.example.test:1080");
proxy.setSocksVersion(5);
ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);
Godkendte proxyer kræver ekstra planlægning. Integrering af legitimationsoplysninger i en URL kan blive afvist af moderne browsere og kan afsløre hemmeligheder. Foretræk disse tilgange:
- IP-tilladelsesliste: Godkend den faste offentlige IP-adresse for din CI-runner eller Selenium Grid-node, så der ikke vises nogen browserdialog.
- Lokal gateway: Placer en betroet videresendelsesproxy på testmaskinen. Selenium opretter lokal forbindelse uden legitimationsoplysninger, og gatewayen godkender upstream.
- Kontrolleret browserudvidelse: Opret en intern Chrome-udvidelse, der konfigurerer proxyen og besvarer godkendelsesudfordringer. Indlæs den kun fra en beskyttet testartefakt.
- Konfiguration på gitterniveau: konfigurer netværk og hemmeligheder på Selenium-noden i stedet for at distribuere legitimationsoplysninger til hver test.
Læs legitimationsoplysninger fra en hemmelig manager eller miljøspecifik testkonfiguration. Commit dem aldrig til Git, udskriv dem til konsoloutput, og inkluder dem ikke i skærmbilleder. Efter opstart skal du verificere exit-IP'en med et godkendt test-slutpunkt, før du fortsætter pakken.
ERR_PROXY_CONNECTION_FAILED indikerer normalt, at værten, porten, protokollen eller netværksstien er forkert. Gentaget 407 Proxy Authentication Required Svarene angiver manglende eller afviste legitimationsoplysninger.Brug af AutoIt-værktøjet
AutoIt kan automatisere Windows-dialoger ved at finde et vindue, indtaste legitimationsoplysninger og trykke på en knap. Det var engang en almindelig Selenium-løsning, fordi WebDriver ikke kunne betjene browserejede godkendelsesvinduer.
Metoden er skrøbelig: den er kun til Windows, kræver et ulåst interaktivt skrivebord, afhænger af vinduestitler og timing og fejler normalt i headless-containere eller eksterne CI-agenter. Den kan også afsløre adgangskoder via scripts eller procesargumenter.
Hvis et ældre miljø ikke giver noget alternativ, skal du kompilere AutoIt-scriptet, gemme det på en kontrolleret test-artefaktplacering, hente legitimationsoplysninger sikkert under kørsel, og vente på den nøjagtige dialogboks i stedet for at bruge en fast dvaletilstand. Begræns denne teknik til en isoleret Windows-runner. For vedligeholdelsesvenlige suiter er IP-tilladelseslister, en gateway eller centralt konfigurerede Grid-noder sikrere valg.
Brug af alarmer
Selenium kan håndtere JavaScript-advarsler oprettet af websidekode:
Alert alert = new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.alertIsPresent());
alert.accept();
En proxy-godkendelsesdialog er dog normalt en browser-Chrome-dialog, ikke en JavaScript-advarsel. Derfor driver.switchTo().alert() kaster ofte NoAlertPresentException selv når en loginprompt er synlig. Den samme begrænsning gælder for mange HTTP basic-auth-dialoger.
Brug kun alarm-API'en efter at have bekræftet, at WebDriver genkender prompten. Hvis den ikke gør det, skal du fjerne prompten via netværkskonfigurationen eller bruge en af de ovenfor beskrevne autentificerede proxy-metoder. Dette er mere stabilt end at koordinere tastetryk med et vindue, som Selenium ikke kan inspicere.
Ofte Stillede Spørgsmål
Kan Selenium indstille en proxy direkte?
Ja. Selenium 4 kan sende HTTP-, SSL- eller SOCKS-indstillinger via browserens indstillinger og proxyfunktion. Dette konfigurerer endpointen, men fuldfører muligvis ikke en browserejet godkendelsesprompt.
Hvorfor fejler brugernavn:adgangskode@vært:port i Chrome?
Moderne browsere kan blokere legitimationsoplysninger, der er indlejret i URL'er, og syntaksen kan lække hemmeligheder ind i logfiler og historik. Brug i stedet IP-tilladelseslister, en sikker gateway eller kontrolleret testinfrastruktur.
Kan Selenium håndtere et proxy-login med switchTo().alert()?
Normalt ikke. Proxy-godkendelse er typisk browser-brugergrænsefladen snarere end en JavaScript-advarsel, så WebDriver rapporterer muligvis, at der ikke er nogen advarsel.
Fungerer proxy-godkendelse i headless Chrome?
Det kan fungere, når godkendelsen er løst uden en interaktiv prompt. IP-tilladelseslister, en lokal gateway eller konfiguration på nodeniveau er bedre egnet til headless-eksekvering.
Skal jeg bruge AutoIt til Selenium proxy-godkendelse?
Brug den kun til en begrænset ældre Windows-arbejdsgang. Den er skrøbelig i CI og mindre sikker end at fjerne dialogen via netværkskonfiguration.
Hvilken proxytype er bedst til browserautomatisering?
Det afhænger af den autoriserede opgave. HTTP-proxyer er nemme at bruge til webtrafik, SOCKS5 er fleksibel, og private netværk kan hjælpe med placeringstestning. Sammenlign mulighederne i vores guide til proxytyper.
