n8n 是一款开源工作流程自动化工具,具有本机循环支持,使其在验证码解决方面比 Zapier 更加灵活。您可以构建一个提交 → 轮询 → 使用自动重试直到解决完成的工作流程。
工作流程概述
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 请求 节点:
| 环境 | 价值 |
|---|---|
| 方法 | POST |
| 网址 | https://ocr.captchaai.com/in.php |
| 正文内容类型 | Form URL Encoded |
机身参数:
| 姓名 | 价值 |
|---|---|
key |
{{ $credentials.captchaaiApiKey }} 或对您的密钥进行硬编码 |
method |
userrecaptcha |
googlekey |
6Le-SITEKEY |
pageurl |
https://example.com |
json |
1 |
回复:
{
"status": 1,
"request": "71823456"
}
节点2:等待
添加 Wait 节点:
| 环境 | 价值 |
|---|---|
| 等待时间 | 10 |
| 单元 | Seconds |
这使得求解器有时间在第一次轮询之前开始处理。
节点 3:轮询结果(带循环)
n8n 支持通过 Loop Over Items 节点进行循环,或通过将 IF 节点的 false 输出连接回前一个节点来进行循环。
选项 A:简单 IF 循环
添加 HTTP 请求 节点(轮询):
| 环境 | 价值 |
|---|---|
| 方法 | GET |
| 网址 | https://ocr.captchaai.com/res.php |
| 查询参数 | key、action=get、id={{ $json.request }}、json=1 |
将其连接到 IF 节点:
| 健康)状况 | 价值 |
|---|---|
| 值1 | {{ $json.status }} |
| 手术 | Equal |
| 值2 | 1 |
- 真实输出 → 继续下一步操作(使用token)
- 错误输出 → 等待(5秒) → 返回Poll节点
选项B:代码节点
要进行更多控制,请使用 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 节点以使用已解析的令牌提交表单:
| 环境 | 价值 |
|---|---|
| 方法 | POST |
| 网址 | https://staging.example.com/submit |
| 正文内容类型 | Form URL Encoded |
身体参数包括您的表单数据以及:
| 姓名 | 价值 |
|---|---|
g-recaptcha-response |
{{ $json.token }} |
安全存储 API 密钥
使用 n8n 的 Credentials 系统:
- 转到 凭据 → 添加凭据 → 标头身份验证
- 名称:
CaptchaAI API Key - 安全地存放密钥
或者使用环境变量:
# In your n8n environment
export CAPTCHAAI_API_KEY="your_key_here"
节点中的引用:{{ $env.CAPTCHAAI_API_KEY }}
图像验证码工作流程
对于图像验证码,调整提交节点:
| 姓名 | 价值 |
|---|---|
method |
base64 |
body |
Base64 编码的图像(来自先前的节点或 URL) |
要将图像 URL 转换为 n8n 中的 base64,请在提交之前添加 Code 节点:
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 | 扎皮尔 |
|---|---|---|
| Loop/retry 支持 | 本机(IF 循环、循环节点) | 有限(仅限路径) |
| 自托管选项 | 是(免费) | 否(仅限云) |
| 代码节点 | 完整的 JavaScript | 有限的 |
| 成本 | 免费(自托管)或付费云 | 付费(每项任务) |
| 易于设置 | 缓和 | 简单的 |
由于其循环支持和代码节点,n8n 更适合验证码工作流程。
故障排除
| 问题 | 原因 | 处理方式 |
|---|---|---|
| 轮询循环永远运行 | 无最大迭代次数限制 | 添加一个计数器变量,24次迭代后中断 |
CAPCHA_NOT_READY 不间断 |
第一次投票前的等待时间太短 | 将初始等待时间增加到 15-20 秒 |
| 令牌在下一个节点中不可用 | 错误的表达路径 | 检查 {{ $json.token }} 是否与输出匹配 |
| 未找到凭证 | 环境变量未设置 | 设置环境变量后重新启动 n8n |
常问问题
我可以在一个工作流程中处理多个验证码吗?
是的。使用 Split In Batches 节点处理多个项目,每个项目都有自己的提交 → 轮询 → 使用流程。
n8n 支持旋转门吗?
是的。将 method 更改为 turnstile 并使用 sitekey 而不是 googlekey。
将验证码解决构建到您的 n8n 工作流程中
获取您的 API 密钥:验证码网站。