A autenticação por proxy no Selenium torna-se complexa quando o navegador — e não a página web — solicita um nome de usuário e senha. A solução ideal depende do tipo de proxy, do navegador, da versão do Selenium e da possibilidade de fornecer as credenciais fora do teste. Este guia explica abordagens confiáveis ​​para o Selenium 4, situações em que soluções alternativas mais antigas ainda são válidas e por que o código de tratamento de alertas frequentemente falha.

O que é um proxy?

Um proxy é um intermediário que envia solicitações a sites em nome do seu navegador. O destino vê o endereço IP do proxy em vez da máquina que executa o Selenium. Equipes de teste usam proxies para validar experiências regionais, rotear tráfego por meio de redes controladas, inspecionar solicitações ou distribuir cargas de trabalho automatizadas.

Uma URL de proxy geralmente contém um host e uma porta, como por exemplo: proxy.example.test:8080Serviços privados também podem exigir nome de usuário e senha. O Selenium pode configurar o endpoint do proxy por meio das opções do navegador, mas as solicitações de autenticação são controladas pelo navegador e nem sempre são expostas ao WebDriver como um formulário HTML comum.

Escolha uma rede adequada: Endereços estáticos são convenientes para listas de permissões, enquanto redes rotativas são adequadas para coleta em larga escala. Guia de provedores de proxy residencial Explica as diferenças práticas.

Utilize a automação somente onde você tiver autorização, respeite os termos do site e mantenha as credenciais fora do código-fonte e dos registros de teste.

Diferença entre SOCKS e proxy HTTP

Os proxies HTTP entendem o tráfego da web e geralmente são configurados com valores HTTP e HTTPS separados. Os proxies SOCKS operam em um nível mais baixo e podem transportar diferentes tipos de tráfego TCP sem interpretar o protocolo de aplicação. O SOCKS5, além disso, oferece suporte à autenticação e geralmente é a versão preferida do SOCKS.

CaracterísticaProxy HTTP/HTTPSProxy SOCKS5
TrafficProjetado para solicitações da web do navegadorCompatível com vários aplicativos baseados em TCP
Conhecimento do protocoloEntende requisições e cabeçalhos HTTPEncaminha o tráfego sem ler a semântica HTTP.
Configuração do SeleniumDefina os campos de proxy HTTP e SSLConfigure o endpoint e a versão do SOCKS.
Uso típicoTestes web, filtragem, armazenamento em cache, inspeçãoTunelamento flexível e tráfego não HTTP

O navegador e o provedor de proxy devem suportar o mesmo método. Um endpoint válido não garante que o Selenium consiga preencher automaticamente um diálogo nativo de nome de usuário/senha.

Como lidar com proxy no Selenium WebDriver no Chrome

Para um proxy que não requer autenticação interativa, o Selenium 4 pode atribuir um Proxy objetar a ChromeOptions. O atual Documentação oficial do Selenium browser-options demonstra essa abordagem baseada em capacidades.

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

Para SOCKS5, defina o endpoint e a versão do SOCKS:

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

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

Proxies autenticados exigem planejamento adicional. Incorporar credenciais em uma URL pode ser rejeitado por navegadores modernos e pode expor segredos. Prefira estas abordagens:

  1. Lista de permissões de IP: Autorize o endereço IP público fixo do seu executor de CI ou nó do Selenium Grid para que nenhuma caixa de diálogo do navegador seja exibida.
  2. Portal local: Instale um proxy de encaminhamento confiável na máquina de teste. O Selenium se conecta localmente sem credenciais, e o gateway autentica o servidor upstream.
  3. Extensão de navegador controlada: Crie uma extensão interna do Chrome que configure o proxy e responda aos desafios de autenticação. Carregue-a somente a partir de um artefato de teste protegido.
  4. Configuração em nível de grade: Configure a rede e os segredos no nó do Selenium em vez de distribuir credenciais para cada teste.

Leia as credenciais de um gerenciador de segredos ou de uma configuração de teste específica do ambiente. Nunca as inclua no Git, imprima-as na saída do console ou as inclua em capturas de tela. Após a inicialização, verifique o endereço IP de saída com um endpoint de teste aprovado antes de continuar o conjunto de testes.

Falha comum: ERR_PROXY_CONNECTION_FAILED Normalmente indica que o host, a porta, o protocolo ou o caminho de rede está incorreto. Repetido 407 Proxy Authentication Required As respostas indicam credenciais ausentes ou rejeitadas.

Usando a ferramenta AutoIt

O AutoIt pode automatizar diálogos do Windows localizando uma janela, digitando as credenciais e pressionando um botão. Essa era uma solução alternativa comum para o Selenium, pois o WebDriver não conseguia operar em janelas de autenticação pertencentes ao navegador.

O método é frágil: é exclusivo do Windows, requer uma área de trabalho interativa desbloqueada, depende dos títulos e do tempo das janelas e geralmente falha em contêineres sem interface gráfica ou agentes de CI remotos. Também pode revelar senhas por meio de scripts ou argumentos de processo.

Se um ambiente legado não deixar alternativa, compile o script AutoIt, armazene-o em um local controlado de artefatos de teste, recupere as credenciais com segurança em tempo de execução e aguarde o diálogo exato em vez de usar um tempo de espera fixo. Restrinja essa técnica a um executor isolado do Windows. Para suítes de teste de fácil manutenção, listas de permissão de IP, um gateway ou nós Grid configurados centralmente são opções mais seguras.

Usando Alertas

O Selenium consegue lidar com alertas JavaScript criados pelo código da página web:

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

No entanto, uma caixa de diálogo de autenticação de proxy normalmente aparece na interface do navegador, e não como um alerta em JavaScript. Portanto, driver.switchTo().alert() frequentemente joga NoAlertPresentException mesmo quando uma solicitação de credenciais é visível. A mesma limitação se aplica a muitas caixas de diálogo de autenticação básica HTTP.

Use a API de alertas somente após confirmar que o WebDriver reconhece o prompt. Caso contrário, remova o prompt por meio da configuração de rede ou use uma das abordagens de proxy autenticado descritas acima. Isso é mais estável do que coordenar as teclas pressionadas com uma janela que o Selenium não pode inspecionar.

Perguntas Frequentes

É possível o Selenium configurar um proxy diretamente?

Sim. O Selenium 4 pode passar configurações HTTP, SSL ou SOCKS através das opções e recursos de proxy do navegador. Isso configura o endpoint, mas pode não concluir uma solicitação de autenticação do próprio navegador.

Por que o comando `username:password@host:port` falha no Chrome?

Navegadores modernos podem bloquear credenciais incorporadas em URLs, e a sintaxe pode vazar segredos para registros e histórico. Em vez disso, use listas de permissão de IP, um gateway seguro ou uma infraestrutura de teste controlada.

O Selenium consegue lidar com um login por proxy usando switchTo().alert()?

Geralmente não. A autenticação por proxy costuma ser feita pela interface do navegador, e não por um alerta em JavaScript, então o WebDriver pode informar que não existe nenhum alerta.

A autenticação por proxy funciona no Chrome sem interface gráfica?

Isso pode funcionar quando a autenticação é resolvida sem uma solicitação interativa. Listas de permissão de IP, um gateway local ou configuração em nível de nó são mais adequados para execução sem interface gráfica.

Devo usar o AutoIt para autenticação de proxy do Selenium?

Utilize-o apenas para fluxos de trabalho legados do Windows com restrições. É frágil em CI e menos seguro do que eliminar o diálogo por meio da configuração de rede.

Qual o melhor tipo de proxy para automação de navegador?

Depende da tarefa autorizada. Proxies HTTP são simples para tráfego web, SOCKS5 é flexível e redes residenciais podem ajudar com testes de localização. Compare as opções em nosso guia de tipos de proxy.