Respuesta rápida
¿Cómo configuro un proxy estático en Playwright?
Para un proxy estático en Playwright, pasa un proxy con servidor, usuario y contraseña a chromium.launch(), o da a cada contexto de navegador su propio proxy para ejecutar varias IPs estáticas en un solo navegador. Luego abre api.ipify.org para comprobar la IP de salida. Las IPs estáticas SteadyProxy se alquilan por 30 días, desde 2,24 US$ por IP a fecha de octubre de 2026, sin KYC y con pago en cripto.
¿Cuáles son los datos clave?
| Opción de lanzamiento | proxy = servidor, usuario, contraseña (login de proxy HTTP) |
|---|---|
| Según el contexto | browser.newContext({ proxy }) asigna a cada contexto su propia IP estática |
| SOCKS5 | Compatible con Playwright; la documentación describe usuario y contraseña para proxies HTTP(S), así que combina SOCKS5 con la lista de IPs permitidas |
| Autenticación SteadyProxy | Usuario y contraseña, o una lista blanca de IP (hasta 10 IPs) |
| Comprobar | api.ipify.org para la IP de salida, ipinfo.io/json para la red |
| Comprobaciones del código | Python pasó py_compile y Node.js pasó node --check el 19 de octubre de 2026 (Playwright 1.60) |
¿Cómo configuro un proxy estático en Playwright para Python?
Configura el proxy al lanzar el navegador cuando todo el navegador deba usar una única IP estática. El servidor es la dirección HTTP de tu IP, http://host:port; el usuario y la contraseña van en sus propios campos, no en la URL. Playwright responde por ti a la solicitud de inicio de sesión del proxy, así que no aparece ningún cuadro de acceso. El ejemplo abre api.ipify.org y luego ipinfo.io/json, e imprime ambos.
"""Playwright (Python) through one static proxy.
Install: python -m pip install playwright && python -m playwright install chromium
"""
import os
from playwright.sync_api import sync_playwright
PROXY = {
"server": "http://" + os.environ.get("PROXY_HOST", "gw.steadyproxy.com") + ":"
+ os.environ.get("PROXY_PORT", "7777"),
"username": os.environ.get("PROXY_USER", "USERNAME"),
"password": os.environ.get("PROXY_PASS", "PASSWORD"),
}
with sync_playwright() as p:
browser = p.chromium.launch(proxy=PROXY)
context = browser.new_context()
page = context.new_page()
page.goto("https://api.ipify.org?format=json", timeout=30000)
print("Exit IP:", page.inner_text("body"))
page.goto("https://ipinfo.io/json", timeout=30000)
print("Network:", page.inner_text("body"))
browser.close()
¿Cómo uso varias IPs estáticas en un mismo navegador Playwright?
Crea un contexto de navegador por cada IP. La documentación de Playwright indica que se puede definir un proxy para todo el navegador o para cada contexto de navegador por separado. Los contextos no comparten cookies ni almacenamiento, así que cada uno funciona como un perfil independiente con su propia IP. El ejemplo de Node.js recorre dos IPs, abre api.ipify.org en cada contexto y cierra el contexto tras su uso. Rellena la lista con el host, el puerto, el usuario y la contraseña de cada IP desde tu panel.
// Playwright (Node.js): one browser, one context per static IP.
// Install: npm i playwright && npx playwright install chromium
import { chromium } from 'playwright';
// Copy host, port, username and password of each IP from your dashboard.
const staticIps = [
{ name: 'client-a', host: 'gw.steadyproxy.com', port: '7777', username: 'USERNAME', password: 'PASSWORD' },
{ name: 'client-b', host: 'gw.steadyproxy.com', port: '7777', username: 'USERNAME', password: 'PASSWORD' },
];
const browser = await chromium.launch();
try {
for (const ip of staticIps) {
const context = await browser.newContext({
proxy: { server: `http://${ip.host}:${ip.port}`, username: ip.username, password: ip.password },
});
const page = await context.newPage();
await page.goto('https://api.ipify.org?format=json', { timeout: 30000 });
console.log(ip.name, await page.innerText('body'));
await context.close();
}
} finally {
await browser.close();
}
¿Debo usar HTTP o SOCKS5 en Playwright?
En la mayoría de los casos, usa el puerto HTTP con usuario y contraseña. Es la combinación que describe la documentación de Playwright para el inicio de sesión del proxy, y las páginas HTTPS viajan por un túnel CONNECT. Usa SOCKS5 con un servidor socks5:// solo cuando tu máquina esté en la lista de IPs permitidas, de modo que no haga falta iniciar sesión. Ambos puertos de una misma IP estática dan la misma IP de salida. SteadyProxy es compatible con HTTP, HTTPS (CONNECT) y SOCKS5.
¿Cómo mantengo las sesiones entre ejecuciones en la misma IP estática?
Guarda el estado de almacenamiento del contexto después de iniciar sesión y cárgalo la próxima vez con el mismo proxy. En Python, context.storage_state(path='client-a.json') escribe las cookies y el almacenamiento local; browser.new_context(storage_state='client-a.json', proxy=...) los restaura. Mantén un archivo de estado por IP y por cuenta, y nunca cargues el estado de una cuenta en la IP de otra cuenta. Trata estos archivos como secretos.
¿Qué es lo que falla con más frecuencia?
Cuatro errores cubren la mayoría de los casos. ERR_PROXY_CONNECTION_FAILED significa que el host o el puerto son incorrectos o están bloqueados en tu lado. Una respuesta 407 significa un inicio de sesión incorrecto, o una IP de origen que falta en tu lista de permitidas. ERR_TUNNEL_CONNECTION_FAILED significa que el proxy rechazó el destino; revisa la lista de bloqueados: Sitios bancarios, gubernamentales, de portales de pago y de venta de entradas, además de los puertos SMTP (envío de correo) 25, 465 y 587. Un tiempo de espera agotado en todas las páginas apunta a un fallo en la IP; pruébala con curl y luego contacta con soporte.
¿Qué más pregunta la gente sobre Playwright y los proxies estáticos?
¿Puedo poner el usuario y la contraseña en la URL del servidor?
Usa mejor los campos separados de usuario y contraseña. Son la forma documentada de iniciar sesión en un proxy HTTP en Playwright y evitan problemas de codificación de URL con caracteres especiales. El campo del servidor entonces contiene solo el esquema, el host y el puerto de tu IP estática.
¿Cada página de Playwright recibe su propia IP?
No. Las páginas heredan el proxy de su contexto, y los contextos heredan el proxy del navegador a menos que definan el suyo propio. Todas las páginas de un contexto comparten una única IP estática. Para varias IPs, crea varios contextos, como en el ejemplo de Node.js, o varios navegadores.
¿Puedo usar Firefox o WebKit con un proxy estático en Playwright?
Sí. La opción proxy tiene la misma forma en los lanzamientos de chromium, firefox y webkit. Prueba cada motor con api.ipify.org, porque los motores difieren en cómo gestionan algunos errores de proxy. Para QA entre motores, mantén la misma IP estática para cada motor para que los resultados sigan siendo comparables.
¿Debo ajustar el idioma y la zona horaria para que coincidan con la IP?
Para QA local y pruebas de geolocalización, sí: browser.new_context(locale='de-DE', timezone_id='Europe/Berlin') hace que tu sitio se muestre como lo haría para un visitante local. Cambia lo que solicita tu navegador de pruebas, no la IP, que sigue decidiendo el país que detecta tu sitio. Consulta QA de geolocalización para planes de prueba.
¿Cómo compruebo que cada contexto usa la IP correcta?
Abre api.ipify.org primero en cada contexto nuevo y compara la respuesta con la lista de IPs de tu panel. Haz fallar la ejecución si no coincide. El coste es una petición ligera por contexto, y evita que toda una ejecución salga por la IP equivocada.
¿Cuánto cuesta ejecutar 10 contextos de Playwright en 10 IPs estáticas?
A octubre de 2026, 10 IPs ISP cuestan 20,86 US$ y 10 IPs dedicadas de datacenter cuestan 12,69 US$, cada una por 30 días. La facturación es por IP, no por GB. El pago es con criptomonedas, sin KYC. Consulta precios para todos los tamaños de plan.
¿Qué fuentes usa esta guía? (3)
- Red: proxy HTTP (Python) — Playwright (2026-10-19)
- Red: proxy HTTP (Node.js) — Playwright (2026-10-19)
- API de ipify — ipify (2026-10-19)