🎯 一款可定制、具备反检测功能的云浏览器,由自主研发的 Chromium驱动,专为网页爬虫AI 代理设计。👉立即试用
返回博客

如何用 Node.js (Puppeteer + Scrapeless) 解决 Cloudflare 问题

Ethan Brown
Ethan Brown

Advanced Bot Mitigation Engineer

09-Jul-2026

简要概述:

  • Cloudflare 评分的是浏览器,而不是访客。 它会读取指纹一致性、行为信号和出口 IP,然后为它信任的浏览器设置一个 cf_clearance cookie——所以在 Node.js 中清除它意味着成为一个受信任的浏览器,而不是解答一个难题。
  • 本地 Node.js 浏览器在三个方面未能通过评分: navigator.webdriver 亮相、无头默认指纹和数据中心出口 IP。堆叠隐身插件以修补三者是一个维护的跑步机。
  • Scrapeless Scraping Browser 在渲染时清除了挑战——真正的自开发 Chromium、一致的每个会话指纹和在 195 个国家的住宅出口,通过一个 WebSocket 端点连接。
  • 您的 Node.js 仍然是标准 Puppeteer。 使用 puppeteer.connect() 连接,等待挑战后的内容,并读取页面——唯一的变化是连接 URL。
  • 验证成功: 通过云浏览器的 Puppeteer 会话清除了 Cloudflare 挑战页面,读取成功标记You bypassed the Cloudflare challenge! :D,并获得了 cf_clearance cookie。
  • 免费开始。 新的 Scrapeless 账户包括免费的 Scraping Browser 运行时——在 app.scrapeless.com 注册。

介绍:在 Node.js 中清除 Cloudflare 是一个浏览器问题

Cloudflare 挑战并不是你解码的图片 CAPTCHA。它在后台运行并评分加载页面的浏览器——指纹是否内部一致,交互信号是否看起来像人类,以及出口 IP 是否有干净的声誉。当评分通过时,Cloudflare 设置一个 cf_clearance cookie,真实页面加载。当不通过时,你得到的是一个插页,而不是内容。

这重新定义了 Node.js 的任务。没有需要提交的答案——工作是呈现一个 Cloudflare 已经信任的浏览器。由 Puppeteer 驱动的本地无头 Chromium 不能做到这一点:它通过 navigator.webdriver 属性 宣告了自动化,使用无头默认字体和画布行为,从公众已经了解的 IP 声誉退出。你可以安装隐身插件,然后在 Chromium 和探测器不断更新时进行修补。此指南走了一条更短的道路:通过标准 Puppeteer 驱动 Scrapeless Scraping Browser,从而指纹、行为和出口 IP 在服务器端处理,并在正常渲染时清除挑战。


Cloudflare 实际检查的内容

Cloudflare 的文档 描述了一个在不打断访客的情况下运行的验证步骤。在实践中,它评估三件事并授予一个 cf_clearance cookie——一个标准的 HTTP cookie——当它们通过时:

Cloudflare 读取的内容 本地 Node.js 浏览器失败的原因
指纹一致性 无头默认设置和 webdriver 标志与真实的 Chrome 矛盾
行为信号 没有连贯浏览器界面的脚本化时间
出口 IP 声誉 数据中心 IP 的评分不如住宅 IP

一个连贯的、受信任的浏览器比任何单一的规避更重要——这就是为什么将三者都转移到服务器端比堆叠隐身插件更持久。

为什么选择 Scrapeless Scraping Browser

Scrapeless Scraping Browser 是一个可定制的反检测云浏览器,专为网络爬虫和 AI 代理设计。特别针对 Cloudflare,它提供:

  • 真正的自开发 Chromium,精确运行挑战 JavaScript,就像 Chrome 一样,因此能够解决问题而不是停滞。
  • 一致的每个会话指纹——没有 navigator.webdriver 亮相,没有无头默认泄露。
  • 在 195 个国家的住宅出口——Cloudflare 评分出口 IP,住宅区域的评分洁净,而数据中心 IP 则不然。
  • 会话持久性,使得在同一会话中可以重用 cf_clearance 授权。
  • 统一的连接面——每个选项都是相同 WebSocket 端点上的查询参数。

在免费的计划中获取您的 API 密钥,访问 app.scrapeless.com


先决条件

  • Node.js 18 或更新版本
  • 安装 puppeteer-core(不需要捆绑的 Chromium——您连接到远程的)
  • 一个 Scrapeless 账户和 API 密钥——在 app.scrapeless.com 注册
    完整的连接细节请查看 Scraping Browser 文档

安装

您连接到一个远程浏览器,因此只需要 puppeteer-core(没有打包的 Chromium)。

bash Copy
npm install puppeteer-core
export SCRAPELESS_API_KEY=your_api_token_here   # 免费的密钥在 https://app.scrapeless.com

连接并清除挑战

构建端点,使用 puppeteer.connect() 进行连接,导航并等待挑战后的内容附加。挑战在渲染时解决——没有单独的解决调用。

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 });

// 云浏览器在渲染过程中清除 Cloudflare;等待真实内容加载。
await page.waitForSelector("#challenge-title", { timeout: 90000 });
console.log("清除:", 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();

这个脚本的实时运行打印了 清除: 你已绕过 Cloudflare 挑战! :Dcf_clearance: true——标准的 Puppeteer,通过云浏览器进行源获取。

在免费计划中获取您的 API 密钥:app.scrapeless.com

确认通过并携带许可

可靠的信号是实际内容的附加——一旦挑战后的元素存在,页面就清除了。Cloudflare 还会在通过的会话中设置一个 cf_clearance cookie,您可以读取它以在同一会话中的其他请求中携带许可。W3C WebDriver 规范 要求符合的自动化暴露 webdriver 标志;云浏览器不携带它,这就是首个检查结果干净的原因。

javascript Copy
const cookies = await page.cookies();
const clearance = cookies.find((c) => c.name === "cf_clearance");
console.log("cf_clearance 存在:", Boolean(clearance));
if (clearance) console.log("域:", clearance.domain);

为可靠的清除固定区域

Cloudflare 根据出口 IP 进行评分,因此应将 proxyCountry 固定为一个住宅区域。设置为任何 ISO 国家代码。

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

本地 Node.js 浏览器的限制

本地 Puppeteer 抓取器在 Cloudflare 开始对浏览器进行评分之前是可以的。然后,无头指纹、webdriver 标志和数据中心 IP 每个都会失败不同的检查,而中间干扰物则替换内容。这些是指纹、行为和 IP 问题——云浏览器在服务器端处理这三者。连接到 Scrapeless 会将它们传递到一个受管理的会话,而您的 Puppeteer 代码保持标准。


您获得的结果

会话的行为像任何 Puppeteer 会话——page.gotopage.waitForSelectorpage.content() 和 cookies 都可以使用。以下是关于通过云浏览器清除 Cloudflare 的一些诚实观察:

  • navigator.webdriver 缺失,因此 Cloudflare 运行的第一次检查看起来像真实的 Chrome。
  • 出口 IP 匹配 proxyCountry——住宅区域的清除远比数据中心 IP 更可靠。
  • 在通过后存在 cf_clearance——在后续请求中重用同一会话以携带许可。
  • 为顽固页面预热会话——在同一会话中首先加载网站的首页,然后是受保护的页面,使行为外观看起来像正常访问。

结论:清除 Cloudflare,保持您的 Node.js

在Node.js中清除Cloudflare并不是关于解码挑战——而是关于呈现一个Cloudflare信任的浏览器。Scrapeless Scraping Browser处理它评分的三个方面(指纹、行为、出口IP)在服务器端,因此你的Puppeteer代码只需更改连接URL。将proxyCountry固定在一个住宅区域,等待挑战后的内容,并读取cf_clearance以确认通过。如需在Python中运行相同的云浏览器,请参阅Scrapling生产抓取器指南,并在Scrapeless定价页面上比较计划。


准备好构建您的Cloudflare清除管道了吗?

加入我们的社区以获取免费计划,并与抓取Cloudflare保护网站的开发人员联系:Discord · Telegram

app.scrapeless.com注册以免费获取Scraping Browser运行时,并将Puppeteer指向在渲染时清除Cloudflare的云浏览器。


常见问题

问:我需要单独的验证码解决服务吗?
在一个通过的浏览器上不需要。Cloudflare主要在后台评分指纹、行为和IP,并发布cf_clearance cookie。云浏览器旨在在正常渲染过程中通过该评分,因此没有单独的拼图步骤需要连接。

问:使用puppeteer还是puppeteer-core
使用puppeteer-core。它跳过捆绑的Chromium下载,因为你连接到云浏览器而不是启动本地浏览器。

问:我需要代理吗?
不需要。住宅出口是内置的——将proxyCountry设置为一个区域或ANY。Cloudflare会对出口IP评分,因此住宅区域的清除比数据中心地址更可靠。

问:在某些页面上仍然显示挑战——有什么帮助吗?
proxyCountry固定在一个住宅区域,并通过在同一会话中首先加载该网站的首页,在保护页面之前预热会话,以使行为表面看起来像正常访问。

问:清除Cloudflare合法吗?
访问公共可用数据通常是被允许的,但规则因司法管辖区和网站而异。请查看目标的服务条款,尊重机器人指令,并就任何敏感问题咨询法律顾问。

在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。

最受欢迎的文章

目录