Navegador de Impressão Digital Não Detectada Node.js: Puppeteer e Playwright
Expert in Web Scraping Technologies
TL;DR:
- No Node.js, o navegador é o que faz você ser detectado — não seu código. Puppeteer e Playwright controlam o Chromium através do Protocolo DevTools, e ambos se conectam a um navegador remoto com uma URL, então a solução é mudar onde o navegador é executado, não reescrever o script.
- Um navegador local em Node.js vaza automação em três eixos ao mesmo tempo: a flag
navigator.webdriver, uma impressão digital padrão headless e seu próprio IP de saída. Os detectores pontuam todos os três juntos, o que é a razão para que corrigir um de cada vez nunca funcione completamente. - Um endpoint serve ambas as bibliotecas.
wss://browser.scrapeless.com/api/v2/browseré um endpoint CDP —puppeteer.connect({ browserWSEndpoint })echromium.connectOverCDP()se conectam a ele e obtêm um verdadeiro Chromium, uma impressão digital limpa por sessão e saída residencial em mais de 195 países. - Escreva a conexão uma vez, reutilize em todos os lugares. Um único helper que constrói o endpoint mantém todos os scripts — Puppeteer ou Playwright — apontados para a mesma sessão gerenciada.
- Verificado ao vivo: tanto a conexão Puppeteer quanto a Playwright leram
navigator.webdrivercomofalsee retornaram o título verdadeiro da página de destino, e a execução Puppeteer relatou um IP de saída residencial dos EUA. - Gratuito para começar. Novas contas Scrapeless incluem o runtime gratuito do Scraping Browser — inscreva-se em app.scrapeless.com.
Introdução: o navegador é o indicativo, não o script
Uma pilha de scraping em Node.js geralmente começa local: instalar Puppeteer ou Playwright, iniciar o Chromium, controlar a página. Funciona até que o alvo comece a marcar o navegador. Então os mesmos três sinais aparecem independentemente de qual biblioteca você escolheu — o script anuncia automação através de a propriedade navigator.webdriver, a compilação headless envia fontes padrão e comportamento de canvas, e o tráfego sai de um IP que os serviços de reputação já conhecem.
Esses são problemas de nível de navegador e de rede, não problemas de lógica. Tanto Puppeteer quanto Playwright já sabem como se conectar a um navegador que não iniciaram — através de o Protocolo DevTools do Chrome — e o Scraping Browser da Scrapeless é exatamente isso: um endpoint CDP alcançado através de uma URL WebSocket. Direcione qualquer biblioteca para isso e a impressão digital, o comportamento e o IP de saída se movem para o lado do servidor enquanto seu código Node.js permanece no lugar.
O que você pode fazer com isso
- Mantenha sua biblioteca — Puppeteer e Playwright se conectam ao mesmo endpoint; sem reescrita.
- Execute contra sites protegidos por anti-bot — desafios são resolvidos durante a renderização, então a navegação alcança conteúdo.
- Localize a sessão — um valor de
proxyCountryescolhe a região de saída residencial. - Envie uma impressão digital consistente — um objeto
fingerprintmantém o agente do usuário, plataforma, tela e fuso horário coerentes. - Persistir estado — um
profileIdcarrega cookies e armazenamento local entre execuções. - Escale fora do seu laptop — sessões rodam na nuvem, então lotes não estão vinculados a um Chromium local.
Por que Scrapeless Scraping Browser
O Scrapeless Scraping Browser é um navegador em nuvem personalizável e anti-detectação, projetado para robôs da web e agentes de IA. Para uma pilha específica de Node.js, ele traz:
- Um Chromium real autodesenvolvido que executa JavaScript de página exatamente como o Chrome, então SPAs e desafios são resolvidos.
- Uma impressão digital consistente por sessão — sem indicação
navigator.webdriver, sem padrões headless vazando. - Saída residencial em mais de 195 países, selecionada por sessão com um único valor de
proxyCountry. - Uma superfície CDP para ambas as bibliotecas — Puppeteer e Playwright se conectam ao mesmo endpoint WebSocket.
- Persistência de sessão através de
profileId, então um fluxo autenticado mantém seu estado.
Obtenha sua chave API no plano gratuito em app.scrapeless.com.
Pré-requisitos
- Node.js 18 ou mais recente
puppeteer-coree/ouplaywright-core(ambos pulam o download do navegador local — você se conecta a um remoto)- Uma conta Scrapeless e chave API — inscreva-se em app.scrapeless.com
Todos os detalhes de conexão estão na documentação do Scraping Browser.
Instalar
Instale qualquer biblioteca que seu projeto já usa — ou ambas.
bash
npm install puppeteer-core playwright-core
export SCRAPELESS_API_KEY=your_api_token_here # chave gratuita em https://app.scrapeless.com
Escreva a conexão uma vez
O ponto final é o mesmo para ambas as bibliotecas, então construa-o em um só lugar. Cada opção — proxyCountry, fingerprint, profileId — é um parâmetro de consulta.
javascript
// scrapeless.js — um construtor de endpoint para todo o projeto
import { URLSearchParams } from "node:url";
export function scrapelessEndpoint(extra = {}) {
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180", // segundos
proxyCountry: "US",
...extra,
});
return `wss://browser.scrapeless.com/api/v2/browser?${params}`;
}
Caminho A — Puppeteer
O Puppeteer se conecta com puppeteer.connect(). A especificação W3C WebDriver exige que a automação em conformidade exponha a flag webdriver; o navegador em nuvem não a carrega.
javascript
import puppeteer from "puppeteer-core";
import { URLSearchParams } from "node:url";
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180",
proxyCountry: "US",
});
const endpoint = `wss://browser.scrapeless.com/api/v2/browser?${params}`;
const browser = await puppeteer.connect({ browserWSEndpoint: endpoint });
const page = await browser.newPage();
await page.goto("https://www.scrapeless.com/en", { waitUntil: "domcontentloaded", timeout: 60000 });
console.log("título do puppeteer:", await page.title());
console.log("puppeteer navigator.webdriver:", await page.evaluate(() => navigator.webdriver));
await browser.close();
Uma execução ao vivo imprimiu título do puppeteer: Ferramenta de Web Scraping Sem Esforço - Scrapeless e puppeteer navigator.webdriver: false, em um IP residencial dos EUA.
Obtenha sua chave API no plano gratuito: app.scrapeless.com
Caminho B — Playwright
O Playwright se conecta com chromium.connectOverCDP() ao mesmo ponto final. O código a seguir é o padrão do Playwright.
javascript
import { chromium } from "playwright-core";
import { URLSearchParams } from "node:url";
const params = new URLSearchParams({
token: process.env.SCRAPELESS_API_KEY,
sessionTTL: "180",
proxyCountry: "US",
});
const endpoint = `wss://browser.scrapeless.com/api/v2/browser?${params}`;
const browser = await chromium.connectOverCDP(endpoint);
const page = await browser.newPage();
await page.goto("https://www.scrapeless.com/en", { waitUntil: "domcontentloaded", timeout: 60000 });
console.log("título do playwright:", await page.title());
console.log("playwright navigator.webdriver:", await page.evaluate(() => navigator.webdriver));
await browser.close();
Uma execução ao vivo imprimiu título do playwright: Ferramenta de Web Scraping Sem Esforço - Scrapeless e playwright navigator.webdriver: false.
Escolhendo entre eles
O ponto final é idêntico, então escolha a biblioteca com suas próprias méritos, e não com base em qual delas evita a detecção — o navegador em nuvem cuida disso para ambos:
- Já está usando Puppeteer? Mude
puppeteer.launch()parapuppeteer.connect({ browserWSEndpoint }). Nada mais muda. - Já está usando Playwright? Mude
chromium.launch()parachromium.connectOverCDP(). Localizadores e espera automática permanecem inalterados. - Começando do zero? Os localizadores e a espera automática do Playwright são ergonômicos para fluxos complexos; o Puppeteer é mais enxuto quando você navega e lê. Ambos se conectam à mesma sessão.
Onde os navegadores locais do Node.js param
Executar o Chromium na sua própria máquina é bom para páginas abertas. A fricção começa onde o alvo pontua o navegador: um desafio intersticial que trava em um IP de datacenter, uma página que identifica as configurações padrão de headless, ou uma parede de login que deseja uma identidade estável durante as visitas. Esses são problemas de impressão digital, comportamento e IP — os três que o navegador em nuvem resolve no lado do servidor — e impactam o Puppeteer e o Playwright da mesma forma. Conectar-se ao Scrapeless entrega esses casos a uma sessão gerenciada enquanto seu código Node.js permanece idêntico.
O que você recebe de volta
Ambos os caminhos retornam um objeto de navegador normal para sua biblioteca — páginas do Puppeteer, localizadores do Playwright — e se comportam como qualquer sessão local. Algumas observações honestas:
navigator.webdriveréfalseem ambos, então a primeira verificação que um site executa parece um Chrome real.sessionTTLestá em segundos aqui — defina-o para cobrir todo o fluxo; a sessão se fecha quando expira.- O IP de saída corresponde ao
proxyCountry— páginas com geobloqueio se resolvem como um visitante local as vê. - Aqueça a sessão para páginas teimosas — carregue a homepage do site primeiro antes da página protegida, para que a superfície comportamental pareça uma visita normal.
Conclusão: um ponto final, qualquer biblioteca
Em Node.js, a superfície de detecção é o navegador, então a solução é mover o navegador — não reescrever o scraper. Crie o endpoint uma vez, depois puppeteer.connect() ou chromium.connectOverCDP() contra ele e mantenha o restante do seu código. Prenda proxyCountry a uma região residencial, passe uma fingerprint coerente e reutilize um profileId para fluxos autenticados. Para executar o mesmo navegador em nuvem a partir do Python, veja o guia de scraper de produção do Scrapling e compare planos na página de preços da Scrapeless.
Pronto para Construir Seu Pipeline de Scraping em Node.js?
Junte-se à nossa comunidade para reivindicar um plano gratuito e conectar-se com desenvolvedores que constroem pipelines de scraping em Node.js: Discord · Telegram.
Inscreva-se em app.scrapeless.com para obter um tempo de execução gratuito do Scraping Browser e aponte o Puppeteer ou Playwright para o navegador em nuvem que seus alvos não conseguem fingerprint.
FAQ
Q: Preciso escolher entre Puppeteer e Playwright?
Não. Ambos se conectam ao mesmo endpoint do Scrapeless — puppeteer.connect({ browserWSEndpoint }) ou chromium.connectOverCDP(). Use aquele que seu projeto já está utilizando, ou ambos.
Q: Eu mudo minha lógica de scraping?
Não. Você muda a forma como o navegador é obtido; navegação, seletores/localizadores e avaliação permanecem os mesmos.
Q: Por que pacotes -core?
puppeteer-core e playwright-core pulam o download do navegador empacotado porque você se conecta ao navegador em nuvem em vez de iniciar um local.
Q: Eu preciso de um proxy?
Não. A saída residencial é integrada — defina proxyCountry para uma região ou ANY.
Q: É legal fazer web scraping com Node.js?
Acessar dados publicamente disponíveis é geralmente permitido, mas as regras variam de acordo com a jurisdição e o site. Revise os termos de serviço do alvo, respeite as diretrizes de robôs e consulte um advogado para qualquer coisa sensível.
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.



