CAPSOLVER
博客
如何绕过Cloudflare | 使用Puppeteer Node.JS

如何解决Cloudflare|使用Puppeteer Node.JS

Logo of CapSolver

Anh Tuan

Data Science Expert

02-Dec-2025

我觉得如今可用的自动化任务越多,它们就越被重视,因此挑战也变得更加明显和困难。例如,Cloudflare目前提供了强大的安全措施来保护网站免受各种自动化工具的攻击。

但对于开发人员和从事自动化项目(如网络爬虫、数据提取或测试)的组织来说,应对这些安全功能可能具有挑战性。然而,通过使用正确的工具和策略,您可以有效地解决这些挑战,同时遵守法律和道德标准。

在本教程中,我将探讨如何有效地通过使用Puppeteer和Node.js以及Captcha求解器的帮助来解决Cloudflare的Turnstile。

领取 CapSolver 奖励代码

立即提升您的自动化预算!
在充值CapSolver账户时使用奖励代码 CAPN,每次充值均可获得额外 5% 的奖励 —— 无限制。
现在在您的 CapSolver 仪表板 中领取


理解 Cloudflare 的 Turnstile

Cloudflare 的 Turnstile 是一种复杂的安全部件,旨在挑战试图访问受保护网站的用户。它结合了多种技术,包括 JavaScript 挑战、CAPTCHAs 和行为分析,以评估用户是否是合法的真人或自动化机器人。对于开发人员来说,这意味着绕过 Turnstile 需要的不仅仅是传统的网页爬取技术。

前提条件

在深入实现之前,请确保您拥有以下工具和资源:

  • Node.js:从官方网站安装最新版本的 Node.js。
  • Puppeteer:一个 Node.js 库,提供了一个高级 API 来通过 DevTools 协议控制无头 Chrome 或 Chromium,适用于自动化任务。
  • CapSolver API 密钥:注册 CapSolver 并获取 CAPTCHA 求解服务的 API 密钥。

什么是 CapSolver?

CapSolver 是一个强大的工具,旨在帮助解决 CAPTCHAs 和其他自动化挑战。随着网站越来越多地部署复杂的安全部署来阻止机器人和爬虫,CapSolver 提供了可靠的解决方案来克服这些障碍。

CapSolver 的主要功能:

  • 全面的 CAPTCHA 解决方案:CapSolver 支持各种类型的 CAPTCHAs,包括 reCAPTCHA、Cloudflare、ImageToText 等,使挑战解决更加无缝。

  • 高准确性:利用先进的算法和机器学习模型,CapSolver 确保 CAPTCHA 解决的高准确性,减少失败率并提高效率。

  • 易于集成:CapSolver 提供了一个用户友好的 API,可以轻松与您现有的自动化工具集成,包括 Puppeteer。这使您能够将 CAPTCHA 解决作为网页爬取或测试工作流程的一部分进行自动化。

  • 24/7 支持:CapSolver 提供强大的客户支持,帮助解决任何问题或疑问,确保顺利运行和及时协助。

    这里是您解释的更详细和丰富的版本,以及文章的结论部分:


详细实现步骤

  1. 使用 Puppeteer 和 JavaScript 调用 CapSolver API 并访问网站

    • Puppeteer 是一个强大的 Node.js 库,允许您通过 DevTools 协议控制无头 Chrome 或 Chromium。在此背景下,它用于导航网页并处理复杂的交互,例如处理 CAPTCHAs。
  2. 获取 Turnstile 的 SiteKey

    • SiteKey 是解决 Turnstile 挑战的关键元素。此密钥是每个网站独有的,需要与 CAPTCHA 求解 API 交互。您可以通过分析网站的 HTML 或使用 CapSolver 插件 来提取 SiteKey,以简化此过程。有关如何识别必要参数的详细指南,请参阅我们的专用博客文章。
  3. 使用 JavaScript 调用 CapSolver API 并获取令牌

    • 一旦您获得了 SiteKey,就可以向 CapSolver API 发起请求。这涉及创建一个 CapSolver 将处理的任务,以解决 CAPTCHA。API 将返回一个令牌,您可以使用该令牌绕过 Turnstile 保护。
    • 以下是使用 JavaScript 与 CapSolver API 交互的示例:
javascript 复制代码
// npm install axios puppeteer-core
const axios = require('axios');
const puppeteer = require("puppeteer-core");

const api_key = "YOUR_API_KEY";
const site_key = "0xxxxxx";
const site_url = "https://xxx.xxx.xxx/xxx";
const proxy = "http://xxx:[email protected]:x"

async function capsolver() {
  const payload = {
    clientKey: api_key,
    task: {
      type: 'AntiTurnstileTaskProxyLess',
      websiteKey: site_key,
      websiteURL: site_url,
      metadata: {
          action: '',  // optional,
          type: "turnstile"
      },
      // proxy: proxy
    }
  };

  try {
    const res = await axios.post("https://api.capsolver.com/createTask", payload);
    const task_id = res.data.taskId;
    if (!task_id) {
      console.log("Failed to create task:", res.data);
      return;
    }
    console.log("Got taskId:", task_id);

    while (true) {
      await new Promise(resolve => setTimeout(resolve, 1000)); // Delay for 1 second

      const getResultPayload = {clientKey: api_key, taskId: task_id};
      const resp = await axios.post("https://api.capsolver.com/getTaskResult", getResultPayload);
      const status = resp.data.status;

      if (status === "ready") {
        return resp.data.solution.token;
      }
      if (status === "failed" || resp.data.errorId) {
        console.log("Solve failed! response:", resp.data);
        return;
      }
    }
  } catch (error) {
    console.error("Error:", error);
  }
}

const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms));
async function reqSite(){
  let coockie;
  await capsolver().then(token => {
    console.log(token);
    coockie = token;
  });

  const browser = await puppeteer.launch({
    headless: false,
    executablePath: "Browser Path"
  });

  const page = await browser.newPage();
  await wait(500);
  await page.setCookie({
    name: "cf_clearance",
    value: coockie,
    domain: "xx.xx.xx"
  });
  await wait(500);
  await page.goto(site_url);
  // TODO
  await page.close();
  await browser.disconnect();
}

reqSite().then();
  1. 使用 Puppeteer 设置 Cookie 并访问页面内容
    • 一旦从 CapSolver 获得令牌,现在可以使用 Puppeteer 设置适当的 Cookie 以通过 Cloudflare 挑战。这一步至关重要,因为它允许您访问网站上的受保护内容。

结论

在本教程中,我们探讨了如何使用 Puppeteer 和 CapSolver API 有效绕过 Cloudflare 的 Turnstile 安全机制。通过了解 Cloudflare 的保护措施的复杂性,并利用像 CapSolver 这样的强大工具,开发人员可以成功自动化诸如网页爬取、数据提取和测试等任务,同时不违反法律标准。

自动化在各个行业中变得越来越重要,随之而来的挑战也由像 Turnstile 这样的高级安全系统带来。通过保持信息更新并利用正确的策略,您可以确保您的自动化项目顺利且高效运行。

如果您正在从事类似的项目,请不要犹豫,探索 CapSolver 以获得强大的 CAPTCHA 解决方案。如需更多见解,请务必查看相关主题,如 网络爬虫最佳实践Puppeteer 使用技巧


常见问题

1. 使用 CapSolver 绕过 Cloudflare Turnstile 是否合法且安全?

CapSolver 是一个合法的工具,其合法性取决于其使用方式。
只要自动化、测试或爬虫是在 获得适当授权 的情况下进行,并遵守当地法律和网站政策,这是可以接受的。
避免将此类工具用于未经授权的爬虫或恶意活动,这可能会违反服务条款或法律。


2. 为什么我需要 Puppeteer 来解决 Turnstile?难道不能只使用 HTTP 请求?

Cloudflare Turnstile 验证的不仅仅是 CAPTCHA。它还检查:

  • 浏览器指纹
  • JavaScript 执行
  • Cookie 和存储行为
  • 页面资源加载和交互

纯 HTTP 请求无法准确模拟真实浏览器环境。
Puppeteer 提供了一个完整的浏览器上下文,使其在绕过 Cloudflare 的多层安全检查时更加可靠。


3. 我从 CapSolver 获得了令牌,但页面仍然无法加载。我应该检查什么?

可能的原因包括:

  • 错误的 SiteKey(每个页面可能有不同的密钥)
  • 缺少或错误设置的 cf_clearance Cookie
  • Cloudflare 检测到可疑的浏览器指纹
  • 代理不一致(如果使用代理)

排查步骤:

  1. 确认 CapSolver 返回了有效的令牌。
  2. 确保 Puppeteer 正确地为正确的域名设置了 Cookie。
  3. 确保访问的 URL 与创建任务时使用的 websiteURL 匹配。
  4. 如果问题仍然存在,考虑启用代理或调整浏览器指纹设置。

合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。

更多