Muốn giải CAPTCHA tự động trong n8n mà không viết một dòng code nào? Bạn chỉ cần 4 node HTTP Request nối theo trình tự gửi → polling → dùng token. Bài viết dựng workflow đó từng bước, kèm một node Code cho ai cần kiểm soát sâu hơn.
n8n hay Zapier: nên chọn công cụ nào để giải CAPTCHA?
Trước khi dựng 4 node bên dưới, đây là lý do n8n thường được chọn thay Zapier cho tác vụ giải CAPTCHA — n8n hỗ trợ vòng lặp (loop) ngay trên canvas, nên workflow tự động thử lại cho tới khi CaptchaAI trả kết quả mà không cần code phức tạp:
| Tính năng | n8n | Zapier |
|---|---|---|
| Hỗ trợ loop/retry | Có sẵn (IF loop, node Loop) | Hạn chế (chỉ Paths) |
| Tự host (self-hosted) | Có (miễn phí) | Không (chỉ cloud) |
| Node Code | JavaScript đầy đủ | Hạn chế |
| Chi phí | Miễn phí nếu self-host, hoặc trả phí bản cloud | Trả phí theo task |
| Độ khó thiết lập | Trung bình | Dễ |
n8n phù hợp hơn cho workflow giải CAPTCHA nhờ vòng lặp gốc và node Code linh hoạt — hai thứ Zapier không có sẵn ở gói cơ bản. Phần tiếp theo dựng đúng workflow đó, node theo node.
Sơ đồ workflow: gửi → polling → dùng token
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
Node 1 – Gửi CAPTCHA tới CaptchaAI
Thêm node HTTP Request với cấu hình sau:
- Phương thức:
POST - URL:
https://ocr.captchaai.com/in.php - Loại nội dung (Body Content Type):
Form URL Encoded
Tham số body: key = {{ $credentials.captchaaiApiKey }} (hoặc điền trực tiếp API key của bạn), method = userrecaptcha, googlekey = 6Le-SITEKEY, pageurl = https://example.com, json = 1.
Response:
{
"status": 1,
"request": "71823456"
}
Node 2 – Wait trước khi polling
Thêm node Wait:
- Wait Time:
10 - Đơn vị:
Seconds
Bỏ qua bước này là nguyên nhân phổ biến nhất khiến bạn nhận toàn CAPCHA_NOT_READY ở những lần poll đầu. Với reCAPTCHA v2, thời gian giải thường dưới 60 giây nên đừng đặt vòng lặp poll quá thưa.
Node 3 – Polling kết quả (vòng lặp tự retry)
n8n hỗ trợ vòng lặp qua node Loop Over Items, hoặc bằng cách nối đầu ra false của node IF ngược lại node trước đó.
Cách A: vòng lặp IF đơn giản
Thêm node HTTP Request (Polling):
- Phương thức:
GET - URL:
https://ocr.captchaai.com/res.php - Query Parameters:
key,action=get,id={{ $json.request }},json=1
Nối nó với node IF, so sánh {{ $json.status }} (Value 1) với 1 (Value 2) bằng toán tử Equal:
- Nhánh true → đi tiếp đến bước dùng token
- Nhánh false → node Wait (5 giây) → quay lại node Polling
Cách B: node Code cho polling loop
Cần kiểm soát chi tiết hơn (giới hạn số lần lặp, xử lý lỗi riêng)? Dùng node 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`);
Node 4 – Dùng token đã giải
Thêm một node HTTP Request khác để submit form kèm token vừa giải:
- Phương thức:
POST - URL:
https://staging.example.com/qa-form - Loại nội dung (Body Content Type):
Form URL Encoded
Tham số body gồm dữ liệu form của bạn cộng thêm tham số g-recaptcha-response, giá trị lấy từ {{ $json.token }}.
Lưu API key an toàn trong n8n
Dùng hệ thống Credentials của n8n thay vì gõ thẳng key vào node:
- Vào Credentials → Add Credential → Header Auth
- Đặt tên:
CaptchaAI API Key - Lưu khóa API an toàn
Hoặc dùng environment variable:
# In your n8n environment
export CAPTCHAAI_API_KEY="your_key_here"
Tham chiếu trong node: {{ $env.CAPTCHAAI_API_KEY }}
Workflow giải CAPTCHA hình ảnh (image/OCR)
Với CAPTCHA hình ảnh, chỉnh lại node Submit:
method:base64body: ảnh đã mã hóa base64 (từ node trước hoặc từ URL)
Để chuyển URL ảnh sang base64 ngay trong n8n, thêm node Code trước node submit:
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 } }];
Theo dõi số dư tài khoản tự động
Dựng thêm một workflow riêng, chạy theo lịch, tách khỏi workflow giải CAPTCHA chính để không bỏ sót lúc số dư sắp cạn giữa đợt test:
Cron (daily at 9 AM)
↓
HTTP Request: GET res.php?action=getbalance
↓
IF: balance < 5
↓
Slack / Email: "CaptchaAI balance low: $X.XX"
Ví dụ thực tế: đội QA outsourcing dùng n8n giải CAPTCHA trên staging
Nhiều công ty outsourcing và product startup ở TP.HCM, Hà Nội chạy hàng trăm test case regression mỗi ngày trên staging có bật reCAPTCHA hoặc Turnstile để mô phỏng production. Thay vì để tester bấm tay từng CAPTCHA, đội QA có thể:
- Tự host n8n trên VPS nội bộ, không phụ thuộc dịch vụ cloud bên ngoài.
- Gắn workflow 4 node ở trên vào pipeline CI, để CaptchaAI trả token trước khi Selenium hoặc Playwright submit form.
- Giới hạn chi phí theo gói thread — gói BASIC ($15/tháng, 5 thread) đã đủ chạy vài chục test case song song, chỉ nâng lên ADVANCE ($90/tháng, 50 thread) khi tần suất test tăng.
Khi log lại token và response trong workflow QA, chỉ lưu những gì cần cho việc debug — nguyên tắc tối thiểu hóa dữ liệu này cũng khớp tinh thần Nghị định 13/2023/NĐ-CP về bảo vệ dữ liệu cá nhân.
Các lỗi thường gặp khi build workflow
- Vòng polling chạy mãi không dừng — nguyên nhân: không giới hạn số lần lặp tối đa. Cách xử lý: thêm biến đếm, dừng sau 24 lần lặp.
CAPCHA_NOT_READYliên tục — nguyên nhân: Wait trước lần poll đầu quá ngắn. Cách xử lý: tăng Wait ban đầu lên 15–20 giây.- Token không có ở node tiếp theo — nguyên nhân: sai đường dẫn expression. Cách xử lý: kiểm tra
{{ $json.token }}đúng với output thực tế. - Không tìm thấy credential — nguyên nhân: environment variable chưa được set. Cách xử lý: restart n8n sau khi set env var.
Câu hỏi thường gặp
n8n có hỗ trợ Cloudflare Turnstile không?
Có. Đổi method thành turnstile và dùng sitekey thay vì googlekey trong node Submit.
Nên chọn gói CaptchaAI nào khi chạy nhiều workflow n8n song song?
Chọn theo số request đồng thời, không phải theo số workflow. Mỗi CAPTCHA đang chờ giải chiếm một thread; vượt quá 5 thread của BASIC thì cân nhắc STANDARD ($30/tháng, 15 thread) hoặc ADVANCE ($90/tháng, 50 thread).
Nếu CaptchaAI trả lỗi giữa vòng polling thì xử lý thế nào?
Ở node Code (Cách B), throw error ngay khi data.request khác CAPCHA_NOT_READY, để n8n dừng workflow và ghi log lỗi thay vì lặp vô thời hạn.
Bắt đầu tích hợp CaptchaAI vào n8n
Lấy API key tại captchaai.com và ghép 4 node ở trên vào workflow n8n hiện có của bạn.