Autentificarea prin proxy în Selenium devine dificilă atunci când browserul - nu pagina web - solicită un nume de utilizator și o parolă. Soluția corectă depinde de tipul de proxy, browser, versiunea Selenium și dacă datele de autentificare pot fi furnizate în afara testului. Acest ghid explică abordările fiabile ale Selenium 4, unde se potrivesc încă soluțiile mai vechi și de ce codul de gestionare a alertelor eșuează adesea.
Ce este un proxy?
Un proxy este un intermediar care trimite cereri către site-uri web în numele browserului dvs. Destinația vede adresa IP a proxy-ului în locul mașinii care rulează Selenium. Echipele de testare folosesc proxy-uri pentru a valida experiențele regionale, a direcționa traficul prin rețele controlate, a inspecta cererile sau a distribui sarcini de lucru automate.
O adresă URL proxy conține de obicei o gazdă și un port, cum ar fi proxy.example.test:8080Serviciile private pot necesita, de asemenea, un nume de utilizator și o parolă. Selenium poate configura endpoint-ul proxy prin opțiunile browserului, dar solicitările de autentificare sunt controlate de browser și nu sunt întotdeauna expuse la WebDriver ca un formular HTML obișnuit.
Folosește automatizarea doar acolo unde ai autorizație, respectă termenii site-ului web și nu include acreditările în codul sursă și în jurnalele de testare.
Diferența dintre SOCKS și HTTP Proxy
Proxy-urile HTTP înțeleg traficul web și sunt de obicei configurate cu valori HTTP și HTTPS separate. Proxy-urile SOCKS funcționează la un nivel inferior și pot transporta diferite tipuri de trafic TCP fără a interpreta protocolul aplicației. SOCKS5 acceptă în plus autentificarea și este de obicei versiunea SOCKS preferată.
| Caracteristică | Proxy HTTP/HTTPS | Proxy SOCKS5 |
|---|---|---|
| Trafic | Conceput pentru solicitări web din browser | Funcționează cu mai multe aplicații bazate pe TCP |
| Conștientizarea protocolului | Înțelege cererile și anteturile HTTP | Redirecționează traficul fără a citi semantica HTTP |
| Configurarea selenului | Setați câmpurile proxy HTTP și SSL | Setați endpoint-ul și versiunea SOCKS |
| Utilizare tipică | Testare web, filtrare, memorare în cache, inspecție | Tunelizare flexibilă și trafic non-HTTP |
Browserul și furnizorul de proxy trebuie să accepte aceeași metodă. Un endpoint valid nu garantează că Selenium poate completa automat un dialog nativ nume de utilizator/parolă.
Cum să gestionați proxy în Selenium Webdriver în Chrome
Pentru un proxy care nu necesită autentificare interactivă, Selenium 4 poate atribui un Proxy obiect la ChromeOptions. Curent documentația oficială a opțiunilor de browser Selenium demonstrează această abordare bazată pe capacități.
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");
Pentru SOCKS5, setați în schimb endpoint-ul și versiunea SOCKS:
Proxy proxy = new Proxy();
proxy.setSocksProxy("proxy.example.test:1080");
proxy.setSocksVersion(5);
ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);
Proxy-urile autentificate necesită o planificare suplimentară. Integrarea acreditărilor într-o adresă URL poate fi respinsă de browserele moderne și poate expune secrete. Preferați aceste abordări:
- Adresarea IP-urilor permise: autorizați adresa IP publică fixă a runner-ului CI sau a nodului Selenium Grid, astfel încât să nu apară nicio casetă de dialog în browser.
- Gateway local: Plasați un proxy de redirecționare de încredere pe mașina de testare. Selenium se conectează local fără acreditări, iar gateway-ul se autentifică în amonte.
- Extensie de browser controlată: Creați o extensie Chrome internă care configurează proxy-ul și răspunde la provocările de autentificare. Încărcați-o doar dintr-un artefact de testare protejat.
- Configurație la nivel de grilă: configurați rețeaua și secretele pe nodul Selenium în loc să distribuiți acreditări fiecărui test.
Citiți acreditările dintr-un manager de secrete sau dintr-o configurație de testare specifică mediului. Nu le trimiteți niciodată către Git, nu le afișați în ieșirea consolei și nu le includeți în capturi de ecran. După lansare, verificați adresa IP de ieșire cu un endpoint de testare aprobat înainte de a continua suita.
ERR_PROXY_CONNECTION_FAILED indică în mod normal că gazda, portul, protocolul sau calea de rețea sunt greșite. Repetat 407 Proxy Authentication Required răspunsurile indică acreditări lipsă sau respinse.Utilizarea instrumentului AutoIt
AutoIt poate automatiza dialogurile Windows prin localizarea unei ferestre, tastarea credențialelor și apăsarea unui buton. A fost odată o soluție alternativă comună pentru Selenium, deoarece WebDriver nu putea opera ferestre de autentificare deținute de browser.
Metoda este fragilă: este disponibilă doar pentru Windows, necesită un desktop interactiv deblocat, depinde de titlurile și sincronizarea ferestrelor și, de obicei, eșuează în containere headless sau agenți CI la distanță. De asemenea, poate dezvălui parole prin scripturi sau argumente de proces.
Dacă un mediu moștenit nu lasă nicio alternativă, compilați scriptul AutoIt, stocați-l într-o locație controlată pentru artefactele de testare, recuperați acreditările în siguranță la momentul execuției și așteptați dialogul exact, în loc să utilizați o stare fixă de repaus. Restricționați această tehnică la un runner Windows izolat. Pentru suite ușor de întreținut, includerea pe listele de adrese IP permise, un gateway sau nodurile Grid configurate central sunt opțiuni mai sigure.
Utilizarea alertelor
Selenium poate gestiona alerte JavaScript create de codul paginii web:
Alert alert = new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.alertIsPresent());
alert.accept();
Totuși, o casetă de dialog de autentificare proxy este în mod normal un browser Chrome, nu o alertă JavaScript. Prin urmare, driver.switchTo().alert() aruncă adesea NoAlertPresentException chiar și atunci când este vizibilă o solicitare de acreditare. Aceeași limitare se aplică multor dialoguri de autentificare de bază HTTP.
Folosește API-ul de alertă numai după ce confirmi că WebDriver recunoaște solicitarea. Dacă nu o face, elimină solicitarea prin configurarea rețelei sau folosește una dintre abordările de tip proxy autentificat descrise mai sus. Aceasta este mai stabilă decât coordonarea apăsărilor de taste cu o fereastră pe care Selenium nu o poate inspecta.
Întrebări frecvente
Poate Selenium să seteze direct un proxy?
Da. Selenium 4 poate transmite setări HTTP, SSL sau SOCKS prin opțiunile browserului și prin funcționalitatea proxy. Aceasta configurează endpoint-ul, dar este posibil să nu finalizeze o solicitare de autentificare deținută de browser.
De ce eșuează username:password@host:port în Chrome?
Browserele moderne pot bloca acreditările încorporate în adresele URL, iar sintaxa poate divulga secrete în jurnale și istoric. Folosiți în schimb listele de adrese IP permise, un gateway securizat sau o infrastructură de testare controlată.
Poate Selenium să gestioneze o autentificare proxy cu switchTo().alert()?
De obicei nu. Autentificarea proxy este de obicei în interfața browserului și nu într-o alertă JavaScript, așa că WebDriver poate raporta că nu există nicio alertă.
Funcționează autentificarea proxy în Chrome fără cap?
Poate funcționa atunci când autentificarea este rezolvată fără o solicitare interactivă. Includerea pe lista de adrese IP permise, un gateway local sau configurația la nivel de nod sunt mai potrivite pentru execuția headless.
Ar trebui să utilizez AutoIt pentru autentificarea proxy cu Selenium?
Folosește-l doar pentru un flux de lucru Windows vechi constrâns. Este fragil în CI și mai puțin sigur decât eliminarea dialogului prin configurarea rețelei.
Ce tip de proxy este cel mai potrivit pentru automatizarea browserului?
Depinde de sarcina autorizată. Proxy-urile HTTP sunt simple pentru traficul web, SOCKS5 este flexibil, iar rețelele rezidențiale pot ajuta la testarea locației. Comparați opțiunile din ghidul nostru privind tipurile de proxy.
