A Seleniumban a proxy hitelesítés nehézzé válik, amikor a böngésző – és nem a weboldal – kér felhasználónevet és jelszót. A helyes megoldás a proxy típusától, a böngészőtől, a Selenium verziójától és attól függ, hogy a hitelesítő adatok megadhatók-e a teszten kívül. Ez az útmutató bemutatja a megbízható Selenium 4 megközelítéseket, azokat a régebbi kerülő megoldásokat, amelyek továbbra is működnek, és azt, hogy miért hibásodik gyakran a riasztáskezelő kód.
Mi az a proxy?
A proxy egy közvetítő, amely a böngésződ nevében küld kéréseket webhelyeknek. A cél a proxy IP-címét látja a Seleniumot futtató gép helyett. A tesztelőcsapatok proxykat használnak a regionális tapasztalatok érvényesítésére, a forgalom irányítására ellenőrzött hálózatokon keresztül, a kérések vizsgálatára vagy az automatizált munkaterhelések elosztására.
Egy proxy URL általában tartalmaz egy hosztot és egy portot, például proxy.example.test:8080A privát szolgáltatásokhoz felhasználónév és jelszó is szükséges lehet. A Selenium a böngésző beállításain keresztül konfigurálhatja a proxy végpontot, de a hitelesítési kérdéseket a böngésző vezérli, és nem mindig jelennek meg a WebDriver számára, mint egy hagyományos HTML űrlap.
Csak ott használj automatizálást, ahol erre jogosult vagy, tartsd tiszteletben a weboldal feltételeit, és tartsd távol a hitelesítő adatokat a forráskódtól és a tesztnaplóktól.
A SOCKS és a HTTP Proxy közötti különbség
A HTTP proxyk megértik a webforgalmat, és általában külön HTTP és HTTPS értékekkel vannak konfigurálva. A SOCKS proxyk alacsonyabb szinten működnek, és különböző típusú TCP forgalmat tudnak továbbítani az alkalmazásprotokoll értelmezése nélkül. A SOCKS5 emellett támogatja a hitelesítést, és általában ez az előnyben részesített SOCKS verzió.
| Jellegzetes | HTTP/HTTPS proxy | SOCKS5 proxy |
|---|---|---|
| Forgalom | Böngésző webes kérésekhez tervezve | Több TCP-alapú alkalmazással működik |
| Protokolltudatosság | Érti a HTTP kéréseket és fejléceket | Forgalom továbbítása HTTP szemantika olvasása nélkül |
| Szelén beállítás | HTTP és SSL proxy mezők beállítása | Állítsa be a SOCKS végpontot és verzióját |
| Tipikus felhasználás | Webtesztelés, szűrés, gyorsítótárazás, ellenőrzés | Rugalmas alagútkezelés és nem HTTP forgalom |
A böngészőnek és a proxy szolgáltatónak ugyanazt a metódust kell támogatnia. Egy érvényes végpont nem garantálja, hogy a Selenium automatikusan ki tudja tölteni a natív felhasználónév/jelszó párbeszédpanelt.
Hogyan kezeljük a proxyt a Selenium Webdriverben a Chrome-ban?
Interaktív hitelesítést nem igénylő proxy esetén a Selenium 4 hozzárendelhet egy Proxy kifogásol ChromeOptions. A jelenlegi hivatalos Selenium böngészőbeállítási dokumentáció ezt a képességalapú megközelítést mutatja be.
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");
SOCKS5 esetén ehelyett a SOCKS végpontot és verziót kell beállítani:
Proxy proxy = new Proxy();
proxy.setSocksProxy("proxy.example.test:1080");
proxy.setSocksVersion(5);
ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);
A hitelesített proxyk használata külön tervezést igényel. A hitelesítő adatok URL-címbe ágyazását a modern böngészők elutasíthatják, és ez titkos információkat is felfedhet. A következő megközelítéseket részesítse előnyben:
- IP-engedélyezési lista: Engedélyezd a CI runner vagy a Selenium Grid csomópont fix nyilvános IP-címét, hogy ne jelenjen meg böngésző párbeszédpanel.
- Helyi átjáró: Helyezzen el egy megbízható továbbító proxyt a tesztgépen. A Selenium helyben, hitelesítő adatok nélkül csatlakozik, és az átjáró upstream módon hitelesíti magát.
- Vezérelt böngészőbővítmény: hozz létre egy belső Chrome-bővítményt, amely konfigurálja a proxyt és megválaszolja a hitelesítési kihívásokat. Csak védett tesztösszetevőből töltsd be.
- Rácsszintű konfiguráció: A hálózatépítést és a titkos kódokat a Selenium csomóponton kell konfigurálni ahelyett, hogy minden teszthez kiosztanánk a hitelesítő adatokat.
Olvasd be a hitelesítő adatokat egy titkos kezelőből vagy környezetspecifikus tesztkonfigurációból. Soha ne véglegesítsd őket Gitbe, ne nyomtasd ki őket konzolkimenetre, és ne szerepeljenek képernyőképeken. Indítás után ellenőrizd a kilépési IP-címet egy jóváhagyott tesztvégponttal, mielőtt folytatnád a csomag használatát.
ERR_PROXY_CONNECTION_FAILED általában azt jelzi, hogy a gazdagép, a port, a protokoll vagy a hálózati elérési út hibás. Ismétlődő 407 Proxy Authentication Required A válaszok hiányzó vagy elutasított hitelesítő adatokat jeleznek.Az AutoIt eszköz használata
Az AutoIt képes automatizálni a Windows párbeszédablakokat egy ablak megkeresésével, hitelesítő adatok beírásával és egy gomb megnyomásával. Ez egykor egy gyakori Selenium megoldás volt, mivel a WebDriver nem tudta működtetni a böngésző által birtokolt hitelesítési ablakokat.
A módszer törékeny: csak Windows rendszeren fut, feloldott interaktív asztalt igényel, az ablakcímektől és az időzítéstől függ, és általában hibát jelez headless konténerekben vagy távoli CI-ügynökökben. Szkripteken vagy folyamatargumentumokon keresztül jelszavakat is felfedhet.
Ha egy régi környezet nem hagy más alternatívát, fordítsd le az AutoIt szkriptet, tárold egy ellenőrzött teszt-összetevő helyen, futásidőben biztonságosan kérd le a hitelesítő adatokat, és várd meg a pontos párbeszédablakot a fix alvó üzemmód használata helyett. Korlátozd ezt a technikát egy elszigetelt Windows futtatófelületre. Karbantartható csomagok esetén az IP-engedélyezési lista, egy átjáró vagy a központilag konfigurált Grid csomópontok biztonságosabb választásnak bizonyulnak.
Figyelmeztetések használata
A Selenium képes kezelni a weboldal kódja által létrehozott JavaScript riasztásokat:
Alert alert = new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.alertIsPresent());
alert.accept();
A proxy hitelesítési párbeszédpanel azonban általában egy böngésző Chrome-ja, nem pedig egy JavaScript-riasztás. Ezért driver.switchTo().alert() gyakran dob NoAlertPresentException még akkor is, ha látható a hitelesítő adatok megadására szolgáló ablak. Ugyanez a korlátozás vonatkozik számos HTTP alaphitelesítési párbeszédpanelre.
Csak azután használd a riasztási API-t, miután meggyőződtél arról, hogy a WebDriver felismeri a promptot. Ha nem, akkor távolítsd el a promptot a hálózati konfiguráción keresztül, vagy használd a fent leírt hitelesített proxy megközelítések egyikét. Ez stabilabb, mint a billentyűleütések összehangolása egy olyan ablakkal, amelyet a Selenium nem tud megvizsgálni.
GYIK
Beállíthat a Selenium közvetlenül egy proxyt?
Igen. A Selenium 4 képes HTTP, SSL vagy SOCKS beállításokat átadni a böngésző beállításain és proxy képességein keresztül. Ez konfigurálja a végpontot, de előfordulhat, hogy nem hajt végre böngésző általi hitelesítési kérést.
Miért nem működik a felhasználónév:jelszó@host:port a Chrome-ban?
A modern böngészők blokkolhatják az URL-ekbe ágyazott hitelesítő adatokat, és a szintaxis titkos adatokat szivárogtathat ki a naplókba és az előzményekbe. Használjon helyette IP-engedélyezési listát, biztonságos átjárót vagy ellenőrzött tesztelési infrastruktúrát.
Tudja a Selenium kezelni egy proxy bejelentkezést a switchTo().alert() függvénnyel?
Általában nem. A proxy hitelesítés általában böngésző felhasználói felületén történik, nem pedig JavaScript riasztáson, így a WebDriver azt jelentheti, hogy nincs riasztás.
Működik a proxy hitelesítés a headless Chrome-ban?
Működhet, ha a hitelesítés interaktív prompt nélkül történik. Az IP-engedélyezési lista, a helyi átjáró vagy a csomópont-szintű konfiguráció jobban megfelel a fej nélküli végrehajtáshoz.
Használjam az AutoIt-et a Selenium proxy hitelesítéshez?
Csak korlátozott, régi Windows munkafolyamatokhoz használd. CI-ben törékeny, és kevésbé biztonságos, mint a párbeszédpanel hálózati konfiguráción keresztüli kiküszöbölése.
Melyik proxy típus a legjobb a böngésző automatizálásához?
A jogosult feladattól függ. A HTTP proxyk egyszerűek a webforgalomhoz, a SOCKS5 rugalmas, a lakossági hálózatok pedig segíthetnek a helymeghatározás tesztelésében. Hasonlítsa össze a lehetőségeket a proxy típusok útmutatónkban.
