Proxy no nível de lançamento#
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
"server": "http://res.proxy-cyber.com:9000",
"username": "USER-cc-us-sid-run1-ttl-30m",
"password": "PASS",
})
page = browser.new_page()
page.goto("https://api.ipify.org")
print(page.inner_text("body"))
browser.close()import { chromium } from "playwright";
const browser = await chromium.launch({
proxy: { server: "http://res.proxy-cyber.com:9000", username: "USER-cc-us-sid-run1-ttl-30m", password: "PASS" },
});
const page = await browser.newPage();
await page.goto("https://api.ipify.org");
console.log(await page.innerText("body"));
await browser.close();Atribua um identificador de sessão diferente a cada fluxo independente quando o gateway o permitir. Confirme a duração e os parâmetros geográficos nos dados de ligação. Um dispositivo residencial pode desligar-se antes do prazo pedido; uma sessão persistente não garante o mesmo IP durante dias. Para um endereço fixo, compare produtos estáticos dedicados.
Proxies por contexto#
Para executar vários países ou sessões em um navegador, inicie com um proxy de espaço reservado e dê a cada contexto o seu próprio. O Chromium precisa do proxy no nível de lançamento para que os proxies por contexto sejam respeitados.
browser = p.chromium.launch(proxy={"server": "http://per-context"})
de = browser.new_context(proxy={"server": "http://res.proxy-cyber.com:9000", "username": "USER-cc-de-city-berlin-sid-de1-ttl-30m", "password": "PASS"})
us = browser.new_context(proxy={"server": "http://res.proxy-cyber.com:9000", "username": "USER-cc-us-state-tx-sid-us1-ttl-30m", "password": "PASS"})const browser = await chromium.launch({ proxy: { server: "http://per-context" } });
const de = await browser.newContext({ proxy: { server: "http://res.proxy-cyber.com:9000", username: "USER-cc-de-city-berlin-sid-de1-ttl-30m", password: "PASS" } });
const us = await browser.newContext({ proxy: { server: "http://res.proxy-cyber.com:9000", username: "USER-cc-us-state-tx-sid-us1-ttl-30m", password: "PASS" } });Combine o contexto com a saída#
Dê a cada contexto a localidade e o fuso horário de seu país, para que o IP, o idioma e o relógio estejam de acordo: locale=\"de-DE\", timezone_id=\"Europe/Berlin\" para o contexto de Berlim. As incompatibilidades são um sinal de bot mais forte do que o próprio IP.
Economize gigabytes: bloqueie o que você não precisa#
def block(route):
if route.request.resource_type in {"image", "media", "font", "stylesheet"}:
return route.abort()
return route.continue_()
page.route("**/*", block)await page.route("**/*", (route) => {
const t = route.request().resourceType();
return ["image", "media", "font", "stylesheet"].includes(t) ? route.abort() : route.continue();
});Uma página renderizada pode pesar de 3 a 5 MB; seu HTML e API chamam algumas centenas de kilobytes. Numa rede por GB, esta regra única reduz a conta em 80 a 90%.
Verifique e solucione problemas#
- Abra primeiro um serviço IP-echo e verifique o país; em seguida, consulte uma pesquisa de geolocalização da cidade.
- A
net::ERR_TUNNEL_CONNECTION_FAILEDouERR_PROXY_CONNECTION_FAILEDna inicialização significa que as credenciais ou um parâmetro estão errados; teste o mesmo URL com cURL para ler o código do gateway. - O WebRTC é desabilitado por padrão em contextos do Playwright somente se você o bloquear; adicionar
--disable-webrtcendurecimento de estilo ou bloqueio STUN quando a privacidade é importante.
Perguntas que as pessoas fazem#
Cada aba pode ter um proxy diferente?
Cada contexto pode; guias (páginas) dentro de um contexto compartilham seu proxy. Crie um contexto por sessão ou país.
O Playwright oferece suporte a proxies SOCKS5 com autenticação?
O Chromium não aceita credenciais SOCKS5; use o proxy HTTP na porta 9000 com nome de usuário e senha ou coloque o IP do seu servidor na lista de permissões e use Socks5://res.proxy-cyber.com:9001 sem credenciais.