CAPSOLVER
博客
如何使用 CapSolver 和 n8n 解决 Cloudflare Turnstile:构建你自己的验证码解决API & 抓取网站

如何使用 CapSolver 和 n8n 解决 Cloudflare Turnstile

Logo of CapSolver

Adélia Cruz

Neural Network Developer

10-Mar-2026

Cloudflare Turnstile 正迅速成为现代网站首选的验证码替代方案。与传统验证码不同,Turnstile 在后台静默运行,这使得它更难被标准自动化工具检测和绕过。

但如果你能构建一个自己的 Turnstile 解决 API——一个接收挑战并返回有效令牌的 API,而无需编写任何传统代码呢?

在本指南中,你将学习如何将 n8n(一个可视化工作流自动化工具)与 CapSolver(一个基于人工智能的验证码解决服务)结合,创建一个按需解决 Cloudflare Turnstile 挑战的强大 API 端点。

你将构建的内容:

  • 一个 Cloudflare Turnstile 解决 API
  • 一个网络爬虫示例,该示例解决 Turnstile、提交令牌到网站并提取受保护的数据

什么是 Cloudflare Turnstile?

Cloudflare Turnstile 是一种智能验证码替代方案,旨在验证用户而不会带来传统挑战的摩擦。它不强制用户点击复选框或识别图片中的对象,而是通过浏览器信号和行为分析自动验证访客。

功能 Cloudflare Turnstile
用户交互 无 —— 在后台自动运行
工作原理 使用浏览器挑战和行为信号验证访客
可见性 显示一个小的控件,但不需要解决谜题
控件模式 托管模式、非交互模式、不可见模式
常见用例 登录表单、注册页面、结账页面,任何受 Cloudflare 保护的页面
站点密钥可见?

控件模式

Turnstile 为网站提供了三种控件模式:

模式 描述
托管模式 Cloudflare 决定是否显示交互式挑战或静默验证
非交互模式 永不显示挑战 —— 始终在后台验证
不可见模式 完全隐藏 —— 页面上不渲染控件

从解决角度来看,模式不会改变你配置 CapSolver 的方式 —— 你始终需要相同的参数:websiteURLwebsiteKey

Turnstile 与 Cloudflare 挑战(不是同一回事)

不要将 Turnstile 与 Cloudflare 的全页安全挑战 混淆 —— 那是显示“执行安全验证”并带有加载进度条的页面,让你在访问网站前完成验证。这是 Cloudflare 挑战(也称为 JS 挑战或托管挑战),而不是 Turnstile。

Cloudflare Turnstile Cloudflare 挑战
出现位置 嵌入在页面中(例如在登录表单中) 在访问网站前显示的全页弹窗
外观 页面中的一个小控件 显示“执行安全验证...”并带有加载条
实现方式 网站所有者将其添加到表单中 Cloudflare 根据安全规则自动添加
解决方式 使用 CapSolver 的 Turnstile 操作(本指南) 不同 —— 需要 Cloudflare 挑战解决器

如果你看到全页的“执行安全验证”屏幕,那不是 Turnstile —— 而是 Cloudflare 挑战,需要不同的解决方式。查看 更多关键区别


准备工作

开始之前,请确保你已准备好以下内容:

  1. 一个 n8n 实例 —— 可以是 自托管n8n Cloud
  2. 一个 CapSolver 账户 —— 在此注册 并获取你的 API 密钥
  3. CapSolver 的 n8n 节点 —— 已作为官方节点在 n8n 中提供(无需安装)

重要提示: 确保你的 CapSolver 账户中有足够的余额。Turnstile 解决任务会根据使用情况消耗积分。


在 n8n 中设置 CapSolver

CapSolver 作为 官方集成 在 n8n 中提供 —— 无需安装社区节点。你可以在构建工作流时直接在节点面板中找到它。

由于是官方集成,你需要在 n8n 中创建凭证,以便 CapSolver 节点可以与你的账户进行身份验证。

步骤 1:打开凭证页面

进入你的 n8n 实例,导航至 设置凭证。你将在这里看到所有已配置的凭证。

n8n 凭证页面显示 CapSolver 账户

步骤 2:创建 CapSolver 凭证

  1. 点击 创建凭证(右上角)
  2. 搜索 "CapSolver" 并选择 CapSolver API
  3. 输入你的 API 密钥 —— 直接从 CapSolver 仪表板 复制
  4. 允许的 HTTP 请求域名 保留为 All(默认)
  5. 点击 保存

n8n 会自动测试连接。你应该会看到一个绿色的 “连接测试成功” 通知,确认你的 API 密钥有效。

CapSolver 凭证配置并成功测试连接

重要提示: 你工作流中的每个 CapSolver 节点都会引用此凭证。你只需创建一次 —— 所有解决器工作流将共享同一凭证。

现在你已准备好构建你的 Turnstile 解决工作流!


如何识别 Turnstile 参数

在解决 Turnstile 挑战之前,你需要知道其参数 —— 特别是 websiteURLwebsiteKey(也称为站点密钥)。

Turnstile 仅需要两个参数,因此找到它们非常简单:

网站 URL

这仅仅是包含 Turnstile 控件的页面的完整 URL。从浏览器地址栏中复制它即可。

网站密钥(站点密钥)

站点密钥嵌入在页面的 HTML 中。以下是几种查找方法:

1. 在页面源代码中搜索 data-sitekey

右键点击页面 → 查看页面源代码(或按 Ctrl+U)并搜索 data-sitekey

html 复制代码
<div class="cf-turnstile" data-sitekey="0x4AAAAAAADV8V8V8V8V8V8V"></div>

2. 在 JavaScript 中搜索 turnstile.render()

一些网站通过 JavaScript 渲染 Turnstile 而不是 HTML 属性。在页面源代码中搜索 turnstile.render

javascript 复制代码
turnstile.render('#widget', {
  sitekey: '0x4AAAAAAADV8V8V8V8V8V8V',
});

3. 检查 DevTools 的网络标签

打开 DevTools(F12)→ 网络 标签 → 按 turnstilechallenges.cloudflare.com 过滤。站点密钥通常会出现在请求 URL 或响应数据中。

4. 在 HTML 中搜索 challenges.cloudflare.com

Turnstile 从 Cloudflare 加载其脚本。在页面源代码中搜索此域名 —— 站点密钥通常在附近:

html 复制代码
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

提示:

  • 站点密钥始终以 0x 开头,并且是一个长的字母数字字符串
  • 如果网站使用 Cloudflare 的托管挑战(访问网站前的全页挑战),Turnstile 控件可能不在页面源代码中 —— 它是由 Cloudflare 的挑战页面提供的

工作流:Cloudflare Turnstile 解决 API

此工作流创建一个 POST API 端点,接收 Turnstile 参数并返回解决后的令牌。

Cloudflare Turnstile

工作原理

该工作流由三个节点组成:

  1. Webhook —— 接收带有 Turnstile 参数的传入 POST 请求
  2. Cloudflare Turnstile —— 将挑战发送到 CapSolver 并等待解决方案
  3. 响应 Webhook —— 以 JSON 响应返回解决方案

节点配置

1. Webhook 节点

设置
HTTP 方法 POST
路径 solver-turnstile
响应模式 响应节点

这将创建一个端点:https://your-n8n-instance.com/webhook/solver-turnstile

2. CapSolver Cloudflare Turnstile 节点

参数 描述
操作 Cloudflare Turnstile 必须设置为 Cloudflare Turnstile
类型 AntiTurnstileTaskProxyLess 此任务类型不需要代理
网站 URL {{ $json.body.websiteURL }} 包含 Turnstile 控件的页面的 URL
网站密钥 {{ $json.body.websiteKey }} Turnstile 站点密钥
metadata.action (可选) 一些网站要求特定的 action 字符串用于 Turnstile 挑战
metadata.cdata (可选) 一些网站传递给 Turnstile 控件的自定义数据用于验证

一些网站还需要 metadata.action 和/或 metadata.cdata —— 你可以在节点的 可选 部分添加这些内容。同时在此节点中选择你的 CapSolver 凭证

3. 响应 Webhook 节点

设置
响应内容 JSON
响应体 {{ JSON.stringify($json.data) }}

这将返回完整的 CapSolver 响应,包括解决后的 Turnstile 令牌。

测试它

向你的 Webhook 端点发送 POST 请求:

bash 复制代码
curl -X POST https://your-n8n-instance.com/webhook/solver-turnstile \
  -H "Content-Type: application/json" \
  -d '{
    "websiteURL": "https://example.com/login",
    "websiteKey": "0x4AAAAAAADV8V8V8V8V8V8V"
  }'

预期响应:

json 复制代码
{
  "taskId": "abc123...",
  "solution": {
    "token": "0.XXXXXXXXXXXXXXXX..."
  },
  "status": "ready"
}

导入此工作流

复制以下 JSON 并通过 菜单从 JSON 导入 导入到 n8n 中:

点击展开工作流 JSON
json 复制代码
{
  "name": "Turnstile 解决器",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "solver-turnstile",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [-208, 0],
      "id": "137be4f0-1762-4f0c-b993-c512d27e35de",
      "name": "Webhook",
      "webhookId": "3d32ad61-d925-4a09-8fe5-7226e6664a98"
    },
    {
      "parameters": {
        "operation": "Cloudflare Turnstile",
        "websiteURL": "={{ $json.body.websiteURL }}",
        "websiteKey": "={{ $json.body.websiteKey }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [192, 80],
      "id": "954ff1f0-d5de-4468-b0d1-fbce03676676",
      "name": "Cloudflare Turnstile",
      "credentials": {
        "capSolverApi": {
          "id": "sLg2YDZd7WtYJJJ4",
          "name": "CapSolver 账户"
        }
      }
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [400, 0],
      "id": "db264e2b-48ce-4887-9b2b-2b8077993c30",
      "name": "响应 Webhook"
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Cloudflare Turnstile",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Cloudflare Turnstile": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1"
  }
}

API 参数参考

Turnstile 解决 API 端点接受以下参数:

参数 必需 描述
websiteURL 托管 Turnstile 控件的页面的 URL
websiteKey Turnstile 站点密钥
metadata.action 一些网站要求的用于 Turnstile 挑战的操作字符串
metadata.cdata 一些网站传递给 Turnstile 控件的自定义数据

提示: 你可以通过检查页面源代码来识别 websiteURLwebsiteKey —— 参见 如何识别 Turnstile 参数

与 reCAPTCHA 相比,Turnstile 更简单 —— 你只需要两个必需参数。一些网站可能还需要可选的 metadata.actionmetadata.cdata 字段 —— 如果令牌未被接受,请在节点的 可选 部分添加这些内容。


现实世界示例:向网站提交 Turnstile 令牌

上述 API 工作流展示了如何获取已解决的 Turnstile 令牌。但你实际上如何使用它呢?

在现实世界的自动化中,解决挑战只是工作的一半。你需要提交令牌到目标网站 —— 就像浏览器那样 —— 以解锁 Turnstile 保护后的数据或操作。

以下是通用模式:

  1. 解决挑战 → 从 CapSolver 获取令牌
  2. 提交令牌 → 通过 HTTP 请求将令牌发送到目标网站(通常作为 cf-turnstile-response 表单字段)
  3. 验证响应 → 检查网站是否接受该令牌
  4. 处理结果 → 提取你需要的数据

示例:解决并提交 Turnstile

示例: https://example.com/ —— 一个受 Turnstile 保护的网站

工作流流程

复制代码
手动触发 → CapSolver Turnstile → HTTP POST 请求 → IF(检查成功) → 编辑字段(提取数据)

工作原理

  1. 手动触发 —— 手动启动工作流(点击“执行工作流”)。你可以用任何触发器替换它 —— Webhook、定时器、应用事件等。
  2. CapSolver Cloudflare Turnstile —— 解决 Turnstile 挑战:
    • 操作:Cloudflare Turnstile
    • 网站 URL:https://example.com/login
    • 网站密钥:0x4AAAAAAA...(通过检查页面源代码找到 —— 参见 如何识别 Turnstile 参数
  3. HTTP POST 请求 —— 提交已解决的令牌到目标网站:
    • 令牌通过 cf-turnstile-response 表单字段发送
    • 包含网站预期的其他表单字段(例如 usernamepassword
    • 这就是浏览器在 Turnstile 验证后提交表单时所做的
  4. IF 节点 —— 检查响应是否表示成功(例如重定向、成功消息或特定 JSON 字段)
  5. 编辑字段 — 从响应中提取你需要的数据。在实际场景中,这一步你将使用HTML节点解析HTML,提取特定元素(例如用户数据、产品列表、仪表板内容),并将其映射到你的输出字段。

关键概念:每个网站处理令牌提交的方式不同。在这个示例中,令牌通过POST请求发送到cf-turnstile-response表单字段——但其他网站可能期望它以不同的字段名、JSON正文、请求头或完全不同的端点发送。始终使用DevTools的网络标签检查网站的实际表单提交,以确定令牌需要如何发送。

将此模式应用于任何受Turnstile保护的网站

  1. 识别Turnstile参数 — 通过检查页面源代码找到websiteURLwebsiteKey
  2. 检查表单提交 — 使用浏览器的DevTools网络标签查看表单提交时发送的请求(URL、方法、请求头、正文字段)
  3. 在n8n中复制请求 — 配置HTTP请求节点以完全匹配表单提交,将解决的令牌插入正确的字段(通常是cf-turnstile-response,但请检查实际表单)
  4. 添加验证 — 使用IF节点检查响应并确认数据是否已解锁
  5. 提取数据 — 一旦网站接受令牌,解析响应以提取你需要的数据。对于HTML响应使用HTML节点,对于JSON响应使用编辑字段

注意:此示例为简化起见使用了手动触发,但你可以将其替换为任何触发节点——Webhook(构建API)、定时触发(每小时运行一次)、应用事件(响应Telegram消息)或其他。有关所有选项,请参阅工作流触发方式


触发工作流的方式

本指南中的示例使用了手动触发(用于抓取工作流)和Webhook(用于API工作流),但n8n提供了更多启动工作流的方式。你可以将触发节点替换为适合你用例的节点:

触发方式 描述 适用场景
手动触发 在n8n中点击“执行工作流” 测试和一次性运行
定时触发 每天、每小时或自定义间隔(cron)运行 定期抓取任务(例如每小时检查一次网站)
Webhook触发 在接收到HTTP请求时运行 构建其他服务可以调用的API
应用事件触发 在Telegram、Notion、Airtable等发生事件时运行 响应事件(例如新Telegram消息触发解决)
表单提交触发 在n8n中生成一个网页表单并将响应传递给工作流 让用户通过表单提交验证码参数
由其他工作流执行 通过其他工作流的“执行工作流”节点调用 模块化架构——将求解器作为可重用的子工作流
聊天消息触发 在用户发送聊天消息时运行(AI节点) 需要按需解决挑战的聊天机器人集成
其他方式 工作流错误、文件更改等 高级自动化触发

例如,要每小时运行一次你的抓取工作流,只需将手动触发节点替换为定时触发节点,并将间隔设置为1小时。其余工作流保持完全不变。


存储和导出抓取的数据

一旦你的工作流解决了Turnstile挑战并从目标网站获取了数据,你将需要存储或导出这些数据。n8n提供了内置的数据转换和输出节点来实现这一点。

数据转换

在保存之前,你可以使用n8n的内置节点转换抓取的数据:

节点 描述
合并 合并多个来源的数据
汇总 对项目进行求和、计数、取最大值等
转换为文件 将JSON数据转换为CSV、Excel或其他二进制格式
从文件中提取 将二进制数据转换为JSON
HTML 解析并从HTML响应中提取数据
XML 在JSON和XML之间转换
重命名键 重命名字段以匹配你期望的输出格式
排序 在导出前重新排序项目

输出目标

在IF节点验证响应后,你可以添加以下节点来保存数据:

目标 方法
Google表格 追加行到电子表格——适合跟踪随时间变化的结果
Excel/CSV文件 使用转换为文件节点生成.xlsx.csv,然后使用写入二进制文件节点保存或上传到Google Drive
数据库(MySQL、PostgreSQL、MongoDB) 直接插入数据库表以进行结构化存储
Airtable/Notion 将数据发送到你的项目管理工具
Google Drive/S3 上传文件到云存储
Telegram/Slack/邮件 通过抓取的数据发送通知
本地JSON文件 将结果写入磁盘上的.json文件

提示:你可以组合多个输出——例如,通过将两个节点连接到IF节点的“true”输出,同时保存到Google表格并发送Telegram通知。


故障排除

“ERROR_KEY_DOES_NOT_EXIST”或无效API密钥

症状 CapSolver节点因API密钥错误而失败
原因 你的API密钥不正确或未配置
修复 设置→凭证中再次检查你的API密钥。直接从CapSolver仪表板复制密钥

“ERROR_ZERO_BALANCE”

症状 任务创建失败,提示余额错误
原因 你的CapSolver账户没有余额
修复 CapSolver仪表板充值

错误或过期的令牌

症状 返回的令牌被目标网站拒绝
原因 Turnstile令牌在短时间内过期
修复 在收到令牌后立即使用

令牌未被网站接受

症状 CapSolver成功返回令牌,但目标网站仍拒绝它
原因 某些网站有Turnstile之外的额外保护,或需要未包含的特定参数
修复 再次确认你是否按网站要求提交了令牌(正确的字段名、方法和端点)。确保你使用了正确的网站密钥。如果令牌仍不被接受,联系CapSolver支持团队寻求帮助——他们可以帮助诊断特定网站的问题

超时或响应缓慢

症状 Webhook耗时过长或超时
原因 根据负载不同,验证码解决可能需要几秒钟
修复 在n8n设置中增加Webhook超时时间。对于生产用例,考虑添加重试逻辑

最佳实践

  1. 立即使用令牌 — Turnstile令牌会快速过期。在从求解器API收到令牌后,立即将其发送到目标网站。

  2. 配置前验证参数 — 在配置工作流前,始终通过检查页面源代码确认正确的websiteKey

  3. 确保API密钥安全 — 千万不要在客户端代码中暴露你的CapSolver API密钥。这些n8n工作流将密钥保留在服务器端,这是推荐的做法。

  4. 监控你的余额 — 在CapSolver仪表板中设置余额警报,以避免因余额不足导致工作流意外失败。

  5. 添加错误处理 — 对于生产工作流,添加一个IF节点在CapSolver节点后检查错误并优雅处理(例如重试、通知或记录失败)。


结论

你已经学习了如何使用n8n和CapSolver构建一个Cloudflare Turnstile求解API抓取工作流模式——无需传统编码。

在本指南中,我们涵盖了:

  • 基于Webhook的工作流,用于Cloudflare Turnstile的API求解端点
  • 现实世界的抓取模式,展示如何将解决的令牌提交到目标网站并提取受保护的数据
  • 通过检查页面源代码识别Turnstile参数
  • 令牌处理、错误管理和生产使用的最佳实践

关键要点:解决Turnstile挑战只是工作的一半——你还需要将令牌提交到目标网站以解锁受保护的数据。


准备好了吗? 注册CapSolver,使用优惠码n8n在首次充值时获得额外8%的奖励!

CapSolver优惠码横幅


常见问题

什么是Cloudflare Turnstile?

Cloudflare Turnstile 是一种 CAPTCHA 替代方案,通过浏览器信号和行为分析在后台验证访问者,而无需他们解决谜题。

CapSolver在n8n中支持哪些验证码类型?

CapSolver的n8n节点支持Cloudflare Turnstile、reCAPTCHA v2、reCAPTCHA v2 Invisible、reCAPTCHA v3等。查看n8n CapSolver集成页面获取完整列表。

解决一个Turnstile挑战需要多少钱?

费用根据使用情况而定。查看CapSolver定价页面获取当前的Turnstile费率。

解决一个Turnstile挑战需要多长时间?

Turnstile挑战通常在几秒钟内解决,因为没有涉及图像挑战。

我可以将此工作流与n8n Cloud一起使用吗?

可以!此工作流适用于自托管的n8n和n8n Cloud。CapSolver节点已作为官方集成提供——只需添加你的API凭证即可。

如何找到网站的Turnstile网站密钥?

在页面源代码中搜索HTML中的data-sitekey或JavaScript中的turnstile.render()。你也可以打开DevTools(按F12)→网络标签并按turnstile过滤请求,以在请求中找到网站密钥。详见如何识别Turnstile参数的详细指南。

Turnstile和reCAPTCHA有什么区别?

Turnstile是Cloudflare的CAPTCHA替代方案,注重隐私和用户体验——它很少显示可见的挑战。reCAPTCHA是Google的机器人检测系统,可能需要用户解决图像谜题(v2)或分配行为评分(v3)。两者都可以通过n8n中的CapSolver解决。

如果CapSolver无法解决Turnstile挑战会发生什么?

CapSolver节点将返回错误。对于生产工作流,建议添加错误处理(例如使用IF节点检查错误并添加重试机制或通知)。

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

更多