Usar Proxies com Playwright e Puppeteer: Python e Node (2026)

Publicado em 2 de junho de 2026 · ≈9 min de leitura

Navegadores headless renderizam JavaScript, então lidam com sites modernos que clientes HTTP simples não conseguem. Mas um navegador ainda envia cada requisição a partir de um único IP, e a automação é pega no momento em que um site aplica rate-limit ou faz fingerprint desse endereço. Usar proxies com Playwright e Puppeteer distribui o tráfego entre vários IPs e, feito corretamente, faz sua automação parecer usuários comuns. Aqui está a configuração que funciona para os dois, em Python e Node.

Playwright com Proxy (Python)

Defina o proxy no lançamento do navegador. Passe a autenticação como campos separados de username e password — não coloque as credenciais embutidas na URL do servidor:

from playwright.sync_api import sync_playwright

PROXY = {
    "server": "http://gate.jibaoproxy.com:10001",
    "username": "USERNAME",
    "password": "PASSWORD",
}

with sync_playwright() as p:
    browser = p.chromium.launch(proxy=PROXY, headless=True)
    page = browser.new_page()
    page.goto("https://httpbin.org/ip")
    print(page.inner_text("body"))
    browser.close()

A JIBAO expõe tanto HTTP quanto SOCKS5 no gateway. Use o endpoint HTTP para automação de navegador: Playwright e Puppeteer não suportam proxies SOCKS5 autenticados, então HTTP com autenticação é a escolha confiável.

Playwright com Proxy (Node)

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch({
    headless: true,
    proxy: {
      server: 'http://gate.jibaoproxy.com:10001',
      username: 'USERNAME',
      password: 'PASSWORD',
    },
  });
  const page = await browser.newPage();
  await page.goto('https://httpbin.org/ip');
  console.log(await page.innerText('body'));
  await browser.close();
})();

Rotacione IPs por Contexto de Navegador

A forma mais limpa de rotacionar no Playwright é um IP por BrowserContext. Cada contexto é uma sessão isolada (com seus próprios cookies e cache), então vincular cada um a um IP de saída diferente lhe dá identidades paralelas a partir de um único processo de navegador:

from playwright.sync_api import sync_playwright

def ctx_proxy(session_id):
    return {
        "server": "http://gate.jibaoproxy.com:10001",
        "username": f"USERNAME-session-{session_id}",
        "password": "PASSWORD",
    }

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    for i in range(3):
        context = browser.new_context(proxy=ctx_proxy(f"ctx{i}"))
        page = context.new_page()
        page.goto("https://httpbin.org/ip")
        print(i, page.inner_text("body"))
        context.close()
    browser.close()

Cada contexto usa um token de sessão sticky distinto, então o IP permanece estável dentro de um contexto (bom para fluxos de login) mas difere entre contextos (bom para rodar muitas contas em paralelo). Esse é o padrão que navegadores anti-detect como GoLogin e Dolphin Anty automatizam — veja nosso guia de configuração de proxy anti-detect.

Puppeteer com Proxy (Node)

O Puppeteer define o servidor proxy como uma flag de lançamento do Chromium e depois autentica no objeto da página:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: 'new',
    args: ['--proxy-server=http://gate.jibaoproxy.com:10001'],
  });
  const page = await browser.newPage();
  await page.authenticate({ username: 'USERNAME', password: 'PASSWORD' });

  await page.goto('https://httpbin.org/ip');
  console.log(await page.evaluate(() => document.body.innerText));
  await browser.close();
})();

Como o proxy é uma flag em nível de processo, um único navegador Puppeteer usa um IP. Para rotacionar, lance um novo navegador por identidade (mais pesado) ou conduza a rotação por um gateway que troca de IPs a cada conexão.

Sessões Sticky para Fluxos de Login

Qualquer fluxo que cria um cookie de sessão precisa manter o mesmo IP por toda a sua vida. Um cookie gerado no IP-A que de repente aparece a partir do IP-B é lido como sequestro de sessão e dispara uma reautenticação ou um banimento. Mantenha um contexto (ou um navegador) por conta logada, fixado a um único token de sessão sticky, durante toda a sessão.

Não Esqueça o Fingerprint

Um IP residencial é necessário, mas não suficiente. Os sites também leem o handshake TLS/JA4 do seu navegador, a ordem dos frames do HTTP/2, canvas, WebGL e propriedades do navigator. O Chromium headless puro vaza navigator.webdriver = true e um fingerprint headless que derrota o melhor IP. Mitigue com plugins stealth e flags de lançamento realistas:

// Node: puppeteer-extra + stealth
const puppeteer = require('puppeteer-extra');
const Stealth = require('puppeteer-extra-plugin-stealth');
puppeteer.use(Stealth());

// Realistic launch flags
const browser = await puppeteer.launch({
  headless: 'new',
  args: [
    '--proxy-server=http://gate.jibaoproxy.com:10001',
    '--disable-blink-features=AutomationControlled',
    '--window-size=1920,1080',
  ],
});

Para ver exatamente quais sinais você está vazando, rode seu navegador automatizado contra o verificador de fingerprint JA3/JA4 gratuito da JIBAO. Para a mecânica mais profunda de por que os handshakes são sinalizados, leia como contornar o fingerprinting de TLS e a receita completa de bypass do Cloudflare.

Verifique e Depure

Dê Potência à Sua Automação de Navegador

Ganhe 500MB de tráfego grátis e IPs residenciais que mantêm Playwright e Puppeteer fora da lista de banidos.

Comece o Teste Gratuito

Para todos os produtos de IP · um enorme pool de nós disponíveis a qualquer momento

Cadastre-se agora e ganhe até 100% de reembolso na sua recarga

Novos usuários recebem 500MB ao se cadastrar, mais um bônus na primeira recarga. Oferta por tempo limitado.