Ejecutar varias cuentas en una automatización suele empezar de la forma más cara: un navegador completo por cuenta. Playwright tiene una función que lo resuelve con menos memoria, los contextos, y acepta un proxy distinto en cada uno. Puedes tener diez cuentas independientes en el mismo proceso, cada una con su propia sesión y su propia IP.
Qué es un contexto en Playwright
Un contexto es una sesión aislada dentro del mismo navegador. Cada contexto tiene sus propias cookies, almacenamiento local y sesión, como si fuera un perfil separado. Una cuenta con sesión iniciada en un contexto no aparece en otro.
Lo que el contexto no aísla por sí solo es la red: sin configuración, todos salen por la misma IP de la máquina. Ahí entra el proxy por contexto.
Proxy global o por contexto
La documentación de Playwright prevé las dos formas:
Global: todo el navegador sale por el mismo proxy:
const browser = await chromium.launch({
proxy: {
server: 'http://host:puerto',
username: 'usuario',
password: 'contrasena',
},
});
Por contexto: cada sesión con su propia IP:
const browser = await chromium.launch();
const contextoA = await browser.newContext({
proxy: { server: 'http://host-a:puerto', username: 'usuario-a', password: 'contrasena-a' },
});
const contextoB = await browser.newContext({
proxy: { server: 'http://host-b:puerto', username: 'usuario-b', password: 'contrasena-b' },
});
Así, la cuenta del contexto A sale por una dirección y la del contexto B por otra, dentro del mismo navegador.
Un patrón para varias cuentas
Mantén la relación cuenta → proxy en un solo lugar, en lugar de repartir credenciales por el código:
const cuentas = [
{ nombre: 'cliente-a', proxy: { server: 'http://host-a:puerto', username: 'u-a', password: 'c-a' } },
{ nombre: 'cliente-b', proxy: { server: 'http://host-b:puerto', username: 'u-b', password: 'c-b' } },
];
for (const cuenta of cuentas) {
const contexto = await browser.newContext({
proxy: cuenta.proxy,
storageState: `./sesiones/${cuenta.nombre}.json`,
});
// abrir las páginas de la cuenta en este contexto
}
storageState guarda la sesión de cada cuenta en su propio archivo, así que en el siguiente inicio de sesión cada cuenta vuelve con sus cookies y por la misma IP. Cómo guardar y reutilizar esa sesión sin iniciar sesión cada vez está en automatización con sesión e IP fija.
Errores que vuelven a juntar las cuentas
Proxy global y cuentas distintas. Configurar el proxy solo en launch hace que todos los contextos salgan por la misma dirección. Para cuentas independientes, el proxy va en cada newContext.
Reutilizar el storageState entre cuentas. Cargar la sesión de una cuenta en el contexto de otra mezcla cookies e identidades.
Cambiar el proxy de la cuenta en cada ejecución. La cuenta pasa a entrar desde un lugar distinto en cada ronda. Fija el par cuenta → IP.
Credenciales en la URL del servidor. Pon usuario y contraseña en los campos username y password, no incrustados en server. El porqué está en la guía de proxy en la automatización de navegadores.
Creer que el contexto resuelve la huella digital. El contexto aísla la sesión y la red, pero los contextos siguen compartiendo características del mismo navegador. En cuentas sensibles, eso también pesa; lo explicamos en navegador antidetect y fingerprint.
Valida antes de iniciar sesión
Antes de abrir la cuenta en cada contexto, confirma la IP de salida:
const pagina = await contexto.newPage();
await pagina.goto('https://api.ipify.org');
console.log(cuenta.nombre, await pagina.textContent('body'));
Cada cuenta debe mostrar una dirección distinta, y siempre la misma para la misma cuenta.
Lo que el proxy por contexto no resuelve
Separa la red y la sesión, nada más. No cambia la huella digital, no controla el ritmo de las acciones y no convierte en permitida una automatización que los términos de la plataforma prohíben; se aplica nuestra política de uso aceptable.
Qué tipo de IP usar
- Cuentas con inicio de sesión → IPv4 dedicada, o ISP si la cuenta es sensible al datacenter. Una por contexto, del país de la cuenta.
- Recogida sin inicio de sesión → residencial rotativo por GB (en ProxyBox, IP de Brasil) o un lote de IP en rotación, sin necesidad de fijar la IP por contexto.
Cuántas IP dimensionar, HTTP o SOCKS5 y buenas prácticas de automatización están en proxy para automatización.