L'autenticazione tramite proxy in Selenium diventa complessa quando è il browser, e non la pagina web, a richiedere nome utente e password. La soluzione più adatta dipende dal tipo di proxy, dal browser, dalla versione di Selenium e dalla possibilità di fornire le credenziali al di fuori del test. Questa guida illustra approcci affidabili per Selenium 4, dove le soluzioni alternative più datate sono ancora valide e perché il codice per la gestione degli avvisi spesso non funziona.

Che cos'è un proxy?

Un proxy è un intermediario che invia richieste ai siti web per conto del browser dell'utente. Il sito di destinazione visualizza l'indirizzo IP del proxy anziché quello del computer su cui è in esecuzione Selenium. I team di test utilizzano i proxy per convalidare le esperienze a livello regionale, instradare il traffico attraverso reti controllate, ispezionare le richieste o distribuire carichi di lavoro automatizzati.

Un URL proxy in genere contiene un host e una porta, come ad esempio proxy.example.test:8080I servizi privati ​​potrebbero richiedere anche un nome utente e una password. Selenium può configurare l'endpoint proxy tramite le opzioni del browser, ma le richieste di autenticazione sono gestite dal browser e non sono sempre esposte a WebDriver come un normale modulo HTML.

Scegli una rete adatta: Gli indirizzi statici sono comodi per le liste di autorizzazione, mentre le reti rotanti sono adatte alla raccolta su larga scala. Il nostro Guida ai fornitori di proxy residenziali spiega le differenze pratiche.

Utilizza l'automazione solo dove hai l'autorizzazione, rispetta i termini del sito web e non includere le credenziali nel codice sorgente e nei log di test.

Differenza tra SOCKS e proxy HTTP

I proxy HTTP comprendono il traffico web e sono generalmente configurati con valori HTTP e HTTPS separati. I proxy SOCKS operano a un livello inferiore e possono trasportare diversi tipi di traffico TCP senza interpretare il protocollo applicativo. SOCKS5 supporta inoltre l'autenticazione ed è solitamente la versione SOCKS preferita.

CaratteristicaProxy HTTP/HTTPSProxy SOCKS5
TrafficoProgettato per le richieste web del browserCompatibile con diverse applicazioni basate su TCP.
consapevolezza del protocolloComprende le richieste e le intestazioni HTTPInoltra il traffico senza leggere la semantica HTTP.
Configurazione di SeleniumImposta i campi proxy HTTP e SSLImposta l'endpoint SOCKS e la versione
Utilizzo tipicoTest web, filtraggio, caching, ispezioneTunneling flessibile e traffico non HTTP

Il browser e il provider proxy devono supportare lo stesso metodo. Un endpoint valido non garantisce che Selenium possa completare automaticamente una finestra di dialogo nativa per l'inserimento di nome utente e password.

Come gestire il proxy in Selenium WebDriver in Chrome

Per un proxy che non richiede autenticazione interattiva, Selenium 4 può assegnare un Proxy obiettare a ChromeOptions. L'attuale Documentazione ufficiale di Selenium relativa alle opzioni del browser. dimostra questo approccio basato sulle capacità.

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

Per SOCKS5, impostare invece l'endpoint e la versione SOCKS:

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

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

I proxy autenticati richiedono una pianificazione più accurata. L'inserimento delle credenziali in un URL potrebbe essere rifiutato dai browser moderni e potrebbe esporre dati sensibili. Si consiglia di adottare i seguenti approcci:

  1. Elenco IP consentiti: Autorizza l'indirizzo IP pubblico fisso del tuo runner CI o del nodo Selenium Grid in modo che non venga visualizzata alcuna finestra di dialogo del browser.
  2. Gateway locale: Installa un proxy di inoltro affidabile sulla macchina di test. Selenium si connette localmente senza credenziali e il gateway si autentica a monte.
  3. Estensione del browser controllata: Crea un'estensione interna di Chrome che configuri il proxy e risponda alle richieste di autenticazione. Caricala solo da un artefatto di test protetto.
  4. Configurazione a livello di griglia: Configura la rete e le credenziali sul nodo Selenium anziché distribuirle a ogni singolo test.

Leggere le credenziali da un gestore di segreti o da una configurazione di test specifica per l'ambiente. Non inserirle mai in Git, non stamparle nell'output della console e non includerle negli screenshot. Dopo l'avvio, verificare l'indirizzo IP di uscita con un endpoint di test approvato prima di continuare la suite.

Guasto comune: ERR_PROXY_CONNECTION_FAILED normalmente indica che l'host, la porta, il protocollo o il percorso di rete sono errati. Ripetuto 407 Proxy Authentication Required Le risposte indicano credenziali mancanti o rifiutate.

Utilizzo dello strumento AutoIt

AutoIt è in grado di automatizzare le finestre di dialogo di Windows individuando la finestra, inserendo le credenziali e premendo un pulsante. In passato era una soluzione alternativa comune in Selenium, poiché WebDriver non era in grado di gestire le finestre di autenticazione di proprietà del browser.

Il metodo è fragile: funziona solo su Windows, richiede un desktop interattivo sbloccato, dipende dai titoli delle finestre e dalla tempistica, e di solito fallisce nei container senza interfaccia grafica o negli agenti CI remoti. Può anche rivelare le password tramite script o argomenti di processo.

Se un ambiente legacy non lascia alternative, compilare lo script AutoIt, memorizzarlo in una posizione controllata per gli artefatti di test, recuperare le credenziali in modo sicuro in fase di esecuzione e attendere la finestra di dialogo specifica anziché utilizzare un intervallo di attesa fisso. Limitare questa tecnica a un runner Windows isolato. Per suite gestibili, le soluzioni più sicure sono la whitelist IP, un gateway o nodi Grid configurati centralmente.

Utilizzo degli avvisi

Selenium è in grado di gestire gli avvisi JavaScript creati dal codice della pagina web:

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

Tuttavia, una finestra di dialogo di autenticazione proxy è normalmente Chrome del browser, non un avviso JavaScript. Pertanto, driver.switchTo().alert() spesso lancia NoAlertPresentException anche quando viene visualizzata una richiesta di credenziali. La stessa limitazione si applica a molte finestre di dialogo di autenticazione HTTP di base.

Utilizza l'API di avviso solo dopo aver verificato che WebDriver riconosca il prompt. In caso contrario, rimuovi il prompt tramite la configurazione di rete oppure utilizza uno degli approcci con proxy autenticato descritti in precedenza. Questa soluzione è più stabile rispetto al coordinamento della pressione dei tasti con una finestra che Selenium non è in grado di ispezionare.

DOMANDE FREQUENTI

Selenium può impostare direttamente un proxy?

Sì. Selenium 4 può trasmettere le impostazioni HTTP, SSL o SOCKS attraverso le opzioni e le funzionalità proxy del browser. Questo configura l'endpoint, ma potrebbe non completare la richiesta di autenticazione gestita dal browser.

Perché la formula username:password@host:port non funziona in Chrome?

I browser moderni potrebbero bloccare le credenziali incorporate negli URL e la sintassi potrebbe rivelare informazioni riservate nei log e nella cronologia. In alternativa, è consigliabile utilizzare una lista di indirizzi IP consentiti, un gateway sicuro o un'infrastruttura di test controllata.

Selenium è in grado di gestire un login tramite proxy con switchTo().alert()?

Di solito no. L'autenticazione proxy avviene comunemente tramite l'interfaccia utente del browser anziché tramite un avviso JavaScript, quindi WebDriver potrebbe segnalare che non è presente alcun avviso.

L'autenticazione proxy funziona in Chrome headless?

Può funzionare quando l'autenticazione viene risolta senza una richiesta interattiva. L'utilizzo di liste IP consentite, un gateway locale o una configurazione a livello di nodo sono più adatti all'esecuzione headless.

Dovrei usare AutoIt per l'autenticazione proxy di Selenium?

Utilizzatelo solo per flussi di lavoro Windows legacy con vincoli specifici. È fragile nei sistemi di integrazione continua (CI) e meno sicuro rispetto all'eliminazione della finestra di dialogo tramite la configurazione di rete.

Quale tipo di proxy è il migliore per l'automazione del browser?

Dipende dall'attività autorizzata. I proxy HTTP sono semplici per il traffico web, SOCKS5 è flessibile e le reti residenziali possono essere utili per i test di localizzazione. Confronta le opzioni nella nostra guida ai tipi di proxy.