Autentifikacija proxyja u Seleniumu postaje teška kada preglednik, a ne web stranica, traži korisničko ime i lozinku. Pravo rješenje ovisi o vrsti proxyja, pregledniku, verziji Selenija i mogu li se vjerodajnice navesti izvan testa. Ovaj vodič objašnjava pouzdane pristupe Seleniuma 4, gdje starija zaobilazna rješenja još uvijek odgovaraju i zašto kod za rukovanje upozorenjima često ne uspijeva.
Što je proxy?
Proxy je posrednik koji šalje zahtjeve web-stranicama u ime vašeg preglednika. Odredište vidi IP adresu proxyja umjesto računala na kojem se izvodi Selenium. Timovi za testiranje koriste proxyje za validaciju regionalnih iskustava, usmjeravanje prometa kroz kontrolirane mreže, pregled zahtjeva ili distribuciju automatiziranih opterećenja.
URL proxyja obično sadrži host i port, kao što je proxy.example.test:8080Privatne usluge mogu također zahtijevati korisničko ime i lozinku. Selenium može konfigurirati proxy krajnju točku putem opcija preglednika, ali upite za autentifikaciju kontrolira preglednik i nisu uvijek izloženi WebDriveru kao običan HTML obrazac.
Koristite automatizaciju samo tamo gdje imate ovlaštenje, poštujte uvjete korištenja web-mjesta i ne dopuštajte vjerodajnice izvornom kodu i zapisnicima testiranja.
Razlika između SOCKS-a i HTTP proxyja
HTTP proxyji razumiju web promet i obično su konfigurirani s odvojenim HTTP i HTTPS vrijednostima. SOCKS proxyji rade na nižoj razini i mogu prenositi različite vrste TCP prometa bez interpretiranja aplikacijskog protokola. SOCKS5 dodatno podržava autentifikaciju i obično je preferirana SOCKS verzija.
| svojstvo | HTTP/HTTPS proxy | SOCKS5 proxy |
|---|---|---|
| Promet | Dizajnirano za web zahtjeve preglednika | Radi s više TCP aplikacija |
| Svijest o protokolu | Razumije HTTP zahtjeve i zaglavlja | Prosljeđuje promet bez čitanja HTTP semantike |
| Postavljanje selena | Postavite polja za HTTP i SSL proxy | Postavite SOCKS krajnju točku i verziju |
| Tipična upotreba | Web testiranje, filtriranje, keširanje, inspekcija | Fleksibilno tuneliranje i promet koji nije HTTP |
Preglednik i proxy davatelj usluga moraju podržavati istu metodu. Važeća krajnja točka ne jamči da Selenium može automatski dovršiti izvorni dijalog za korisničko ime/lozinku.
Kako upravljati proxyjem u Selenium Webdriveru u Chromeu
Za proxy koji ne zahtijeva interaktivnu autentifikaciju, Selenium 4 može dodijeliti Proxy prigovor na ChromeOptions, Struja Službena dokumentacija o opcijama preglednika za Selenium pokazuje ovaj pristup temeljen na sposobnostima.
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");
Za SOCKS5, umjesto toga postavite SOCKS krajnju točku i verziju:
Proxy proxy = new Proxy();
proxy.setSocksProxy("proxy.example.test:1080");
proxy.setSocksVersion(5);
ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);
Autentificirani proxyji zahtijevaju dodatno planiranje. Ugrađivanje vjerodajnica u URL mogu biti odbijeno od strane modernih preglednika i može otkriti tajne. Preferirajte ove pristupe:
- Popis dopuštenih IP adresa: autorizirajte fiksnu javnu IP adresu vašeg CI runnera ili Selenium Grid čvora tako da se ne pojavljuje dijalog preglednika.
- Lokalni pristupnik: Postavite pouzdani proxy za prosljeđivanje na testno računalo. Selenium se povezuje lokalno bez vjerodajnica, a gateway se autentificira uzvodno.
- Kontrolirano proširenje preglednika: Izradite interno Chromeovo proširenje koje konfigurira proxy i odgovara na izazove autentifikacije. Učitajte ga samo iz zaštićenog testnog artefakta.
- Konfiguracija na razini mreže: konfigurirajte umrežavanje i tajne na Selenium čvoru umjesto distribucije vjerodajnica svakom testu.
Čitajte vjerodajnice iz upravitelja tajnih podataka ili konfiguracije testa specifične za okruženje. Nikada ih nemojte prenositi u Git, ispisivati ih u konzolni izlaz ili ih uključivati u snimke zaslona. Nakon pokretanja, provjerite izlaznu IP adresu s odobrenom krajnjom točkom testa prije nego što nastavite s korištenjem paketa.
ERR_PROXY_CONNECTION_FAILED obično označava da je host, port, protokol ili mrežna putanja pogrešan. Ponavlja se 407 Proxy Authentication Required odgovori ukazuju na nedostajuće ili odbijene vjerodajnice.Korištenje alata AutoIt
AutoIt može automatizirati Windows dijaloge lociranjem prozora, upisivanjem vjerodajnica i pritiskom na gumb. Nekad je to bilo uobičajeno Seleniumovo zaobilazno rješenje jer WebDriver nije mogao upravljati prozorima za autentifikaciju u vlasništvu preglednika.
Metoda je krhka: dostupna je samo za Windows, zahtijeva otključanu interaktivnu radnu površinu, ovisi o naslovima i vremenu prozora te obično ne uspijeva u kontejnerima bez zaglavlja ili udaljenim CI agentima. Također može otkriti lozinke putem skripti ili argumenata procesa.
Ako naslijeđeno okruženje ne ostavlja alternativu, kompajlirajte AutoIt skriptu, pohranite je na kontroliranu lokaciju testnih artefakata, sigurno dohvatite vjerodajnice tijekom izvođenja i pričekajte točan dijalog umjesto korištenja fiksnog stanja mirovanja. Ograničite ovu tehniku na izolirani Windows runner. Za održive pakete, popis dopuštenih IP adresa, pristupnik ili centralno konfigurirani Grid čvorovi sigurniji su izbori.
Korištenje upozorenja
Selenium može obraditi JavaScript upozorenja kreirana kodom web stranice:
Alert alert = new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.alertIsPresent());
alert.accept();
Međutim, dijalog za proxy autentifikaciju obično je preglednik Chrome, a ne JavaScript upozorenje. Stoga driver.switchTo().alert() često baca NoAlertPresentException čak i kada je vidljiv upit za vjerodajnice. Isto ograničenje odnosi se na mnoge dijaloške okvire za osnovnu autentifikaciju HTTP-a.
Koristite API za upozorenja tek nakon što potvrdite da WebDriver prepoznaje upit. Ako to ne učini, uklonite upit putem konfiguracije mreže ili upotrijebite jedan od gore opisanih pristupa s autentificiranim proxyjem. Ovo je stabilnije od koordinacije pritisaka tipki s prozorom koji Selenium ne može pregledati.
Pitanja i odgovori
Može li Selenium izravno postaviti proxy?
Da. Selenium 4 može proslijediti HTTP, SSL ili SOCKS postavke putem opcija preglednika i mogućnosti proxyja. Ovo konfigurira krajnju točku, ali možda neće dovršiti upit za autentifikaciju u vlasništvu preglednika.
Zašto korisničko ime:lozinka@host:port ne uspijeva u Chromeu?
Moderni preglednici mogu blokirati vjerodajnice ugrađene u URL-ove, a sintaksa može otkriti tajne u zapisnicima i povijesti. Umjesto toga koristite popis dopuštenih IP adresa, sigurni pristupnik ili kontroliranu testnu infrastrukturu.
Može li Selenium obraditi prijavu putem proxyja pomoću switchTo().alert()?
Obično ne. Proxy autentifikacija je obično korisničko sučelje preglednika, a ne JavaScript upozorenje, pa WebDriver može prijaviti da ne postoji upozorenje.
Radi li proxy autentifikacija u Chromeu bez glave?
Može funkcionirati kada se autentifikacija izvrši bez interaktivnog upita. Popis dopuštenih IP adresa, lokalni pristupnik ili konfiguracija na razini čvora prikladniji su za izvršavanje bez zadavanja podataka.
Trebam li koristiti AutoIt za Selenium proxy autentifikaciju?
Koristite ga samo za ograničeni tijek rada u naslijeđenom sustavu Windows. Krhak je u CI-ju i manje siguran od uklanjanja dijaloga putem mrežne konfiguracije.
Koja je vrsta proxyja najbolja za automatizaciju preglednika?
Ovisi o ovlaštenom zadatku. HTTP proxyji su jednostavni za web promet, SOCKS5 je fleksibilan, a stambene mreže mogu pomoći s testiranjem lokacije. Usporedite opcije u našem vodiču za vrste proxyja.
