🎯 Um navegador em nuvem personalizável e anti-detecção alimentado por Chromium desenvolvido internamente, projetado para rastreadores web e agentes de IA. 👉Experimente agora
De volta ao blog

Como Resolver o Cloudflare com Node.js (Puppeteer + Scrapeless)

Ethan Brown
Ethan Brown

Advanced Bot Mitigation Engineer

09-Jul-2026

TL;DR:

  • A Cloudflare avalia o navegador, não o visitante. Ele lê a consistência da impressão digital, sinais comportamentais e o IP de saída, e então define um cookie cf_clearance para um navegador em que confia — portanto, limpá-lo no Node.js significa ser um navegador confiável, não resolver um quebra-cabeça.
  • Um navegador local em Node.js falha nessa avaliação em três eixos: o navigator.webdriver, uma impressão digital de padrão headless, e um IP de saída de datacenter. Empilhar plugins stealth para corrigir todos os três é uma esteira de manutenção.
  • O Scrapeless Scraping Browser limpa o desafio durante a renderização — Chromium desenvolvido internamente, uma impressão digital consistente por sessão e saída residencial em mais de 195 países, acessada através de um único ponto de extremidade WebSocket.
  • Seu Node.js continua sendo o Puppeteer padrão. Conecte-se com puppeteer.connect(), aguarde o conteúdo pós-desafio e leia a página — a única alteração é a URL de conexão.
  • Verificado ao vivo: uma sessão do Puppeteer sobre o navegador em nuvem limpou a página de desafio do Cloudflare, leu o marcador de sucesso Você contornou o desafio do Cloudflare! :D e recebeu um cookie cf_clearance.
  • Grátis para começar. Novas contas Scrapeless incluem tempo de execução gratuito do Scraping Browser — inscreva-se em app.scrapeless.com.

Um desafio do Cloudflare não é um CAPTCHA de imagem que você decodifica. Ele roda em segundo plano e avalia o navegador que carregou a página — se a impressão digital é internamente consistente, se os sinais de interação parecem humanos e se o IP de saída tem uma reputação limpa. Quando a pontuação é aprovada, o Cloudflare define um cookie cf_clearance e a página real carrega. Quando não, você recebe um intersticial em vez de conteúdo.

Isso reformula a tarefa do Node.js. Não há resposta a enviar — o trabalho é apresentar um navegador que o Cloudflare já confia. Um Chromium headless local impulsionado pelo Puppeteer não pode: ele anuncia automação através da propriedade navigator.webdriver, usa fontes e comportamento de canvas padrão headless, e sai de um IP que os serviços de reputação já conhecem. Você pode adicionar um plugin stealth e continuar corrigindo à medida que o Chromium e os detectores avançam. Este guia segue o caminho mais curto: dirija o Scrapeless Scraping Browser a partir do Puppeteer padrão, de modo que a impressão digital, o comportamento e o IP de saída sejam tratados no lado do servidor e o desafio seja limpo durante uma renderização normal.


O que o Cloudflare realmente verifica

A própria documentação do Cloudflare descreve um passo de verificação que ocorre sem interromper o visitante. Na prática, ele avalia três coisas e concede um cookie cf_clearance — um padrão cookie HTTP — quando eles passam:

O que o Cloudflare lê Por que um navegador local em Node.js falha
Consistência da impressão digital padrões headless e a flag webdriver contradizem um Chrome real
Sinais comportamentais temporização scriptada sem uma superfície de navegador coerente
Reputação do IP de saída IPs de datacenter têm pontuação pior do que os residenciais

Um navegador coerente e confiável é mais importante do que qualquer evasão única — por isso, mover os três para o lado do servidor é mais durável do que empilhar plugins stealth.

Por que Scrapeless Scraping Browser

O Scrapeless Scraping Browser é um navegador em nuvem personalizável e anti-detecção projetado para crawlers da web e agentes de IA. Para o Cloudflare especificamente, ele traz:

  • Chromium realmente desenvolvido internamente que executa o JavaScript do desafio exatamente como o Chrome, portanto, ele é resolvido em vez de travar.
  • Uma impressão digital consistente por sessão — sem o sinal navigator.webdriver, sem padrões headless vazando.
  • Saída residencial em mais de 195 países — o Cloudflare avalia o IP de saída, e uma região residencial é vista como limpa onde um IP de datacenter não é.
  • Persistência de sessão para que um concessão cf_clearance possa ser reutilizada em solicitações na mesma sessão.
  • Uma superfície de conexão — cada opção é um parâmetro de consulta no mesmo ponto de extremidade WebSocket.

Obtenha sua chave de API no plano gratuito em app.scrapeless.com.


Pré-requisitos

  • Node.js 18 ou mais recente
  • puppeteer-core instalado (não é necessário Chromium empacotado — você se conecta a um remoto)
  • Uma conta Scrapeless e chave de API — inscreva-se em app.scrapeless.com
    Todos os detalhes de conexão ao vivo estão na documentação do Scraping Browser.

Instalar

Você se conecta a um navegador remoto, então puppeteer-core (sem Chromium embutido) é tudo o que você precisa.

bash Copy
npm install puppeteer-core
export SCRAPELESS_API_KEY=seu_token_api_aqui   # chave gratuita em https://app.scrapeless.com

Conectar e limpar o desafio

Construa o endpoint, conecte-se com puppeteer.connect(), navegue e aguarde o conteúdo pós-desafio se anexar. O desafio é resolvido durante a renderização — não há uma chamada separada para resolver.

javascript Copy
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 TARGET = "https://www.scrapingcourse.com/cloudflare-challenge";

const browser = await puppeteer.connect({ browserWSEndpoint: endpoint });
const page = await browser.newPage();
await page.goto(TARGET, { waitUntil: "domcontentloaded", timeout: 90000 });

// O navegador em nuvem limpa o Cloudflare durante a renderização; aguarde o conteúdo real.
await page.waitForSelector("#challenge-title", { timeout: 90000 });
console.log("limpo:", await page.$eval("#challenge-title", (el) => el.innerText));

const cookies = await page.cookies();
console.log("cf_clearance:", cookies.some((c) => c.name === "cf_clearance"));
await browser.close();

Uma execução ao vivo deste script imprimiu limpo: Você contornou o desafio do Cloudflare! :D e cf_clearance: true — Puppeteer padrão, obtido através do navegador em nuvem.

Obtenha sua chave de API no plano gratuito: app.scrapeless.com

Confirmar a passagem e manter a liberação

O sinal confiável é o conteúdo real se anexando — uma vez que o elemento pós-desafio esteja presente, a página foi limpa. O Cloudflare também define um cookie cf_clearance na sessão aprovada, que você pode ler para manter a liberação em outras solicitações na mesma sessão. A especificação W3C WebDriver exige que a automação conformante exponha a bandeira webdriver; o navegador em nuvem não a transporta, razão pela qual a primeira verificação aparece limpa.

javascript Copy
const cookies = await page.cookies();
const clearance = cookies.find((c) => c.name === "cf_clearance");
console.log("cf_clearance presente:", Boolean(clearance));
if (clearance) console.log("domínio:", clearance.domain);

Fixar a região para uma liberação confiável

O Cloudflare pontua o IP de saída, então fixe proxyCountry a uma região residencial. Altere para qualquer código de país ISO.

javascript Copy
const params = new URLSearchParams({
  token: process.env.SCRAPELESS_API_KEY,
  sessionTTL: "180",
  proxyCountry: "US",   // ou "DE", "JP", "QUALQUER"
});

Um scraper Puppeteer local funciona até que o Cloudflare comece a pontuar o navegador. Então a impressão digital sem cabeça, a bandeira webdriver e o IP do datacenter falham em uma verificação diferente, e o intersticial substitui o conteúdo. Esses são problemas de impressão digital, comportamento e IP — os três que o navegador em nuvem trata no lado do servidor. Conectar-se ao Scrapeless entrega-os a uma sessão gerenciada enquanto seu código Puppeteer permanece padrão.


O que você recebe de volta

A sessão se comporta como qualquer sessão Puppeteer — page.goto, page.waitForSelector, page.content() e cookies funcionam. Algumas observações honestas sobre a limpeza do Cloudflare através do navegador em nuvem:

  • navigator.webdriver está ausente, então a primeira verificação que o Cloudflare executa se comporta como um Chrome real.
  • O IP de saída corresponde ao proxyCountry — uma região residencial limpa muito mais confiavelmente do que um IP de datacenter.
  • cf_clearance está presente após a passagem — reutilize a mesma sessão para transportar a concessão através de solicitações subsequentes.
  • Aqueça a sessão para páginas teimosas — carregue a página inicial do site primeiro na mesma sessão antes da página protegida, para que a superfície comportamental pareça uma visita normal.

Conclusão: limpar Cloudflare, manter seu Node.js

Limpar o Cloudflare em Node.js não é sobre decodificar um desafio — é sobre apresentar um navegador em que o Cloudflare confia. O Scrapeless Scraping Browser lida com as três coisas que pontua (impressão digital, comportamento, IP de saída) do lado do servidor, de modo que seu código Puppeteer muda apenas sua URL de conexão. Defina proxyCountry para uma região residencial, aguarde o conteúdo pós-desafio e leia cf_clearance para confirmar a aprovação. Para executar o mesmo navegador em nuvem a partir do Python, veja o guia do Scrapling production-scraper, e compare planos na página de preços do Scrapeless.


Pronto para construir seu pipeline de limpeza do Cloudflare?

Junte-se à nossa comunidade para reivindicar um plano gratuito e conectar-se com desenvolvedores que estão extraindo sites protegidos pelo Cloudflare: Discord · Telegram.

Inscreva-se em app.scrapeless.com para um tempo de execução gratuito do Scraping Browser e aponte o Puppeteer para o navegador em nuvem que limpa o Cloudflare durante a renderização.


FAQ

Q: Preciso de um serviço separado para resolver CAPTCHA?
Não em um navegador que passa. O Cloudflare geralmente pontua impressão digital, comportamento e IP em segundo plano e emite um cookie cf_clearance. O navegador em nuvem é projetado para passar por essa pontuação durante uma renderização normal, então não há uma etapa de quebra de quebra-cabeça separada para conectar.

Q: puppeteer ou puppeteer-core?
Use puppeteer-core. Ele pula o download do Chromium empacotado porque você se conecta ao navegador em nuvem em vez de lançar um local.

Q: Preciso de um proxy?
Não. A saída residencial está embutida — defina proxyCountry para uma região ou ANY. O Cloudflare pontua o IP de saída, então uma região residencial limpa de forma mais confiável do que um endereço de centro de dados.

Q: O desafio ainda aparece em algumas páginas — o que ajuda?
Defina proxyCountry para uma região residencial e aqueça a sessão carregando primeiro a página inicial do site na mesma sessão antes da página protegida, para que a superfície comportamental pareça uma visita normal.

Q: Limpar o Cloudflare é legal?
Acesso a dados publicamente disponíveis é geralmente permitido, mas as regras variam conforme a jurisdição e o site. Revise os termos de serviço do alvo, respeite as diretivas 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.

Artigos mais populares

Catálogo