Sem KYC — sem documento de identidade, sem selfie, sem documentos · Pague com cripto: BTC, USDT, USDC, ETH, SOL, LTC
Idioma: Português
Comprar com cripto

Guia · Navegadores headless

Proxies para automação de navegador: Playwright, Puppeteer e Selenium

Como autenticar, dar a cada contexto do navegador seu próprio país e IP fixo, e contornar a falta de login proxy no Chrome com Selenium.

Última atualização: · 6 min de leitura

Resposta rápida

Como usar proxies com Playwright, Puppeteer e Selenium?

Aponte o navegador para http://gw.namelessproxy.com:7777 e faça login com seu nome de usuário e senha do proxy. Nameless Proxy, um provedor de proxy residencial focado em privacidade e sem KYC, funciona com a opção proxy do Playwright, page.authenticate() do Puppeteer e Selenium via um encaminhador local. Um ID de sessão por contexto do navegador mantém um IP por perfil. Tráfego residencial começa em US$ 0,53/GB. Sem KYC — sem ID, sem selfie, sem documentos. Pague com cripto.

Configuração do navegador em resumo

Servidor proxyhttp://gw.namelessproxy.com:7777 (porta HTTP)
PlaywrightOpção proxy com servidor, nome de usuário e senha, por navegador ou por contexto
PuppeteerFlag --proxy-server mais page.authenticate()
SeleniumEncaminhador local que adiciona as credenciais, ou uma whitelist de IP
Um IP por perfilUm ID de sessão por contexto, por até 60 minutos
SegmentaçãoNo nome de usuário: USERNAME-country-{cc}-city-{city}-session-{id}-ttl-{minutes}

Qual porta de proxy os navegadores precisam?

Use a porta HTTP, 7777. Ela transporta HTTPS via túneis CONNECT, que todo navegador suporta. Chromium não suporta SOCKS5 com nome de usuário e senha, então a porta SOCKS5 serve apenas para ferramentas que gerenciam login SOCKS5 por conta própria.

Um navegador baixa imagens, fontes e scripts, então usa muito mais tráfego por página do que um cliente HTTP simples. Bloqueie recursos pesados que você não precisa; o tráfego é cobrado por GB decimal.

Como configurar um proxy no Playwright?

Passe um objeto proxy com server, username e password. Defina em cada contexto do navegador para dar a cada contexto seu próprio país e sessão fixa em um único processo do navegador. Combine locale e timezone_id com o país de saída para que a página veja um visitante consistente.

Playwright para Python: um IP fixo por contexto
# pip install playwright && playwright install chromium
import uuid
from playwright.sync_api import sync_playwright

SERVER = "http://gw.namelessproxy.com:7777"   # HTTP port: browsers
USERNAME, PASSWORD = "USERNAME", "PASSWORD"

def proxy_for(country, city, ttl=30):
    """One sticky session per browser context."""
    session = uuid.uuid4().hex[:10]
    return {
        "server": SERVER,
        "username": f"{USERNAME}-country-{country}-city-{city}-session-{session}-ttl-{ttl}",
        "password": PASSWORD,
    }

with sync_playwright() as p:
    # Placeholder launch proxy: some Chromium builds need one before contexts
    # can set their own. It is never used when every context sets a proxy.
    browser = p.chromium.launch(proxy={"server": "http://per-context"})
    for country, city, tz in [("ae", "dubai", "Asia/Dubai"), ("sa", "riyadh", "Asia/Riyadh")]:
        context = browser.new_context(proxy=proxy_for(country, city), locale="ar", timezone_id=tz)
        page = context.new_page()
        page.goto("https://api.ipify.org")
        print(country, page.inner_text("body"))
        context.close()
    browser.close()
Playwright para Node.js
// npm i playwright && npx playwright install chromium
const { chromium } = require('playwright');
const crypto = require('crypto');

const server = 'http://gw.namelessproxy.com:7777';
const proxyFor = (country, city, ttl = 30) => ({
  server,
  username: `USERNAME-country-${country}-city-${city}-session-${crypto.randomBytes(5).toString('hex')}-ttl-${ttl}`,
  password: 'PASSWORD',
});

(async () => {
  const browser = await chromium.launch({ proxy: { server: 'http://per-context' } });
  const context = await browser.newContext({ proxy: proxyFor('eg', 'cairo') });
  const page = await context.newPage();
  await page.goto('https://api.ipify.org');
  console.log(await page.textContent('body'));
  await browser.close();
})();

Como configurar um proxy no Puppeteer?

Inicie o Chrome com --proxy-server e chame page.authenticate() antes da primeira navegação. O Chrome ignora as credenciais inseridas na flag, então a página responde ao desafio 407 do proxy. Cada página pode autenticar com um nome de usuário diferente, assim cada página pode ter seu próprio país e sessão. Versões recentes do Puppeteer também aceitam uma opção proxyServer em browser.createBrowserContext().

Puppeteer com login no proxy
// npm i puppeteer
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    args: ['--proxy-server=http://gw.namelessproxy.com:7777'],
  });
  const page = await browser.newPage();
  // Chrome ignores credentials in --proxy-server, so answer the 407 challenge per page
  await page.authenticate({
    username: 'USERNAME-country-ng-city-lagos-session-x7k2p9-ttl-30',
    password: 'PASSWORD',
  });
  await page.goto('https://api.ipify.org');
  console.log(await page.evaluate(() => document.body.innerText));
  await browser.close();
})();

Como usar um proxy autenticado com Selenium?

Execute um pequeno encaminhador local que adiciona suas credenciais e aponte o Chrome para ele. A flag --proxy-server do Chrome não aceita nome de usuário nem senha, e o Selenium não tem opção para preencher o login do proxy. O encaminhador abaixo usa pproxy: ele escuta na sua máquina sem senha e encaminha para o gateway com seu nome de usuário, incluindo o target. Execute um encaminhador por sessão sticky, cada um em sua própria porta local.

Se sua máquina tem um IP público fixo, você pode liberá-lo na área do cliente e passar o endereço do gateway direto para --proxy-server. O pacote selenium-wire também lidava com login no proxy, mas não é mais mantido.

Iniciar o encaminhador local
pip install pproxy selenium

# Local forwarder: no auth on 127.0.0.1:8899, adds your credentials upstream (#user:pass)
pproxy -l http://127.0.0.1:8899 \
  -r "http://gw.namelessproxy.com:7777#USERNAME-country-ke-city-nairobi-session-k3m9q1-ttl-30:PASSWORD"
Selenium via encaminhador
# Selenium 4.6+ downloads the matching chromedriver itself (Selenium Manager)
from selenium import webdriver
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=http://127.0.0.1:8899")   # the local forwarder
driver = webdriver.Chrome(options=options)
try:
    driver.get("https://api.ipify.org")
    print(driver.find_element(By.TAG_NAME, "body").text)
finally:
    driver.quit()

Como manter um IP por perfil de navegador?

Dê a cada contexto do navegador seu próprio ID de sessão e um TTL, e mantenha esse ID durante a vida do perfil. O contexto então sai pelo mesmo IP residencial enquanto o TTL durar (por até 60 minutos). Se o dispositivo por trás do IP ficar offline, inicie um novo ID de sessão.

Quando um perfil precisa manter um IP por dias, uma porta dedicada 4G/5G](/mobile-proxies/) é melhor: o IP fica até você rotacionar. Use proxies para trabalhos legítimos como verificação de anúncios, QA e gerenciamento de contas dos seus clientes. Contas falsas e evasão de banimento são proibidas pela Política de Uso Aceitável.

Perguntas frequentes

Por que o Chrome ignora o nome de usuário e senha em --proxy-server?

A flag de linha de comando do Chrome aceita apenas esquema, host e porta; não lê credenciais. O navegador espera pelo desafio 407 do proxy. O Playwright responde a ele pela opção proxy e o Puppeteer por page.authenticate(). O Selenium não tem esse recurso para login no proxy, por isso precisa de um encaminhador local ou whitelist de IP.

Posso usar a porta SOCKS5 com Playwright ou Puppeteer?

Não com nome de usuário e senha: o Chromium não suporta autenticação SOCKS5. Use a porta HTTP, 7777, que transporta HTTPS via túneis CONNECT e suporta login. A porta SOCKS5, 7778, é para ferramentas que gerenciam autenticação SOCKS5, como curl ou Python com socks5h://.

Como dar a cada contexto do navegador um país diferente?

Monte o nome de usuário do proxy por contexto: USERNAME-country-ae-city-dubai-session-… para um contexto e USERNAME-country-sa-city-riyadh-session-… para outro. No Playwright, passe isso em new_context(proxy=…). No Puppeteer, abra uma página por país e chame page.authenticate() com cada nome de usuário. Um processo do navegador pode servir vários países assim.

Como reduzir o tráfego usado por um navegador headless?

Bloqueie o que não precisa. No Playwright, page.route() pode abortar requisições de imagens, fontes e mídia; no Puppeteer, use interceptação de requisições. Reuse um contexto para várias páginas do mesmo site para que o cache funcione. O tráfego é cobrado por GB decimal, e a área do cliente mostra uso diário, então meça antes e depois.

Por que um site ainda mostra o país errado?

O IP é apenas um sinal. Sites também leem o idioma do navegador, o fuso horário e às vezes a API de Geolocalização. Configure locale e timezone_id no contexto do Playwright para combinar com o país de saída, por exemplo Asia/Dubai para os Emirados Árabes Unidos. Também limpe cookies que o site definiu numa visita anterior de outro país.

O selenium-wire ainda é uma boa forma de adicionar login no proxy?

Funcionava, mas o projeto não é mais mantido, então pode quebrar com novas versões do Chrome ou Selenium. Um encaminhador local como pproxy faz uma coisa só, adiciona credenciais a um proxy upstream, e funciona com qualquer navegador. Liberar o IP do seu servidor na área do cliente elimina a necessidade de credenciais.

Dê a cada perfil de navegador seu próprio IP

Proxies residenciais da US$ 0,53/GB, portas dedicadas 4G/5G da $2,63/dia. Sem KYC — sem ID, sem selfie, sem documentos.

A partir de US$ 0,53/GB · sem KYC

Comprar proxies