Extração de dados

Configurando Proxies Residenciais no Selenium e Playwright

O gateway é idêntico para ambos, mas a autenticação de proxy não é. Aqui está a mesma configuração em cada framework e as diferenças que moldam sua arquitetura.

Chris Collins

Chris Collins

31 de agosto de 2026 · 7 min de leitura

Se você está escolhendo entre Selenium e Playwright para um trabalho que roda através de proxies residenciais, ou mantendo os dois, o mais útil não são dois guias de configuração separados, mas a comparação: o que é idêntico, o que é genuinamente diferente e quais dessas diferenças devem influenciar a forma como você constrói. Aqui está o mesmo trabalho feito em cada um, lado a lado.

Para o detalhe mais aprofundado de cada framework, incluindo os casos extremos que cada um tem, veja proxies residenciais no Selenium e proxies residenciais com Playwright. Esta é a camada de comparação acima disso.

O que é idêntico: o gateway

Os dois frameworks falam com o mesmo endpoint com as mesmas credenciais, porque o proxy não se importa com o que está por trás do controle. Host p.shifter.io, porta 443, e todo o seu direcionamento (targeting) codificado no nome de usuário:

customer-USERNAME                                # rotate, no geo
customer-USERNAME-country-de                     # German exit
customer-USERNAME-country-us-city-new_york       # city level
customer-USERNAME-country-de-sid-abc123-ttl-600  # sticky, ten minutes

Isso significa que toda decisão sobre geografia, rotação e duração de sessão é uma string, idêntica nos dois frameworks. Nada nas seções abaixo muda o gateway, apenas a forma como cada framework entrega suas credenciais a ele. A referência de formato está em como conectar.

A única diferença real: autenticação

Esta é a diferença que importa, e ela explica a maior parte do atrito que as pessoas encontram.

O Playwright oferece suporte nativo a proxies autenticados. Nome de usuário e senha são opções de primeira classe, então funciona pronto de fábrica.

O Selenium não. Ele consegue definir um host e uma porta de proxy, mas a especificação do WebDriver não tem mecanismo para passar credenciais, então o Chrome exibe uma caixa de diálogo de autenticação nativa que seu script não consegue dispensar. Toda solução no Selenium é uma forma de contornar essa lacuna, e existem três: Selenium Wire, que cuida das credenciais para você; uma pequena extensão do Chrome gerada que as fornece; ou CDP, controlando diretamente o protocolo de depuração do navegador.

Se você está começando do zero e seu trabalho precisa de proxies autenticados, essa diferença sozinha já é um motivo legítimo para preferir o Playwright.

A mesma configuração nos dois

Playwright, Python:

from playwright.sync_api import sync_playwright

USER = "customer-USERNAME-country-de-sid-abc123-ttl-600"

with sync_playwright() as p:
    browser = p.chromium.launch()
    context = browser.new_context(
        proxy={"server": "http://p.shifter.io:443",
               "username": USER, "password": "PASSWORD"},
        locale="de-DE", timezone_id="Europe/Berlin",   # match the exit
    )
    page = context.new_page()
    page.goto("https://ipinfo.io/json")
    print(page.inner_text("body"))

Playwright, Node:

const ctx = await browser.newContext({
  proxy: { server: 'http://p.shifter.io:443',
           username: 'customer-USERNAME-country-de-sid-abc123-ttl-600',
           password: 'PASSWORD' },
  locale: 'de-DE', timezoneId: 'Europe/Berlin',
});

Selenium, Python, usando Selenium Wire:

from seleniumwire import webdriver

USER = "customer-USERNAME-country-de-sid-abc123-ttl-600"
proxy_url = f"http://{USER}:PASSWORD@p.shifter.io:443"

opts = {"proxy": {"http": proxy_url, "https": proxy_url,
                  "no_proxy": "localhost,127.0.0.1"}}
driver = webdriver.Chrome(seleniumwire_options=opts)
driver.get("https://ipinfo.io/json")
print(driver.find_element("tag name", "body").text)

Mesmo gateway, mesmo nome de usuário, mesmo resultado. A única diferença é como as credenciais entram.

A diferença estrutural: como você isola identidades

Esta é a que realmente deveria moldar seu design, e ela decorre de quão caro é manter uma identidade isolada em cada framework.

No Playwright, os contexts são baratos. Um browser context é um perfil isolado com seus próprios cookies, armazenamento e, o mais importante, seu próprio proxy. Você pode rodar um único processo de navegador e criar um context por identidade, o que faz da rotação de geografia ou de sessões uma questão de criar um novo context em vez de um novo navegador.

browser = p.chromium.launch()          # one process
for country in ["de", "fr", "us"]:
    ctx = browser.new_context(proxy={"server": "http://p.shifter.io:443",
                                     "username": f"customer-USERNAME-country-{country}",
                                     "password": "PASSWORD"})
    page = ctx.new_page()
    page.goto("https://example.com")
    ctx.close()                        # identity discarded, process stays

No Selenium, o proxy está vinculado ao driver. Mudá-lo geralmente significa um novo driver, e um driver é um processo de navegador inteiro: lento para iniciar e pesado em memória. Então o padrão do Selenium é o oposto, reutilizar um driver para muitas requisições em uma identidade, e tratar uma troca de identidade como uma operação cara que você agrupa em lote em vez de fazer a cada requisição.

A consequência prática: um trabalho que precisa de muitas identidades de curta duração é marcadamente mais barato no Playwright, enquanto um trabalho que mantém uma identidade por uma longa sequência serve para qualquer um dos dois. Se você está rodando Selenium e se pega iniciando um driver por requisição, isso é o que deve ser corrigido primeiro, não a configuração do proxy.

Geo, rotação e sessões

Como o direcionamento está no nome de usuário, essa parte é independente do framework. Omita sid e cada nova conexão recebe uma saída nova; inclua um e o mesmo endereço é mantido até o TTL expirar. No Playwright você define esse escopo por context; no Selenium você define esse escopo por driver.

Uma coisa para acertar nos dois: quando você define um país, defina o locale e o fuso horário do navegador para corresponder a ele. Uma saída alemã reportando um fuso horário de Nova York é uma contradição fácil de detectar e fácil de evitar, e ambos os frameworks expõem isso como opções de context, conforme combinando geo, fuso horário e locale.

Banda: o custo que os dois frameworks compartilham

Navegadores são caros num produto cobrado por GB porque eles buscam tudo o que um navegador real buscaria: imagens, fontes, mídia, analytics. Bloquear o que você não precisa é a maior economia disponível, e ambos os frameworks oferecem suporte a isso.

Playwright:

context.route("**/*", lambda route: route.abort()
              if route.request.resource_type in {"image", "media", "font", "stylesheet"}
              else route.continue_())

O Selenium não tem um equivalente de uma linha só na forma nativa; com o Selenium Wire você pode filtrar requisições, ou pode bloquear tipos de recurso via CDP. De qualquer forma vale a pena fazer, já que isso comumente reduz o peso da página por um múltiplo grande. O argumento mais amplo, incluindo se você precisa de um navegador de fato, está em quando você precisa de um navegador headless e reduzindo custos de banda de proxy.

Verificando se funciona, nos dois

Não presuma que o proxy está sendo aplicado. Navegue até um endpoint que reporte o endereço e verifique se ele não é o seu:

# Playwright
page.goto("https://ipinfo.io/json"); print(page.inner_text("body"))

# Selenium
driver.get("https://ipinfo.io/json"); print(driver.find_element("tag name", "body").text)

Se o endereço for o seu próprio, o proxy não está sendo aplicado de forma alguma. Se estiver correto, mas o conteúdo estiver errado para a região, suspeite de DNS ou de uma incompatibilidade de locale antes de culpar o pool, conforme prevenindo vazamentos de DNS.

Qual escolher

Se você não tem nenhum compromisso já existente e seu trabalho envolve proxies autenticados e muitas identidades, o Playwright é o caminho mais fácil: suporte nativo a credenciais e isolamento barato por context eliminam dois problemas que você teria de projetar contornos para resolver.

O Selenium continua sendo uma escolha razoável quando você já tem um ecossistema Selenium estabelecido, quando precisa do seu grid e do ecossistema multi-navegador, ou quando o trabalho é uma sessão longa em vez de muitas curtas. O suporte a proxy é totalmente viável, só custa uma biblioteca ou uma pequena extensão para colocar as credenciais.

E em ambos os casos, lembre-se de que o navegador é só metade de não ser bloqueado: o endereço te leva até a porta, e cabeçalhos, fingerprint e ritmo decidem o que acontece depois, conforme evitando bloqueios.

Conclusão

O gateway é idêntico para os dois frameworks, então geografia, rotação e duração de sessão são a mesma string em cada um. A diferença real é a autenticação, que o Playwright oferece nativamente e o Selenium não, exigindo Selenium Wire, uma extensão ou CDP. A diferença que deveria moldar sua arquitetura é o custo de isolamento: contexts do Playwright são baratos, então você rotaciona a identidade por context, enquanto um proxy no Selenium está vinculado a um driver, então você reutiliza drivers e agrupa mudanças de identidade em lote. Combine locale e fuso horário com a saída nos dois, bloqueie recursos desnecessários nos dois porque você paga por gigabyte, e verifique o endereço de saída antes de confiar em qualquer coisa.

Os dois rodam sobre os mesmos proxies residenciais, um gateway com direcionamento por país e cidade e sessões sticky quando um fluxo precisa de uma, cobrado por GB, de modo que o bloqueio de recursos acima se traduz diretamente numa conta menor.

Pronto para começar?

Experimente os proxies residenciais da Shifter, mais de 205M IPs, mais de 195 países, a partir de $0,75/GB.

Começar