Geonode logo
Carl Gamutan

Carl Gamutan

Atualizado: 7 de outubro de 2026

Publicado: 8 de abril de 2022

Como utilizar proxies com o Puppeteer

O Puppeteer é uma biblioteca Node.js que disponibiliza aos seus utilizadores uma API de alto nível para o Chrome sem interface gráfica. Eis como criar um servidor proxy para a mesma!

Por que é que o Puppeteer precisa de um proxy

Os proxies para o Puppeteer permitem que a ferramenta se ligue através de um endereço IP diferente, em vez de utilizar sempre o IP do computador onde está a ser executada. Isto é útil para tarefas baseadas na localização, testes, monitorização e outras tarefas em que a origem da ligação é importante.

O Puppeteer continua a tratar da tarefa principal. O proxy trata da origem da ligação.

O que acontece sem um proxy: bloqueios de IP, limites de taxa e restrições geográficas

Sem um proxy, os sites continuam a ver o mesmo IP. À medida que a atividade aumenta, esse IP pode atingir um limite de taxa ou ser bloqueado.

A localização também pode ser importante. Uma página aberta a partir da Alemanha pode não apresentar o mesmo conteúdo que uma aberta a partir dos EUA.

Um proxy para o Puppeteer permite estabelecer ligações a partir de diferentes endereços IP e localizações, quando necessário.

Que tipo de proxy utilizar com o Puppeteer

O tipo de proxy adequado depende da tarefa.

Tipo de proxyRecolha de dadosGestão de contasTestesMonitorização
ResidencialAdequado quando a localização e a origem do IP são importantesÚtil quando as contas necessitam de IPs residenciaisAdequado para testes baseados na localizaçãoÚtil para verificar conteúdos a partir de diferentes localizações
ISPAdequado quando é necessário um IP estávelÚtil para sessões mais longas num único IPAdequado para testes com um IP consistenteÚtil para verificações contínuas a partir do mesmo IP
Centro de dadosAdequado para velocidade e maiores volumes de pedidosMelhor quando não são necessários IPs residenciaisAdequado para testes geraisAdequado para verificações automatizadas frequentes

Os proxies residenciais são úteis quando a origem do IP e a localização são importantes. Os proxies de ISP funcionam bem quando é necessário que o mesmo IP permaneça ativo por mais tempo. Os proxies de centro de dados fazem sentido quando o foco principal é a velocidade e a escala.

A melhor opção depende também de a tarefa exigir segmentação geográfica, uma ligação estável ou acesso a um conjunto maior de IPs.

Como ligar um proxy no Puppeteer

A configuração do proxy no Puppeteer requer o host Geonode, a porta, o nome de utilizador e a palavra-passe. Guarde as credenciais em variáveis de ambiente e, em seguida, carregue-as ao configurar o proxy no código.

Está a utilizar o Geonode? Obtenha o nome de utilizador e a palavra-passe em Credenciais de Acesso e o host, a porta e o protocolo em Informações do Servidor Proxy.

Caminho das definições ou código

No caso do Puppeteer, indique o host e a porta do proxy através de --proxy-server

ao iniciar o navegador:

import puppeteer from "puppeteer";
import "dotenv/config";

const browser = await puppeteer.launch({
  headless: true,
  args: [
    `--proxy-server=http://${process.env.GEONODE_PROXY_HOST}:${process.env.GEONODE_PROXY_PORT}`,
  ],
});

Em seguida, crie a página e forneça as credenciais do proxy:

const page = await browser.newPage();

await page.authenticate({
  username: process.env.GEONODE_PROXY_USER,
  password: process.env.GEONODE_PROXY_PASS,
});

Mantenha o nome de utilizador e a palavra-passe reais em variáveis de ambiente, em vez de os colocar diretamente no ficheiro-fonte. Esta configuração devolveu com sucesso um código de estado HTTP 200 através do proxy no nosso teste.

O formato de autenticação host:porta:utilizador:palavra-passe

Geonode

fornece-lhe quatro valores:

proxy.geonode.io:PORT:USERNAME:PASSWORD

Para o Puppeteer, mantenha os valores separados. Armazene-os em variáveis de ambiente:

GEONODE_PROXY_HOST=proxy.geonode.io
GEONODE_PROXY_PORT=9000
GEONODE_PROXY_USER=USERNAME
GEONODE_PROXY_PASS=PASSWORD

Carregue o host e a porta através de --proxy-server

e, em seguida, autentique a página:

const browser = await puppeteer.launch({
  headless: true,
  args: [
    `--proxy-server=http://${process.env.GEONODE_PROXY_HOST}:${process.env.GEONODE_PROXY_PORT}`,
  ],
});

const page = await browser.newPage();

await page.authenticate({
  username: process.env.GEONODE_PROXY_USER,
  password: process.env.GEONODE_PROXY_PASS,
});

Testámos isto com credenciais válidas e recebemos um código de estado HTTP 200. Com uma palavra-passe incorreta, o proxy devolveu um código de estado HTTP 407 e:

Authentication error. Please check your authentication settings.

Rotação vs. sessão fixa no Puppeteer

Se as solicitações não precisarem de manter o mesmo IP, utilize a rotação.

Para o nosso teste, iniciámos o Puppeteer com a porta HTTP em rotação:

const browser = await puppeteer.launch({
  headless: true,
  args: ["--proxy-server=http://proxy.geonode.io:9000"],
});

const page = await browser.newPage();

await page.authenticate({
  username: process.env.GEONODE_PROXY_USER,
  password: process.env.GEONODE_PROXY_PASS,
});

Efetuámos cinco solicitações utilizando sessões de navegador novas:

Request 1: 108.31.182.167
Request 2: 45.186.93.125
Request 3: 109.254.131.42
Request 4: 109.153.11.141
Request 5: 37.113.173.139

IPs únicos: 5

Rotação: Sim

Todas as cinco solicitações devolveram IPs diferentes neste teste. Isso confirma que a rotação funcionou durante a execução, mas não garante um novo IP para todas as solicitações futuras.

Se as solicitações relacionadas precisarem de permanecer no mesmo IP, utilize uma sessão fixa. Utilize a porta fixa e adicione os detalhes da sessão ao nome de utilizador:

const browser = await puppeteer.launch({
  headless: true,
  args: ["--proxy-server=http://proxy.geonode.io:10000"],
});

const page = await browser.newPage();

await page.authenticate({
  username:
    `${process.env.GEONODE_PROXY_USER}-session-blogpuppeteer01-lifetime-10`,
  password: process.env.GEONODE_PROXY_PASS,
});

Fizemos três solicitações utilizando a mesma sessão:

Request 1: 178.64.64.40
Request 2: 178.64.64.40
Request 3: 178.64.64.40

Mesmo IP: Sim

Todas as três solicitações utilizaram o mesmo IP.

Consulte os guias do Geonode

sobre proxies rotativos e sessões fixas para conhecer as definições disponíveis.

Erros comuns de proxy no Puppeteer e como resolvê-los

Se o proxy não estiver a funcionar, comece por verificar os detalhes da ligação. Verifique o nome de utilizador e a palavra-passe e, em seguida, o host, a porta e o protocolo. O erro apresentado pelo Puppeteer pode, normalmente, ajudar a identificar a origem do problema.

407 Autenticação do proxy necessária

Um código de erro 407 indica normalmente um problema de autenticação.

Quando testámos o Puppeteer com uma palavra-passe incorreta, o proxy devolveu:

HTTP status: 407
Authentication error. Please check your authentication settings.

Verifique primeiro o nome de utilizador e a palavra-passe. Se estiverem corretos, certifique-se de que page.authenticate() é chamado após a criação da página.

ERR_TUNNEL_CONNECTION_FAILED / ligação recusada

Um erro de ligação significa, normalmente, que o Puppeteer não conseguiu aceder ao proxy.

Verifique primeiro o host e a porta. Em seguida, certifique-se de que o protocolo corresponde ao do servidor proxy que está a ser utilizado.

No nosso teste de falha de ligação, o Puppeteer não devolveu «ERR_TUNNEL_CONNECTION_FAILED

». Ao utilizar uma porta de proxy inacessível, foi devolvido: «

net::ERR_CONNECTION_RESET at http://ip-api.com/json

». O erro exato do Chromium pode, portanto, variar consoante a forma como a ligação falha.

Tempos de espera e respostas vazias

Um tempo de espera significa que a página não recebeu uma resposta dentro do tempo configurado.

Em primeiro lugar, verifique se o URL de destino funciona e se o proxy consegue estabelecer ligação. Se ambos estiverem a funcionar, verifique o tempo limite passado para ``page.goto()`

`.

Para o nosso teste, utilizámos um proxy não roteável com um tempo limite de cinco segundos:

await page.goto(url, {
  timeout: 5000,
});

O Puppeteer devolveu:

TimeoutError: Navigation timeout of 5000 ms exceeded

Definir um tempo limite explícito pode ajudar um script a falhar rapidamente quando a ligação ao proxy fica bloqueada.

ERR_NO_SUPPORTED_PROXIES

Um problema específico do Puppeteer que detetámos foi colocar o nome de utilizador e a palavra-passe diretamente dentro de ``--proxy-server`

`.

Esta configuração falhou:

--proxy-server=http://USERNAME:PASSWORD@proxy.geonode.io:9000

O Puppeteer devolveu:

net::ERR_NO_SUPPORTED_PROXIES

A solução consiste em passar apenas o servidor proxy através do argumento de lançamento:

args: ["--proxy-server=http://proxy.geonode.io:9000"]

Em seguida, efetue a autenticação separadamente:

await page.authenticate({
  username: process.env.GEONODE_PROXY_USER,
  password: process.env.GEONODE_PROXY_PASS,
});

Após alterar a configuração, o pedido foi bem-sucedido com o código HTTP 200.

Puppeteer + Geonode: o que obtém

O Puppeteer gere os pedidos ou as ligações na aplicação. O Geonode gere a ligação através do proxy.

Pode escolher proxies residenciais, de ISP ou de centro de dados consoante a tarefa e, em seguida, utilizar rotação, sessões fixas e segmentação geográfica sempre que necessário. Isto mantém a configuração do proxy separada do resto do código da aplicação.

Os planos variam consoante o tipo de proxy, com algumas opções com preços por GB.

Perguntas Frequentes

O Puppeteer suporta proxies do tipo «SOCKS5»?

O SOCKS5 autenticado não funcionou com a configuração do Puppeteer que testámos.

Tentámos a porta rotativa SOCKS5 do Geonode com page.authenticate(), mas o Puppeteer devolveu:

net::ERR_SOCKS_CONNECTION_FAILED

Também tentámos incorporar as credenciais em --proxy-server, o que devolveu:

net::ERR_NO_SUPPORTED_PROXIES

Como nenhuma das configurações testadas do SOCKS5 autenticado funcionou, a configuração HTTP verificada com --proxy-server e page.authenticate() é a opção mais segura para esta configuração.

Posso alternar os endereços IP por pedido no Puppeteer?

Sim, o Puppeteer pode utilizar um proxy rotativo quando o navegador é iniciado através da configuração do proxy rotativo.

No nosso teste, cinco sessões novas do navegador devolveram cinco endereços IP diferentes. Isso confirma que a rotação ocorreu durante o teste, mas não é garantido que haja um endereço IP diferente para cada pedido ou sessão do navegador.

Existe um período de teste gratuito?

Sim. O Geonode oferece um período de teste gratuito, pelo que o proxy pode ser testado com o Puppeteer antes de se passar para um plano pago. Consulte o período de teste gratuito atual e os planos.

Onde devo configurar o proxy no Puppeteer?

Defina o host e a porta do proxy em puppeteer.launch()

utilizando --proxy-server

.

Em seguida, chame page.authenticate()

após criar cada página para fornecer o nome de utilizador e a palavra-passe:

const browser = await puppeteer.launch({
  args: ["--proxy-server=http://proxy.geonode.io:9000"],
});

const page = await browser.newPage();

await page.authenticate({
  username: process.env.GEONODE_PROXY_USER,
  password: process.env.GEONODE_PROXY_PASS,
});

Esta foi a configuração que funcionou nos nossos testes.

Devo introduzir o nome de utilizador e a palavra-passe do proxy em --proxy-server?

Não. Mantenha as credenciais separadas ao utilizar esta configuração do Puppeteer.

Ao incorporar USERNAME:PASSWORD@ diretamente em --proxy-server, obtivemos ERR_NO_SUPPORTED_PROXIES no nosso teste. Ao passar apenas o host e a porta nesse local e, em seguida, utilizar page.authenticate() para as credenciais, o processo funcionou com sucesso.