Proxy de nivel de lanzamiento#
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();Asigna un identificador de sesión distinto a cada flujo independiente cuando el gateway lo admita. Confirma la duración y los parámetros geográficos en los datos de conexión. Un dispositivo residencial puede desconectarse antes del plazo solicitado; una sesión persistente no garantiza la misma IP durante días. Para una dirección fija, compara productos estáticos dedicados.
Proxies por contexto#
Para ejecutar varios países o sesiones en un navegador, inicie con un proxy de marcador de posición y asigne a cada contexto su propio contexto. Chromium necesita el proxy de nivel de lanzamiento para que se respeten los proxies por contexto.
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" } });Relaciona el contexto con la salida.#
Proporcione a cada contexto la ubicación y zona horaria de su país, de modo que la IP, el idioma y el reloj coincidan: locale=\"de-DE\", timezone_id=\"Europe/Berlin\" para el contexto de Berlín. Las discrepancias son una señal de bot más fuerte que la propia IP.
Ahorra gigas: bloquea lo que no necesitas#
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();
});Una página renderizada puede pesar entre 3 y 5 MB; su HTML y API requieren unos cientos de kilobytes. En una red por GB, esta única regla reduce la factura entre un 80 y un 90 %.
Verificar y solucionar problemas#
- Primero abra un servicio de eco IP y verifique el país; luego mire una búsqueda de geolocalización de la ciudad.
- A
net::ERR_TUNNEL_CONNECTION_FAILEDoERR_PROXY_CONNECTION_FAILEDen el inicio significa que las credenciales o un parámetro son incorrectos; Pruebe la misma URL con cURL para leer el código de la puerta de enlace. - WebRTC está deshabilitado de forma predeterminada en contextos de Playwright solo si lo bloquea; agregar
--disable-webrtcendurecer el estilo o bloquear STUN cuando la privacidad es importante.
Preguntas que hace la gente#
¿Puede cada pestaña tener un proxy diferente?
Cada contexto puede; Las pestañas (páginas) dentro de un contexto comparten su proxy. Cree un contexto por sesión o país.
¿Playwright admite proxies SOCKS5 con autenticación?
Chromium no acepta credenciales SOCKS5; use el proxy HTTP en el puerto 9000 con nombre de usuario y contraseña, o incluya la IP de su servidor en la lista blanca y use calcetines5://res.proxy-cyber.com:9001 sin credenciales.