Proxy autenticado no Playwright e no Selenium: o detalhe que trava
Publicado em · por GTI Proxy
Num dos dois, credencial de proxy é um parâmetro. No outro, é um problema conhecido que trava a primeira navegação num diálogo que o seu código não consegue fechar. Vale saber qual é qual antes de escolher a ferramenta.
Playwright: é um parâmetro
No Playwright, proxy com usuário e senha é configuração declarada. A documentação oficial descreve um dicionário proxy com as chaves server, username e password, passado no launch:
# Playwright Python — proxy com autenticacao, no launch
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
navegador = p.chromium.launch(proxy={
"server": "http://srv.gtiproxy.com:PORTA_HTTP",
"username": "USUARIO",
"password": "SENHA",
})
pagina = navegador.new_page()
pagina.goto("https://ifconfig.me")
print(pagina.inner_text("body"))
navegador.close()
Três detalhes que economizam tempo: a credencial vai em chaves separadas, não embutida na URL do server. O Playwright também aceita proxy por contexto, em new_context, o que permite endereços diferentes na mesma execução — mas o exemplo oficial dessa forma mostra só o server, então confirme na sua versão se as credenciais são aceitas ali. E a documentação diz que o proxy pode ser HTTP(S) ou SOCKSv5, sem afirmar que a autenticação funciona em SOCKSv5 — teste antes de depender disso.
Selenium com Chrome: o --proxy-server ignora a credencial
Aqui está o problema que faz muita gente perder uma tarde. O Selenium não tem suporte nativo a autenticação de proxy, e a flag do Chrome não lê credenciais:
# isto NAO funciona: a credencial na URL e ignorada
opcoes.add_argument("--proxy-server=http://USUARIO:[email protected]:PORTA")
O que acontece é que a primeira navegação para num 407 Proxy Authentication Required, com um diálogo nativo do navegador que o Selenium não consegue fechar — ele não é um elemento da página. O script fica pendurado até o timeout.
Existem três saídas, e cada uma tem um porém:
Extensão gerada em tempo de execução. É a abordagem mais comum: o script monta uma pequena extensão que injeta a credencial e a carrega no Chrome. Em Manifest V3 exige Chrome 105 ou superior, e há um detalhe cruel — o service worker da extensão pode ser suspenso quando ocioso, e aí o diálogo nativo volta a aparecer no meio da execução.
Selenium Wire. Aceita a credencial diretamente e cuida da autenticação. É a saída mais simples, com o custo de uma dependência a mais.
Trocar de ferramenta. O Playwright resolve isso por desenho, como no exemplo acima.
Sobre headless, as fontes se contradizem. Encontramos material afirmando que a abordagem de extensão não funciona com --headless=new, e outro listando justamente o contrário. Não confirmamos nenhum dos dois, então trate como ponto a testar na sua versão do Chrome em vez de fato assentado.
O teste que você deve fazer primeiro
Antes de culpar a biblioteca, confirme que a credencial funciona fora dela. Dois comandos separam problema de proxy de problema de código:
# HTTP
curl -x http://USUARIO:[email protected]:PORTA_HTTP https://ifconfig.me
# SOCKS5 — note que a porta e OUTRO numero
curl -x socks5://USUARIO:[email protected]:PORTA_SOCKS5 https://ifconfig.me
Se os dois devolverem um IP brasileiro, a credencial está certa e o problema é de configuração da ferramenta. Se falharem, o problema é anterior — e o erro mais comum é trivial: as portas de HTTP e de SOCKS5 são números diferentes, e escrever um protocolo com a porta do outro falha sem mensagem clara.
O host da GTI Proxy é srv.gtiproxy.com para todos os planos; usuário, senha e as duas portas saem do painel. Mais ferramentas em como configurar o proxy, e o caso de raspagem em escala em proxy para web scraping.
Se o seu bloqueio não é de credencial e sim de captcha ou 403, o diagnóstico está em captcha e bloqueio.
perguntas frequentes
Perguntas frequentes
Como usar proxy com usuário e senha no Playwright?
Passando um dicionário proxy com as chaves server, username e password no launch do navegador. A credencial vai em chaves separadas, não embutida na URL do server. O Playwright também aceita proxy por contexto, em new_context, o que permite endereços diferentes na mesma execução — mas o exemplo oficial dessa forma mostra apenas o server, então confirme na sua versão se as credenciais são aceitas ali.
Por que o proxy com senha não funciona no Selenium com Chrome?
Porque o Selenium não tem suporte nativo a autenticação de proxy e a flag --proxy-server do Chrome ignora credenciais. A primeira navegação para num 407 Proxy Authentication Required, com um diálogo nativo do navegador que o Selenium não consegue fechar, já que não é um elemento da página. O script fica pendurado até o timeout.
Quais as saídas para autenticar proxy no Selenium?
Três. Gerar uma extensão em tempo de execução que injeta a credencial, que em Manifest V3 exige Chrome 105 ou superior e tem o risco de o service worker ser suspenso quando ocioso, fazendo o diálogo nativo reaparecer. Usar o Selenium Wire, que aceita a credencial diretamente, ao custo de uma dependência a mais. Ou trocar para o Playwright, que resolve isso por desenho.
Como testar a credencial do proxy antes de culpar o código?
Com dois comandos curl, um por protocolo: curl -x http://USUARIO:SENHA@host:PORTA_HTTP https://ifconfig.me e curl -x socks5://USUARIO:SENHA@host:PORTA_SOCKS5 https://ifconfig.me. Se os dois devolverem o IP esperado, a credencial está certa e o problema é de configuração da ferramenta. O erro mais comum é trivial: as portas de HTTP e de SOCKS5 são números diferentes, e usar um protocolo com a porta do outro falha sem mensagem clara.
IP brasileiro de verdade, a partir de R$ 15.
Proxy móvel 4G/5G com IPs da TIM, Vivo ou Claro, e residencial de fibra óptica brasileira. Teste o residencial de graça por 15 minutos, sem cartão.