Rodar várias contas em automação costuma começar do jeito mais caro: um navegador inteiro por conta. O Playwright tem um recurso que resolve isso com menos memória — contextos — e aceita um proxy diferente em cada um. Dá para ter dez contas independentes no mesmo processo, cada uma com sessão e IP próprios.
O que é um contexto no Playwright
Um contexto é uma sessão isolada dentro do mesmo navegador. Cada contexto tem cookies, armazenamento local e sessão próprios, como se fosse um perfil separado. Uma conta logada num contexto não aparece no outro.
O que o contexto não isola sozinho é a rede: sem configuração, todos saem pelo mesmo IP da máquina. É aí que entra o proxy por contexto.
Proxy global ou por contexto
A documentação do Playwright prevê as duas formas:
Global — todo o navegador sai pelo mesmo proxy:
const browser = await chromium.launch({
proxy: {
server: 'http://host:porta',
username: 'usuario',
password: 'senha',
},
});
Por contexto — cada sessão com o próprio IP:
const browser = await chromium.launch();
const contextoA = await browser.newContext({
proxy: { server: 'http://host-a:porta', username: 'usuario-a', password: 'senha-a' },
});
const contextoB = await browser.newContext({
proxy: { server: 'http://host-b:porta', username: 'usuario-b', password: 'senha-b' },
});
Com isso, a conta do contexto A sai por um endereço e a do contexto B por outro, dentro do mesmo navegador.
Um padrão para várias contas
Mantenha a relação conta → proxy num só lugar, em vez de espalhar credenciais pelo código:
const contas = [
{ nome: 'cliente-a', proxy: { server: 'http://host-a:porta', username: 'u-a', password: 's-a' } },
{ nome: 'cliente-b', proxy: { server: 'http://host-b:porta', username: 'u-b', password: 's-b' } },
];
for (const conta of contas) {
const contexto = await browser.newContext({
proxy: conta.proxy,
storageState: `./sessoes/${conta.nome}.json`,
});
// abrir páginas da conta neste contexto
}
O storageState salva a sessão de cada conta num arquivo próprio, então no próximo login cada conta volta com os cookies dela e pelo mesmo IP.
Erros que juntam as contas de novo
Proxy global e contas diferentes. Configurar o proxy só no launch faz todos os contextos saírem pelo mesmo endereço. Para contas independentes, o proxy vai em cada newContext.
Reaproveitar o storageState entre contas. Carregar a sessão de uma conta no contexto de outra mistura cookies e identidades.
Trocar o proxy da conta a cada execução. A conta passa a acessar de um lugar diferente a cada rodada. Fixe o par conta → IP.
Credencial na URL do servidor. Coloque usuário e senha nos campos username e password, não embutidos em server. O porquê está no guia de proxy em automação de navegador.
Achar que o contexto resolve impressão digital. O contexto isola sessão e rede, mas os contextos continuam compartilhando características do mesmo navegador. Para contas sensíveis, isso também pesa — ver navegador antidetect e fingerprint.
Valide antes de logar
Antes de abrir a conta em cada contexto, confirme o IP de saída:
const pagina = await contexto.newPage();
await pagina.goto('https://api.ipify.org');
console.log(conta.nome, await pagina.textContent('body'));
Cada conta deve mostrar um endereço diferente, e sempre o mesmo para a mesma conta.
Qual tipo de IP usar
- Contas com login → IPv4 dedicado, ou ISP se a conta é sensível a datacenter. Um por contexto.
- Coleta sem login → residencial rotativo por GB, sem necessidade de fixar o IP por contexto.
- Agente de IA que navega pelo Playwright → residencial por GB com sessão fixa durante a tarefa, ou IP fixo quando a tarefa envolve login. A página de proxy para agentes de IA separa os três trabalhos do agente: navegar, coletar e operar conta.
Quantos IPs dimensionar, HTTP ou SOCKS5 e boas práticas de automação estão em proxy para automação.