Ověřování proxy v Seleniumu se stává obtížným, když prohlížeč – nikoli webová stránka – požaduje uživatelské jméno a heslo. Správné řešení závisí na typu proxy, prohlížeči, verzi Seleniumu a na tom, zda lze přihlašovací údaje poskytnout mimo test. Tato příručka vysvětluje spolehlivé přístupy v Seleniumu 4, kde starší řešení stále vyhovují a proč kód pro zpracování upozornění často selhává.

Co je proxy?

Proxy je zprostředkovatel, který odesílá požadavky na webové stránky jménem vašeho prohlížeče. Cíl vidí IP adresu proxy serveru, nikoli počítače, na kterém běží Selenium. Testovací týmy používají proxy servery k ověřování regionálních zkušeností, směrování provozu přes řízené sítě, kontrole požadavků nebo distribuci automatizovaných úloh.

URL adresa proxy obvykle obsahuje hostitele a port, například proxy.example.test:8080Soukromé služby mohou také vyžadovat uživatelské jméno a heslo. Selenium může konfigurovat proxy endpoint pomocí možností prohlížeče, ale ověřovací výzvy jsou řízeny prohlížečem a nejsou vždy zobrazeny WebDriveru jako běžný HTML formulář.

Vyberte vhodnou síť: Statické adresy jsou vhodné pro zařazování na seznam povolených adres, zatímco rotující sítě jsou vhodné pro rozsáhlé sběry. Naše Průvodce poskytovateli proxy pro rezidenční klienty vysvětluje praktické rozdíly.

Automatizaci používejte pouze tam, kde k ní máte oprávnění, respektujte podmínky webu a udržujte přihlašovací údaje mimo zdrojový kód a testovací protokoly.

Rozdíl mezi SOCKS a HTTP Proxy

HTTP proxy servery rozumí webovému provozu a jsou obvykle konfigurovány s oddělenými hodnotami HTTP a HTTPS. SOCKS proxy servery fungují na nižší úrovni a mohou přenášet různé druhy TCP provozu bez interpretace aplikačního protokolu. SOCKS5 navíc podporuje ověřování a je obvykle preferovanou verzí SOCKS.

CharakteristickýProxy HTTP/HTTPSProxy SOCKS5
ProvozNavrženo pro webové požadavky prohlížečeFunguje s více aplikacemi založenými na protokolu TCP
Povědomí o protokoluRozumí HTTP požadavkům a hlavičkámPřeposílá provoz bez čtení sémantiky HTTP
Nastavení SelenuNastavení polí proxy HTTP a SSLNastavení koncového bodu a verze SOCKS
Typické použitíTestování webu, filtrování, ukládání do mezipaměti, inspekceFlexibilní tunelování a provoz bez HTTP protokolu

Prohlížeč a poskytovatel proxy musí podporovat stejnou metodu. Platný koncový bod nezaručuje, že Selenium dokáže automaticky dokončit nativní dialog pro zadání uživatelského jména a hesla.

Jak zvládnout proxy v Selenium Webdriver v Chromu

Pro proxy, která nevyžaduje interaktivní ověřování, může Selenium 4 přiřadit Proxy namítat proti ChromeOptions. Aktuální Oficiální dokumentace k možnostem prohlížeče Selenium demonstruje tento přístup založený na schopnostech.

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");

Pro SOCKS5 nastavte místo toho koncový bod a verzi SOCKS:

Proxy proxy = new Proxy();
proxy.setSocksProxy("proxy.example.test:1080");
proxy.setSocksVersion(5);

ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);

Ověřené proxy servery vyžadují dodatečné plánování. Vložení přihlašovacích údajů do adresy URL může být moderními prohlížeči odmítnuto a může odhalit tajné informace. Preferujte tyto přístupy:

  1. Seznam povolených IP adres: autorizujte pevnou veřejnou IP adresu vašeho CI runneru nebo uzlu Selenium Grid, aby se nezobrazovalo žádné dialogové okno prohlížeče.
  2. Místní brána: Umístěte na testovací počítač důvěryhodný proxy pro přesměrování. Selenium se připojuje lokálně bez přihlašovacích údajů a brána se ověřuje proti proudu.
  3. Řízené rozšíření prohlížeče: Vytvořte interní rozšíření pro Chrome, které konfiguruje proxy a odpovídá na ověřovací výzvy. Načtěte ho pouze z chráněného testovacího artefaktu.
  4. Konfigurace na úrovni mřížky: konfigurovat síť a tajné klíče na uzlu Selenium, místo aby se přihlašovací údaje distribuovaly každému testu.

Čtěte přihlašovací údaje ze správce tajných kódů nebo z testovací konfigurace specifické pro dané prostředí. Nikdy je neposílejte do Gitu, nevypisujte je do konzole ani je nezahrnujte do snímků obrazovky. Po spuštění ověřte výstupní IP adresu se schváleným testovacím endpointem, než budete pokračovat v práci se sadou.

Časté selhání: ERR_PROXY_CONNECTION_FAILED obvykle indikuje, že hostitel, port, protokol nebo síťová cesta je nesprávná. Opakované 407 Proxy Authentication Required Odpovědi označují chybějící nebo odmítnuté přihlašovací údaje.

Použití nástroje AutoIt

AutoIt dokáže automatizovat dialogová okna systému Windows vyhledáním okna, zadáním přihlašovacích údajů a stisknutím tlačítka. Kdysi to bylo běžné řešení pro Selenium, protože WebDriver neuměl ovládat okna ověřování vlastněná prohlížečem.

Metoda je křehká: je určena pouze pro Windows, vyžaduje odemčenou interaktivní plochu, závisí na názvech a načasování oken a obvykle selhává v bezhlavých kontejnerech nebo u vzdálených agentů CI. Může také odhalit hesla prostřednictvím skriptů nebo argumentů procesu.

Pokud starší prostředí neposkytuje žádnou alternativu, zkompilujte skript AutoIt, uložte jej do kontrolovaného umístění testovacích artefaktů, bezpečně načtěte přihlašovací údaje za běhu a počkejte na přesný dialog, místo abyste používali fixní režim spánku. Tuto techniku ​​omezte na izolovaný běžící systém Windows. Pro udržovatelné sady jsou bezpečnější volbou seznam povolených IP adres, brána nebo centrálně konfigurované uzly Grid.

Použití upozornění

Selenium dokáže zpracovat upozornění JavaScript vytvořená kódem webové stránky:

Alert alert = new WebDriverWait(driver, Duration.ofSeconds(10))
    .until(ExpectedConditions.alertIsPresent());
alert.accept();

Dialogové okno pro ověřování proxy serveru se však obvykle nachází v prohlížeči Chrome, nikoli v upozornění JavaScriptu. Proto driver.switchTo().alert() často hází NoAlertPresentException i když je zobrazena výzva k zadání přihlašovacích údajů. Stejné omezení platí pro mnoho dialogových oken pro základní ověřování HTTP.

Rozhraní API pro upozornění použijte až po ověření, že WebDriver rozpozná výzvu. Pokud ne, odeberte výzvu pomocí konfigurace sítě nebo použijte jeden z výše popsaných přístupů s ověřenou proxy. To je stabilnější než koordinace stisků kláves s oknem, které Selenium nedokáže zkontrolovat.

Nejčastější dotazy

Může Selenium nastavit proxy přímo?

Ano. Selenium 4 může předávat nastavení HTTP, SSL nebo SOCKS prostřednictvím možností prohlížeče a funkcí proxy. Tím se nakonfiguruje koncový bod, ale nemusí se dokončit ověřovací výzva vlastněná prohlížečem.

Proč se v Chromu nedaří zobrazit uživatelské jméno: heslo@host:port?

Moderní prohlížeče mohou blokovat přihlašovací údaje vložené do URL adres a syntaxe může prozrazovat tajné informace do protokolů a historie. Použijte místo toho seznam povolených IP adres, zabezpečenou bránu nebo kontrolovanou testovací infrastrukturu.

Dokáže Selenium zpracovat přihlášení přes proxy pomocí switchTo().alert()?

Obvykle ne. Proxy ověřování se obvykle provádí v uživatelském rozhraní prohlížeče, nikoli v upozornění JavaScriptu, takže WebDriver může hlásit, že žádné upozornění neexistuje.

Funguje ověřování proxy serveru v headless Chrome?

Může to fungovat, když je ověřování vyřešeno bez interaktivního zobrazení výzvy. Pro bezhlavé spuštění je vhodnější seznam povolených IP adres, lokální brána nebo konfigurace na úrovni uzlu.

Mám pro ověřování proxy serveru Selenium použít AutoIt?

Používejte jej pouze pro omezené pracovní postupy starších systémů Windows. Je křehký v CI a méně bezpečný než eliminace dialogu prostřednictvím konfigurace sítě.

Který typ proxy je nejlepší pro automatizaci prohlížeče?

Záleží na autorizovaném úkolu. HTTP proxy jsou pro webový provoz přímočaré, SOCKS5 je flexibilní a rezidenční sítě mohou pomoci s testováním polohy. Porovnejte možnosti v našem průvodci typy proxy.