Pular para o conteúdo
Guides 12 min de leitura 877 visualizações

Configuração de proxy no Selenium

Este guia detalha como configurar proxies para o Selenium usando Python, Java e C#. Use o GProxy para soluções robustas.

Python Browser
Configuração de proxy no Selenium

A configuração de proxy no Selenium consiste em ajustar opções ou capabilities do navegador para rotear o tráfego web através de um servidor proxy específico, viabilizando tarefas como desbloqueio geográfico, anonimato e inspeção do tráfego de rede. Essa configuração é essencial para automatizar tarefas que exigem contornar restrições geográficas, testar o comportamento de um site a partir de diferentes pontos de rede ou gerenciar o tráfego de rede durante testes ou extração de dados.

Usar um proxy com o Selenium permite redirecionar todo o tráfego do navegador através de um servidor intermediário. Esse recurso é crítico para:
* Contornar restrições geográficas de conteúdo.
* Manter o anonimato durante interações web automatizadas.
* Testar como um site funciona ou se comporta quando acessado de vários pontos de rede.
* Monitorar ou depurar requisições e respostas de rede.
* Acessar redes internas ou restritas.

Conceitos gerais de proxy

Antes de configurar o Selenium, entender os conceitos fundamentais de proxy é crucial.

Tipos de proxy

  • Proxies HTTP/HTTPS: Esses proxies operam na camada de aplicação (Layer 7). Proxies HTTP tratam tráfego HTTP não criptografado, enquanto proxies HTTPS tratam tráfego HTTPS criptografado. Muitos proxies HTTPS fazem interceptação SSL (Man-in-the-Middle), descriptografando o tráfego, inspecionando-o e recriptografando-o antes de encaminhá-lo. Isso pode, às vezes, gerar erros de certificado SSL se o certificado do proxy não for confiável para o navegador.
  • Proxies SOCKS (SOCKS4, SOCKS5): Proxies SOCKS (Socket Secure) operam em um nível mais baixo (Layer 5). São agnósticos de protocolo, ou seja, conseguem tratar qualquer tipo de tráfego TCP/UDP, não apenas HTTP/HTTPS. SOCKS5 é a versão mais comum, com suporte a autenticação e tráfego UDP, o que o torna versátil para diversas aplicações além da navegação web.

Autenticação de proxy

Muitos servidores proxy exigem autenticação (nome de usuário e senha) para conceder acesso. O Selenium trata a autenticação básica embutindo as credenciais diretamente na string do proxy, normalmente no formato username:password@host:port.

Opções/capabilities do navegador

O Selenium interage com os navegadores via executáveis de driver específicos (por exemplo, ChromeDriver para o Chrome, GeckoDriver para o Firefox). Esses drivers aceitam um objeto Options (por exemplo, ChromeOptions, FirefoxOptions) onde as configurações de proxy são definidas. Essas configurações são passadas ao navegador na inicialização, garantindo que todo o tráfego subsequente daquela instância do navegador seja roteado pelo proxy especificado.

Configuração de proxy no Selenium: exemplos por linguagem

As seções a seguir detalham como configurar proxies para Chrome e Firefox usando Python, Java e C#. Os princípios são transferíveis para outros navegadores suportados pelo Selenium, como Edge ou Safari, usando seus respectivos objetos Options.

Python

O Python usa selenium.webdriver.Proxy e ProxyType para definir as configurações de proxy dentro das opções do navegador.

Proxy HTTP/HTTPS básico
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.chrome.options import Options as ChromeOptions
from selenium.webdriver.firefox.options import Options as FirefoxOptions

# Configurações do proxy
PROXY_HOST = "your_proxy_host"
PROXY_PORT = 8080 # Ou 443 para HTTPS

# --- Exemplo com Chrome ---
chrome_options = ChromeOptions()
chrome_options.add_argument(f'--proxy-server={PROXY_HOST}:{PROXY_PORT}')

# Opcional: desabilite a verificação de certificado SSL se o proxy causar problemas (use com cautela)
# chrome_options.add_argument('--ignore-certificate-errors')

driver_chrome = webdriver.Chrome(options=chrome_options)
driver_chrome.get("http://www.example.com")
# ... execute as ações ...
driver_chrome.quit()

# --- Exemplo com Firefox ---
firefox_options = FirefoxOptions()
firefox_options.set_preference("network.proxy.type", 1) # Configuração manual de proxy
firefox_options.set_preference("network.proxy.http", PROXY_HOST)
firefox_options.set_preference("network.proxy.http_port", PROXY_PORT)
firefox_options.set_preference("network.proxy.ssl", PROXY_HOST)
firefox_options.set_preference("network.proxy.ssl_port", PROXY_PORT)
firefox_options.set_preference("network.proxy.no_proxies_on", "") # Garante que o proxy seja usado para todos os hosts

driver_firefox = webdriver.Firefox(options=firefox_options)
driver_firefox.get("http://www.example.com")
# ... execute as ações ...
driver_firefox.quit()
Proxy HTTP/HTTPS com autenticação

Para proxies HTTP/HTTPS com autenticação, embuta as credenciais diretamente na string do proxy.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options as ChromeOptions
from selenium.webdriver.firefox.options import Options as FirefoxOptions

PROXY_HOST = "your_proxy_host"
PROXY_PORT = 8080
PROXY_USER = "your_username"
PROXY_PASS = "your_password"

# --- Exemplo com Chrome ---
# Formato: user:pass@host:port
authenticated_proxy = f"{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
chrome_options = ChromeOptions()
chrome_options.add_argument(f'--proxy-server={authenticated_proxy}')

driver_chrome = webdriver.Chrome(options=chrome_options)
driver_chrome.get("http://www.example.com")
driver_chrome.quit()

# --- Exemplo com Firefox ---
# As preferências nativas do Firefox não suportam diretamente usuário/senha na string do proxy
# para HTTP/HTTPS. Uma solução alternativa comum é usar uma extensão de navegador ou um gerenciador de proxy.
# No entanto, se você usar a opção de proxy "direct" via capabilities (o que é menos comum no Firefox
# em comparação com o argumento --proxy-server do Chrome), pode funcionar.
# Para um proxy autenticado robusto no Firefox, considere usar uma extensão de proxy ou um proxy SOCKS5.
# O que segue é uma abordagem geral que pode não funcionar diretamente para todos os proxies HTTP/HTTPS autenticados no Firefox.
# Para simplicidade e consistência entre navegadores, considere usar SOCKS5 se a autenticação for obrigatória.

# As preferências padrão do Firefox não suportam diretamente embutir user:pass para HTTP/HTTPS.
# Para proxies HTTP/HTTPS autenticados no Firefox, o navegador normalmente solicita as credenciais.
# O WebDriver não consegue interagir diretamente com esses prompts nativos de autenticação do navegador.
# Uma solução comum é usar um proxy que suporte autenticação via URL (como alguns proxies SOCKS5)
# ou usar uma extensão de navegador que trate a autenticação de proxy.
# Neste exemplo, omitimos uma configuração direta de proxy HTTP/HTTPS autenticado no Firefox devido à complexidade
# e à falta de suporte direto do WebDriver aos prompts nativos de autenticação do navegador.
Proxy SOCKS

Proxies SOCKS exigem que se especifique a versão do SOCKS. SOCKS5 costuma ser preferido por causa de seus recursos.

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.chrome.options import Options as ChromeOptions
from selenium.webdriver.firefox.options import Options as FirefoxOptions

PROXY_HOST = "your_socks_proxy_host"
PROXY_PORT = 1080 # Porta SOCKS comum
PROXY_USER = "your_username" # Opcional para SOCKS5
PROXY_PASS = "your_password" # Opcional para SOCKS5

# --- Exemplo com Chrome ---
chrome_options = ChromeOptions()
# Para SOCKS5 com autenticação, o formato é socks5://user:pass@host:port
# Para SOCKS5 sem autenticação, o formato é socks5://host:port
# Para SOCKS4, use socks4://host:port
socks_proxy_string = f"socks5://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}" if PROXY_USER else f"socks5://{PROXY_HOST}:{PROXY_PORT}"
chrome_options.add_argument(f'--proxy-server={socks_proxy_string}')

driver_chrome = webdriver.Chrome(options=chrome_options)
driver_chrome.get("http://www.example.com")
driver_chrome.quit()

# --- Exemplo com Firefox ---
firefox_options = FirefoxOptions()
firefox_options.set_preference("network.proxy.type", 1) # Configuração manual de proxy
firefox_options.set_preference("network.proxy.socks", PROXY_HOST)
firefox_options.set_preference("network.proxy.socks_port", PROXY_PORT)
firefox_options.set_preference("network.proxy.socks_version", 5) # Para SOCKS5
firefox_options.set_preference("network.proxy.socks_username", PROXY_USER) # Para SOCKS5 autenticado
firefox_options.set_preference("network.proxy.socks_password", PROXY_PASS) # Para SOCKS5 autenticado
firefox_options.set_preference("network.proxy.no_proxies_on", "")

driver_firefox = webdriver.Firefox(options=firefox_options)
driver_firefox.get("http://www.example.com")
driver_firefox.quit()

Java

O Java usa a classe org.openqa.selenium.Proxy e a define dentro das capabilities do driver do navegador.

Proxy HTTP/HTTPS básico
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;

public class SeleniumProxySetup {

    public static void main(String[] args) {
        String PROXY_HOST = "your_proxy_host";
        int PROXY_PORT = 8080;

        // --- Exemplo com Chrome ---
        ChromeOptions chromeOptions = new ChromeOptions();
        Proxy proxyChrome = new Proxy();
        proxyChrome.setHttpProxy(PROXY_HOST + ":" + PROXY_PORT);
        proxyChrome.setSslProxy(PROXY_HOST + ":" + PROXY_PORT); // Defina também para HTTPS
        chromeOptions.setCapability("proxy", proxyChrome);

        WebDriver driverChrome = new ChromeDriver(chromeOptions);
        driverChrome.get("http://www.example.com");
        // ... execute as ações ...
        driverChrome.quit();

        // --- Exemplo com Firefox ---
        FirefoxOptions firefoxOptions = new FirefoxOptions();
        Proxy proxyFirefox = new Proxy();
        proxyFirefox.setHttpProxy(PROXY_HOST + ":" + PROXY_PORT);
        proxyFirefox.setSslProxy(PROXY_HOST + ":" + PROXY_PORT); // Defina também para HTTPS
        firefoxOptions.setCapability("proxy", proxyFirefox);

        WebDriver driverFirefox = new FirefoxDriver(firefoxOptions);
        driverFirefox.get("http://www.example.com");
        // ... execute as ações ...
        driverFirefox.quit();
    }
}
Proxy HTTP/HTTPS com autenticação

Assim como no Python, para autenticação básica HTTP/HTTPS as credenciais são embutidas na string do proxy.

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
// O exemplo do Firefox para HTTP/HTTPS autenticado é complexo por causa dos prompts nativos.
// Considere SOCKS5 ou uma extensão de navegador para autenticação no Firefox.

public class SeleniumAuthenticatedProxySetup {

    public static void main(String[] args) {
        String PROXY_HOST = "your_proxy_host";
        int PROXY_PORT = 8080;
        String PROXY_USER = "your_username";
        String PROXY_PASS = "your_password";

        // --- Exemplo com Chrome ---
        ChromeOptions chromeOptions = new ChromeOptions();
        Proxy proxyChrome = new Proxy();
        // Formato: user:pass@host:port
        String authenticatedProxyString = PROXY_USER + ":" + PROXY_PASS + "@" + PROXY_HOST + ":" + PROXY_PORT;
        proxyChrome.setHttpProxy(authenticatedProxyString);
        proxyChrome.setSslProxy(authenticatedProxyString); // Defina também para HTTPS
        chromeOptions.setCapability("proxy", proxyChrome);

        WebDriver driverChrome = new ChromeDriver(chromeOptions);
        driverChrome.get("http://www.example.com");
        driverChrome.quit();

        // --- Exemplo com Firefox ---
        // Como observado no Python, as preferências nativas do Firefox não suportam diretamente
        // embutir usuário/senha para proxies HTTP/HTTPS via capabilities do WebDriver
        // sem uma extensão de navegador. O navegador normalmente solicita as credenciais.
        // Para um proxy autenticado robusto no Firefox, considere usar um proxy SOCKS5 ou uma extensão de proxy.
    }
}
Proxy SOCKS
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;

public class SeleniumSocksProxySetup {

    public static void main(String[] args) {
        String PROXY_HOST = "your_socks_proxy_host";
        int PROXY_PORT = 1080; // Porta SOCKS comum
        String PROXY_USER = "your_username"; // Opcional para SOCKS5
        String PROXY_PASS = "your_password"; // Opcional para SOCKS5

        // --- Exemplo com Chrome ---
        ChromeOptions chromeOptions = new ChromeOptions();
        Proxy proxyChrome = new Proxy();
        // Para SOCKS5 com autenticação, o formato é socks5://user:pass@host:port
        // Para SOCKS5 sem autenticação, o formato é socks5://host:port
        String socksProxyString = PROXY_USER != null && !PROXY_USER.isEmpty()
                                ? "socks5://" + PROXY_USER + ":" + PROXY_PASS + "@" + PROXY_HOST + ":" + PROXY_PORT
                                : "socks5://" + PROXY_HOST + ":" + PROXY_PORT;
        chromeOptions.addArguments("--proxy-server=" + socksProxyString); // O Chrome usa o argumento --proxy-server para SOCKS

        WebDriver driverChrome = new ChromeDriver(chromeOptions);
        driverChrome.get("http://www.example.com");
        driverChrome.quit();

        // --- Exemplo com Firefox ---
        FirefoxOptions firefoxOptions = new FirefoxOptions();
        Proxy proxyFirefox = new Proxy();
        proxyFirefox.setSocksProxy(PROXY_HOST + ":" + PROXY_PORT);
        proxyFirefox.setSocksVersion(5); // Para SOCKS5
        // Preferências do Firefox para autenticação SOCKS
        firefoxOptions.setPreference("network.proxy.socks_username", PROXY_USER);
        firefoxOptions.setPreference("network.proxy.socks_password", PROXY_PASS);
        firefoxOptions.setCapability("proxy", proxyFirefox);

        WebDriver driverFirefox = new FirefoxDriver(firefoxOptions);
        driverFirefox.get("http://www.example.com");
        driverFirefox.quit();
    }
}

C

O C# usa a classe OpenQA.Selenium.Proxy e a define dentro das opções do navegador.

Proxy HTTP/HTTPS básico
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;

public class SeleniumProxySetup
{
    public static void Main(string[] args)
    {
        string PROXY_HOST = "your_proxy_host";
        int PROXY_PORT = 8080;

        // --- Exemplo com Chrome ---
        ChromeOptions chromeOptions = new ChromeOptions();
        Proxy proxyChrome = new Proxy();
        proxyChrome.HttpProxy = $"{PROXY_HOST}:{PROXY_PORT}";
        proxyChrome.SslProxy = $"{PROXY_HOST}:{PROXY_PORT}"; // Defina também para HTTPS
        chromeOptions.Proxy = proxyChrome;

        IWebDriver driverChrome = new ChromeDriver(chromeOptions);
        driverChrome.Navigate().GoToUrl("http://www.example.com");
        // ... execute as ações ...
        driverChrome.Quit();

        // --- Exemplo com Firefox ---
        FirefoxOptions firefoxOptions = new FirefoxOptions();
        Proxy proxyFirefox = new Proxy();
        proxyFirefox.HttpProxy = $"{PROXY_HOST}:{PROXY_PORT}";
        proxyFirefox.SslProxy = $"{PROXY_HOST}:{PROXY_PORT}"; // Defina também para HTTPS
        firefoxOptions.Proxy = proxyFirefox;

        IWebDriver driverFirefox = new FirefoxDriver(firefoxOptions);
        driverFirefox.Navigate().GoToUrl("http://www.example.com");
        // ... execute as ações ...
        driverFirefox.Quit();
    }
}
Proxy HTTP/HTTPS com autenticação

Para autenticação básica, embuta as credenciais na string do proxy.

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
// O exemplo do Firefox para HTTP/HTTPS autenticado é complexo por causa dos prompts nativos.
// Considere SOCKS5 ou uma extensão de navegador para autenticação no Firefox.

public class SeleniumAuthenticatedProxySetup
{
    public static void Main(string[] args)
    {
        string PROXY_HOST = "your_proxy_host";
        int PROXY_PORT = 8080;
        string PROXY_USER = "your_username";
        string PROXY_PASS = "your_password";

        // --- Exemplo com Chrome ---
        ChromeOptions chromeOptions = new ChromeOptions();
        Proxy proxyChrome = new Proxy();
        // Formato: user:pass@host:port
        string authenticatedProxyString = $"{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}";
        proxyChrome.HttpProxy = authenticatedProxyString;
        proxyChrome.SslProxy = authenticatedProxyString; // Defina também para HTTPS
        chromeOptions.Proxy = proxyChrome;

        IWebDriver driverChrome = new ChromeDriver(chromeOptions);
        driverChrome.Navigate().GoToUrl("http://www.example.com");
        driverChrome.Quit();

        // --- Exemplo com Firefox ---
        // Como observado no Python e no Java, as preferências nativas do Firefox não suportam diretamente
        // embutir usuário/senha para proxies HTTP/HTTPS via capabilities do WebDriver
        // sem uma extensão de navegador. O navegador normalmente solicita as credenciais.
        // Para um proxy autenticado robusto no Firefox, considere usar um proxy SOCKS5 ou uma extensão de proxy.
    }
}
Proxy SOCKS
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;

public class SeleniumSocksProxySetup
{
    public static void Main(string[] args)
    {
        string PROXY_HOST = "your_socks_proxy_host";
        int PROXY_PORT = 1080; // Porta SOCKS comum
        string PROXY_USER = "your_username"; // Opcional para SOCKS5
        string PROXY_PASS = "your_password"; // Opcional para SOCKS5

        // --- Exemplo com Chrome ---
        ChromeOptions chromeOptions = new ChromeOptions();
        // O Chrome usa o argumento --proxy-server para SOCKS.
        // Para SOCKS5 com autenticação, o formato é socks5://user:pass@host:port
        // Para SOCKS5 sem autenticação, o formato é socks5://host:port
        string socksProxyString = string.IsNullOrEmpty(PROXY_USER)
                                ? $"socks5://{PROXY_HOST}:{PROXY_PORT}"
                                : $"socks5://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}";
        chromeOptions.AddArgument($"--proxy-server={socksProxyString}");

        IWebDriver driverChrome = new ChromeDriver(chromeOptions);
        driverChrome.Navigate().GoToUrl("http://www.example.com");
        driverChrome.Quit();

        // --- Exemplo com Firefox ---
        FirefoxOptions firefoxOptions = new FirefoxOptions();
        Proxy proxyFirefox = new Proxy();
        proxyFirefox.SocksProxy = $"{PROXY_HOST}:{PROXY_PORT}";
        proxyFirefox.SocksVersion = 5; // Para SOCKS5
        // Preferências do Firefox para autenticação SOCKS
        firefoxOptions.SetPreference("network.proxy.socks_username", PROXY_USER);
        firefoxOptions.SetPreference("network.proxy.socks_password", PROXY_PASS);
        firefoxOptions.Proxy = proxyFirefox;

        IWebDriver driverFirefox = new FirefoxDriver(firefoxOptions);
        driverFirefox.Navigate().GoToUrl("http://www.example.com");
        driverFirefox.Quit();
    }
}

Comparação entre tipos de proxy

Recurso Proxy HTTP Proxy HTTPS Proxy SOCKS (SOCKS5)
Camada de protocolo Aplicação (Layer 7) Aplicação (Layer 7) Sessão (Layer 5)
Tráfego tratado Apenas tráfego HTTP Apenas tráfego HTTP criptografado (HTTPS) Qualquer tráfego TCP/UDP
Criptografia Nenhuma (cliente-proxy) Cliente-proxy (pode recriptografar) Nenhuma (cliente-proxy), a criptografia em nível de aplicação continua funcionando
Anonimato Pode revelar o IP original nos cabeçalhos Melhor, mas ainda é um proxy Alto, mais agnóstico de protocolo, menos manipulação de cabeçalhos
Autenticação Basic, Digest (via cabeçalhos) Basic, Digest (via cabeçalhos) Usuário/senha, GSS-API
Caso de uso Navegação web simples, cache, filtragem de conteúdo Navegação web segura, dados sensíveis, inspeção SSL Uso geral, P2P, jogos, funcionalidade semelhante a VPN
Desempenho Geralmente mais rápido para HTTP Overhead de criptografia/descriptografia Pode ser mais lento por causa do tratamento em nível mais baixo

Problemas comuns e solução de problemas

  • Proxy não funciona: Verifique o host e a porta do proxy. Confirme que o servidor proxy está online e acessível a partir da máquina que executa o Selenium. Regras de firewall podem bloquear as conexões com o proxy.
  • Falha de autenticação: Confira novamente o nome de usuário e a senha. Confirme que o proxy suporta o método de autenticação usado pelo Selenium (normalmente autenticação básica embutida na URL).
  • Erros de certificado SSL: Se um proxy HTTPS fizer interceptação SSL, o navegador pode exibir avisos de certificado porque não confia no certificado gerado dinamicamente pelo proxy. As opções incluem:
    • Desabilitar a validação de certificado (por exemplo, --ignore-certificate-errors no Chrome), mas isso é um risco de segurança e não é recomendado em produção.
    • Instalar o certificado raiz do proxy no armazenamento de confiança do navegador.
  • Erros de timeout: O servidor proxy pode estar lento, sobrecarregado ou com problemas de rede. Aumente os tempos de espera implícitos ou explícitos do Selenium, ou teste com outro proxy.
  • Peculiaridades de cada navegador: Embora a abordagem geral seja consistente, existem pequenas diferenças na forma como cada driver de navegador trata as configurações de proxy. Consulte a documentação específica do navegador se encontrar comportamentos inesperados.

Boas práticas

  • Variáveis de ambiente para credenciais: Evite deixar nomes de usuário e senhas de proxy fixos no código do script. Em vez disso, obtenha-os de variáveis de ambiente ou de um sistema seguro de gerenciamento de configuração.
  • Gerenciador de proxy dedicado: Para cenários complexos, como rotação de proxies, gerenciamento de grandes listas de proxies ou implementação de lógica avançada de proxy, considere usar uma biblioteca dedicada de gerenciamento de proxy ou o SDK de um serviço comercial de proxy.
  • Tratamento de erros: Implemente blocos try-catch robustos para lidar de forma controlada com falhas de conexão ao proxy, erros de autenticação ou timeouts de rede.
  • Compatibilidade com modo headless: As configurações de proxy funcionam perfeitamente com os modos headless do navegador, o que é vantajoso para automação no lado do servidor.
Atualizado: 03.03.2026
Voltar à categoria

Leia também

Experimente nossos proxies

20,000+ proxies em 100+ países do mundo

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.