Tutorials

n8n + CaptchaAI:无代码验证码解决工作流程

想用 n8n 跑通“提交任务 → 轮询结果 → 注入 token”这套验证码自动化链路,又不想给每个节点单独写胶水代码?完全可以,而且比 Zapier 更省事:n8n 原生支持循环,四个 HTTP Request 节点加一个 Wait 节点就够了,Zapier 只有 Paths,写不出真正的重试逻辑。下面按节点顺序搭建。


验证码自动化流程总览

Manual Trigger / Cron
    ↓
HTTP Request: Submit CAPTCHA
    ↓
Wait: 10 seconds
    ↓
Loop: Poll until solved
    ├── HTTP Request: Get result
    ├── IF: status == 1? → Exit loop
    └── Wait: 5 seconds → Loop again
    ↓
HTTP Request: Use token

搭建步骤

第 1 步:提交验证码任务

加一个 HTTP Request 节点发送任务,配置如下:

  • 方法:POST
  • URL:https://ocr.captchaai.com/in.php
  • 请求体类型:Form URL Encoded

请求体参数:

  • key{{ $credentials.captchaaiApiKey }},或直接硬编码密钥
  • methoduserrecaptcha
  • googlekey6Le-SITEKEY
  • pageurlhttps://example.com
  • json1

提示:轮询间隔别设太短,容易频繁撞上 CAPCHA_NOT_READY

正常返回:

{
  "status": 1,
  "request": "71823456"
}

第 2 步:等待求解器开始处理

再加一个 Wait 节点,别急着轮询:等待时长设为 10,单位选 Seconds。留出这段时间,避免第一次轮询就扑空。


第 3 步:轮询结果,并处理重试

n8n 有两种循环方式:Loop Over Items 节点,或把 IF 节点的 false 输出连回上一个节点。

方案 A:用 IF 节点做简单轮询

加一个 HTTP Request 节点(轮询用):

  • 方法:GET
  • URL:https://ocr.captchaai.com/res.php
  • 查询参数:keyaction=getid={{ $json.request }}json=1

把它接到一个 IF 节点,条件设为 {{ $json.status }} Equal 1

  • True 输出 → 进入下一步(使用 token)
  • False 输出Wait(5 秒)→ 回到轮询节点

方案 B:用 Code 节点写轮询逻辑

想要更精细的控制,就用 Code 节点:

const apiKey = 'YOUR_API_KEY';
const taskId = $input.first().json.request;

for (let i = 0; i < 24; i++) {
  await new Promise(r => setTimeout(r, 5000));

  const resp = await fetch(
    `https://ocr.captchaai.com/res.php?key=${apiKey}&action=get&id=${taskId}&json=1`
  );
  const data = await resp.json();

  if (data.status === 1) {
    return [{ json: { token: data.request, taskId } }];
  }
  if (data.request !== 'CAPCHA_NOT_READY') {
    throw new Error(`CaptchaAI error: ${data.request}`);
  }
}

throw new Error(`Task ${taskId} timed out`);

第 4 步:把 token 提交到目标表单

再加一个 HTTP Request 节点,用 token 提交表单:

  • 方法:POST
  • URL:https://staging.example.com/submit
  • 请求体类型:Form URL Encoded

请求体参数里除了你原本的表单字段,还要带上 g-recaptcha-response,值为 {{ $json.token }}


API Key 的安全存放方式

推荐用 n8n 自带的 Credentials 系统,不要写死在节点里:

  1. 打开 Credentials → Add Credential → Header Auth
  2. 名称填:CaptchaAI API Key
  3. 把密钥填进去,n8n 会加密存储

也可以用环境变量

# In your n8n environment
export CAPTCHAAI_API_KEY="your_key_here"

在节点中这样引用:{{ $env.CAPTCHAAI_API_KEY }}


图片验证码怎么接入这套流程

图片验证码(Image/OCR)只需改提交节点参数:

  • methodbase64
  • body:Base64 编码后的图片(来自前面的节点或某个 URL)

图片是 URL 的话,先加一个 Code 节点转成 base64:

const imageUrl = $input.first().json.imageUrl;
const resp = await fetch(imageUrl);
const buffer = Buffer.from(await resp.arrayBuffer());
const base64 = buffer.toString('base64');

return [{ json: { imageBase64: base64 } }];

顺手加一个余额监控工作流

再建一个独立的定时工作流:

Cron (daily at 9 AM)
    ↓
HTTP Request: GET res.php?action=getbalance
    ↓
IF: balance < 5
    ↓
Slack / Email: "CaptchaAI balance low: $X.XX"

选型与排错

n8n 和 Zapier,哪个更适合验证码自动化

  • 循环 / 重试支持:n8n 原生支持(IF 循环、Loop 节点);Zapier 有限,只能靠 Paths 绕。
  • 自托管:n8n 支持且免费;Zapier 不支持,只有云端。
  • Code 节点:n8n 提供完整 JavaScript;Zapier 功能受限。
  • 成本:n8n 自托管免费,或选付费云端;Zapier 按任务计费。
  • 上手难度:n8n 中等;Zapier 更简单。

轮询重试是验证码工作流的核心逻辑,n8n 靠原生循环和 Code 节点能完整实现,这一点比 Zapier 更合适。

常见故障排查

  • 轮询循环一直停不下来:没设最大迭代次数 → 加一个计数器变量,24 次迭代后强制中断。
  • CAPCHA_NOT_READY 反复出现:第一次轮询前等待太短 → 把初始等待时间拉长到 15–20 秒。
  • 下一个节点拿不到 token:表达式路径写错了 → 核对 {{ $json.token }} 是否对应正确的输出字段。
  • 提示找不到凭据:环境变量没设置 → 设置好环境变量后重启 n8n。

常见问题

n8n 搭建验证码自动化要花钱吗?

不一定。n8n 自托管免费,只需一台能跑 Docker 或 Node.js 的服务器;云端版本才收订阅费。

轮询一直返回 CAPCHA_NOT_READY 怎么办?

多半是首次轮询等太早。把第 2 步等待时长调到 15–20 秒,多数任务此时已出结果。

一个工作流能同时处理多个验证码任务吗?

可以。用 Split In Batches 节点拆开跑,每项各走一遍提交 → 轮询 → 使用。

这套流程能处理 GeeTest 或其他类型的验证码吗?

能,思路一样,只是 method 和参数不同。国内站点更常见 GeeTest(极验)滑块验证码,CaptchaAI 支持 GeeTest v3,换成 gtchallengepageurl 即可复用轮询逻辑。


开始为你的 n8n 工作流接入验证码解决

CaptchaAI 官网 拿到 API Key,照上面的节点顺序搭起来即可。


相关指南

该文章已禁用评论。