
Sora Fujimoto
AI Solutions Architect

CAPTCHA dựa trên hình ảnh có mặt ở khắp mọi nơi — biểu mẫu đăng nhập, trang đăng ký, trang web bán vé và cổng thông tin chính phủ. Chúng hiển thị một hình ảnh bị biến dạng của các chữ cái, số hoặc hỗn hợp cả hai, và yêu cầu người dùng nhập những gì họ thấy. Tự động hóa chúng bằng các công cụ truyền thống có nghĩa là xây dựng đường ống OCR của riêng bạn, xử lý các bộ lọc nhiễu và xử lý các trường hợp đặc biệt cho mọi phông chữ và kiểu biến dạng.
Điều gì sẽ xảy ra nếu bạn có thể tự động giải CAPTCHA hình ảnh trong quy trình làm việc n8n của mình — cho dù bạn đang xây dựng một API giải quyết có thể tái sử dụng hay tự động hóa việc gửi biểu mẫu yêu cầu đọc hình ảnh captcha — tất cả mà không cần đào tạo một mô hình nào?
Trong hướng dẫn này, bạn sẽ học cách kết hợp n8n (một công cụ tự động hóa quy trình làm việc trực quan) với CapSolver (một dịch vụ giải captcha được hỗ trợ bởi AI) để giải các captcha Hình ảnh thành Văn bản theo yêu cầu — dưới dạng một điểm cuối API độc lập hoặc là một bước trong bất kỳ quy trình làm việc tự động hóa nào.
Những gì bạn sẽ xây dựng:
API giải quyết — một điểm cuối có thể tái sử dụng mà các công cụ khác của bạn có thể gọi:
Quy trình làm việc sử dụng trực tiếp — CapSolver được nhúng như một bước trong một tự động hóa lớn hơn:
Hình ảnh thành Văn bản là dịch vụ nhận dạng dựa trên OCR của CapSolver. Bạn gửi một hình ảnh captcha được mã hóa base64 và CapSolver trả về văn bản được nhận dạng — chữ cái, số hoặc cả hai — ngay lập tức.
Điều này khác biệt cơ bản so với các hoạt động CapSolver khác như reCAPTCHA hoặc Turnstile:
| Tính năng | Hình ảnh thành Văn bản (Nhận dạng) | reCAPTCHA / Turnstile (Mã thông báo) |
|---|---|---|
| Loại tài nguyên | Nhận dạng | Mã thông báo |
| Đầu vào | Hình ảnh Base64 | URL trang web + khóa trang web |
| Kết quả | Văn bản được nhận dạng (ngay lập tức) | Mã thông báo (yêu cầu thăm dò) |
| Cần proxy | Không | Tùy thuộc vào loại tác vụ |
| Trường hợp sử dụng | Đọc văn bản bị biến dạng từ hình ảnh | Tạo mã thông báo xác minh |
Điểm khác biệt chính là các hoạt động Nhận dạng trả về kết quả ngay lập tức — không có việc tạo tác vụ rồi thăm dò. Bạn gửi hình ảnh, CapSolver đọc nó và văn bản được trả về trong một chu kỳ yêu cầu-phản hồi duy nhất.
| Tham số | Giá trị | Mô tả |
|---|---|---|
body |
Chuỗi Base64 | Hình ảnh captcha, được mã hóa base64. Không có ký tự xuống dòng, không có tiền tố data:image/...;base64, — chỉ là chuỗi base64 thô |
module |
"common" |
Mô-đun nhận dạng. "common" xử lý OCR chữ và số chung |
| Tham số | Mô tả |
|---|---|
websiteURL |
URL của trang nơi captcha xuất hiện (giúp CapSolver tối ưu hóa nhận dạng) |
images (1-9) |
Hình ảnh bổ sung cho mô-đun "number" khi giải các captcha số có nhiều hình ảnh |
| Mô-đun | Mục đích |
|---|---|
common |
OCR chung — chữ cái, số, ký tự hỗn hợp. Mặc định cho hầu hết các captcha |
number |
Captcha chỉ có số. Hỗ trợ giải quyết hàng loạt với tối đa 9 hình ảnh bổ sung thông qua tham số images |
Trước khi bắt đầu, hãy đảm bảo bạn có những điều sau:
Quan trọng: Đảm bảo bạn có đủ số dư trong tài khoản CapSolver của mình. Các tác vụ ImageToText tiêu thụ tín dụng dựa trên mức sử dụng.
CapSolver có sẵn dưới dạng tích hợp chính thức trong n8n — không cần cài đặt nút cộng đồng. Bạn có thể tìm thấy nó trực tiếp trong bảng nút khi xây dựng quy trình làm việc của mình.
Vì đây là một tích hợp chính thức, bạn cần tạo một thông tin xác thực trong n8n để nút CapSolver có thể xác thực với tài khoản của bạn.
Đi tới phiên bản n8n của bạn và điều hướng đến Settings -> Credentials. Bạn sẽ thấy tất cả các thông tin xác thực đã cấu hình của mình ở đây.

All (mặc định)n8n sẽ tự động kiểm tra kết nối. Bạn sẽ thấy một biểu ngữ màu xanh lá cây "Connection tested successfully" xác nhận khóa API của bạn hợp lệ.

Quan trọng: Mọi nút CapSolver trong quy trình làm việc của bạn sẽ tham chiếu thông tin xác thực này. Bạn chỉ cần tạo nó một lần — tất cả các quy trình làm việc giải quyết của bạn sẽ chia sẻ cùng một thông tin xác thực.
Bây giờ bạn đã sẵn sàng xây dựng quy trình làm việc giải quyết Hình ảnh thành Văn bản của mình!
Trước khi đi sâu vào các quy trình làm việc, điều quan trọng là phải hiểu các yêu cầu base64 cho ImageToTextTask. Đây là nguồn lỗi phổ biến nhất.
Tham số body phải chứa một chuỗi base64 sạch — các byte được mã hóa thô của tệp hình ảnh. Cụ thể:
data: — nếu bạn có data:image/png;base64,iVBORw0KGgo..., bạn phải loại bỏ phần data:image/png;base64,\nKhi bạn tìm nạp hình ảnh bằng nút Yêu cầu HTTP trong n8n, phản hồi đến dưới dạng dữ liệu nhị phân. Để chuyển đổi nó thành base64 cho CapSolver, hãy sử dụng nút Mã:
// Chuyển đổi dữ liệu hình ảnh nhị phân thành base64 sạch
const binaryData = $input.first().binary.data;
const base64String = binaryData.data; // Đã là base64 trong định dạng nhị phân của n8n
// Loại bỏ tiền tố data: nếu có (kiểm tra an toàn)
const cleanBase64 = base64String.replace(/^data:image\/\w+;base64,/, "");
// Loại bỏ bất kỳ ký tự xuống dòng nào
const finalBase64 = cleanBase64.replace(/\n/g, "");
return [{ json: { body: finalBase64 } }];
| Lỗi | Kết quả |
|---|---|
Gửi data:image/png;base64,... |
CapSolver từ chối nội dung là không hợp lệ |
| Chuỗi Base64 chứa ký tự xuống dòng | CapSolver không thể giải mã hình ảnh |
| Gửi URL hình ảnh thay vì base64 | Tham số sai — body mong đợi base64, không phải URL |
| Gửi một chuỗi trống | CapSolver trả về lỗi |
Quy trình làm việc này tạo một điểm cuối API POST chấp nhận hình ảnh captcha base64 và trả về văn bản được nhận dạng.
Quy trình làm việc bao gồm sáu nút:
body tồn tại và là base64 hợp lệ| Cài đặt | Giá trị |
|---|---|
| Phương thức HTTP | POST |
| Đường dẫn | solver-image-to-text |
| Phản hồi | Response Node |
Điều này tạo một điểm cuối tại: https://your-n8n-instance.com/webhook/solver-image-to-text
Nút này kiểm tra xem nội dung yêu cầu có chứa tham số body hợp lệ hay không và loại bỏ bất kỳ tiền tố data: hoặc ký tự xuống dòng ngẫu nhiên nào:
const body = $input.first().json.body;
if (!body || !body.body) {
return [{ json: { error: 'Missing required field: body (base64 encoded image)' } }];
}
let imageBase64 = String(body.body);
// Loại bỏ tiền tố data: nếu vô tình được bao gồm
imageBase64 = imageBase64.replace(/^data:image\/\w+;base64,/, '');
// Loại bỏ ký tự xuống dòng và khoảng trắng
imageBase64 = imageBase64.replace(/[\n\r\s]/g, '');
// Xác thực base64 cơ bản
if (!/^[A-Za-z0-9+/]+=*$/.test(imageBase64)) {
return [{ json: { error: 'Invalid base64 encoding in body field' } }];
}
return [{
json: {
body: imageBase64,
module: body.module || 'common'
}
}];
| Tham số | Giá trị | Mô tả |
|---|---|---|
| Tài nguyên | Recognition |
Chọn tài nguyên Nhận dạng (không phải Mã thông báo) |
| Hoạt động | Image To Text |
Hoạt động ImageToTextTask |
| Nội dung | {{ $json.body }} |
Chuỗi hình ảnh base64 sạch |
| Mô-đun | {{ $json.module }} |
Mô-đun nhận dạng (mặc định: common) |
Quan trọng: Trong nút CapSolver, bạn phải chọn Resource = Recognition trước, sau đó Operation = Image To Text. Điều này khác với các hoạt động Mã thông báo như reCAPTCHA hoặc Turnstile. Đồng thời chọn thông tin xác thực CapSolver của bạn trong nút này.
| Cài đặt | Giá trị |
|---|---|
| Điều kiện | ={{ $json.error }} không trống |
| Nhánh True | Chuyển đến nút Error Respond to Webhook |
| Nhánh False | Chuyển đến nút Success Respond to Webhook |
Nút CapSolver tiếp tục khi có lỗi (onError: continueRegularOutput), vì vậy các lỗi sẽ đến đây dưới dạng { "error": "..." } thay vì làm sập quy trình làm việc.
| Cài đặt | Giá trị |
|---|---|
| Phản hồi bằng | JSON |
| Nội dung phản hồi | ={{ JSON.stringify($json.data) }} |
| Cài đặt | Giá trị |
|---|---|
| Phản hồi bằng | JSON |
| Nội dung phản hồi | ={{ JSON.stringify({ error: $json.error }) }} |
Các thông báo lỗi tuân theo một trong hai định dạng:
| Điểm lỗi | Định dạng |
|---|---|
| Tạo tác vụ thất bại | { "error": "..." } |
| Quá trình nhận dạng thất bại | { "status": "failed", "error": "..." } |
Gửi yêu cầu POST đến điểm cuối webhook của bạn:
curl -X POST https://your-n8n-instance.com/webhook/solver-image-to-text \
-H "Content-Type: application/json" \
-d '{
"body": "iVBORw0KGgoAAAANSUhEUgAA...",
"module": "common"
}'
Phản hồi dự kiến:
{
"solution": {
"text": "xK7mQ"
},
"status": "ready"
}
Trường solution.text chứa văn bản captcha được nhận dạng. Đây là giá trị bạn sẽ nhập vào trường nhập captcha.
Sao chép JSON bên dưới và nhập nó vào n8n thông qua Menu -> Import from JSON:
{
"name": "Image To Text — Solver API",
"nodes": [
{
"parameters": {
"content": "## Image To Text — Solver API\n\n**Dành cho ai:** Các nhà phát triển cần một điểm cuối giải captcha dựa trên OCR cho các ứng dụng của họ.\n\n**Nó làm gì:** Chấp nhận một hình ảnh captcha được mã hóa base64 thông qua webhook, xác thực đầu vào, giải quyết nó bằng cách sử dụng nhận dạng ImageToTextTask của CapSolver và trả về văn bản được nhận dạng.\n\n**Cách hoạt động:**\n1. Webhook nhận một POST với `body` (hình ảnh base64) và `module` tùy chọn\n2. Nút Mã xác thực đầu vào base64 và loại bỏ bất kỳ tiền tố data: nào\n3. Nút Nhận dạng CapSolver giải quyết captcha hình ảnh ngay lập tức\n4. Nút IF kiểm tra lỗi\n5. Phản hồi trả về văn bản được nhận dạng hoặc chi tiết lỗi\n\n**Thiết lập:**\n1. Thêm khóa API CapSolver của bạn trong **Settings → Credentials**\n2. Kích hoạt quy trình làm việc để bật điểm cuối webhook\n3. Gửi hình ảnh base64 đến `/webhook/solver-image-to-text`",
"height": 480,
"width": 460,
"color": 1
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [-620, -280],
"id": "sticky-itt-main-001",
"name": "Sticky Note"
},
{
"parameters": {
"content": "### Nhận và Xác thực\nWebhook chấp nhận POST với hình ảnh base64. Nút Mã xác thực và làm sạch đầu vào.",
"height": 480,
"width": 700,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [-140, -280],
"id": "sticky-itt-section-002",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "### Giải Captcha hình ảnh\nNút Nhận dạng CapSolver — trả về văn bản được nhận dạng ngay lập tức (không thăm dò).",
"height": 480,
"width": 400,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [580, -280],
"id": "sticky-itt-section-003",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "### Kiểm tra lỗi và Phản hồi\nNút IF phân nhánh khi có lỗi. Thành công trả về văn bản được nhận dạng, thất bại trả về chi tiết lỗi.",
"height": 480,
"width": 900,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [1000, -280],
"id": "sticky-itt-section-004",
"name": "Sticky Note3"
},
{
"parameters": {
"content": "### Logic xác thực\nLoại bỏ tiền tố data:, loại bỏ ký tự xuống dòng, kiểm tra định dạng base64.",
"height": 480,
"width": 400,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [160, -280],
"id": "sticky-itt-section-005",
"name": "Sticky Note4"
},
{
"parameters": {
"content": "### Xử lý phản hồi\nThành công: trả về giải pháp với văn bản được nhận dạng. Lỗi: trả về thông báo lỗi.",
"height": 480,
"width": 500,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [1420, -280],
"id": "sticky-itt-section-006",
"name": "Sticky Note5"
},
{
"parameters": {
"httpMethod": "POST",
"path": "solver-image-to-text",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [-100, 0],
"id": "itt-11111111-1111-1111-1111-111111111101",
"name": "Receive Solver Request",
"webhookId": "itt-aaaa-bbbb-cccc-dddd-111111111101"
},
{
"parameters": {
"jsCode": "const body = $input.first().json.body;\n\nif (!body || !body.body) {\n return [{ json: { error: 'Missing required field: body (base64 encoded image)' } }];\n}\n\nlet imageBase64 = String(body.body);\n\n// Loại bỏ tiền tố data: nếu vô tình được bao gồm\nimageBase64 = imageBase64.replace(/^data:image\\/\\w+;base64,/, '');\n\n// Loại bỏ ký tự xuống dòng và khoảng trắng\nimageBase64 = imageBase64.replace(/[\\n\\r\\s]/g, '');\n\n// Xác thực base64 cơ bản\nif (!/^[A-Za-z0-9+\\/]+=*$/.test(imageBase64)) {\n return [{ json: { error: 'Invalid base64 encoding in body field' } }];\n}\n\nreturn [{\n json: {\n body: imageBase64,\n module: body.module || 'common'\n }\n}];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [200, 0],
"id": "itt-11111111-1111-1111-1111-111111111102",
"name": "Validate Image Input"
},
{
"parameters": {
"resource": "recognition",
"operation": "Image To Text",
"body": "={{ $json.body }}",
"module": "={{ $json.module }}"
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [620, 0],
"id": "itt-11111111-1111-1111-1111-111111111103",
"name": "Solve Image Captcha",
"onError": "continueRegularOutput",
"credentials": {
"capSolverApi": {
"id": "YOUR_CREDENTIAL_ID",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "itt-err-001",
"leftValue": "={{ $json.error }}",
"operator": {
"type": "string",
"operation": "isNotEmpty",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [1040, 0],
"id": "itt-11111111-1111-1111-1111-111111111104",
"name": "Image Captcha Error?"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify({ error: $json.error }) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.1,
"position": [1460, -100],
"id": "itt-11111111-1111-1111-1111-111111111105",
"name": "Respond to Webhook Error"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json.data) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.1,
"position": [1460, 100],
"id": "itt-11111111-1111-1111-1111-111111111106",
"name": "Respond to Webhook"
}
],
"connections": {
"Receive Solver Request": {
"main": [
[
{
"node": "Validate Image Input",
"type": "main",
"index": 0
}
]
]
},
"Validate Image Input": {
"main": [
[
{
"node": "Solve Image Captcha",
"type": "main",
"index": 0
}
]
]
},
"Solve Image Captcha": {
"main": [
[
{
"node": "Image Captcha Error?",
"type": "main",
"index": 0
}
]
]
},
"Image Captcha Error?": {
"main": [
[
{
"node": "Respond to Webhook Error",
"type": "main",
"index": 0
}
],
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
}
],
"active": false,
"settings": {
"executionOrder": "v1"
}
}
Quy trình làm việc này tự động hóa việc gửi biểu mẫu từ đầu đến cuối trên một trang web được bảo vệ bởi captcha hình ảnh. Nó lấy hình ảnh captcha từ trang web mục tiêu, chuyển đổi nó thành base64, giải quyết nó bằng CapSolver và gửi biểu mẫu với văn bản được nhận dạng.
Nó hỗ trợ hai chế độ kích hoạt:
Đường dẫn lịch trình:
Mỗi 6 giờ → Đặt cấu hình mục tiêu → Lấy hình ảnh Captcha → Chuyển đổi sang Base64
→ Giải Captcha hình ảnh → Gửi biểu mẫu với giải pháp → Kiểm tra kết quả gửi
→ Đánh dấu thành công / Đánh dấu thất bại
Đường dẫn Webhook:
Kích hoạt Webhook → Đặt cấu hình mục tiêu [Webhook] → Lấy hình ảnh Captcha [Webhook]
→ Chuyển đổi sang Base64 [Webhook] → Giải Captcha hình ảnh [Webhook]
→ Gửi biểu mẫu với giải pháp [Webhook] → Kiểm tra kết quả gửi [Webhook]
→ Đánh dấu thành công [Webhook] / Đánh dấu thất bại [Webhook] → Phản hồi Webhook
Kích hoạt lịch trình:
| Cài đặt | Giá trị |
|---|---|
| Khoảng thời gian | Mỗi 6 giờ |
Kích hoạt Webhook:
| Cài đặt | Giá trị |
|---|---|
| Phương thức HTTP | POST |
| Đường dẫn | image-captcha-form |
| Phản hồi | Response Node |
Nút này lưu trữ tất cả cấu hình cho trang web mục tiêu ở một nơi:
| Trường cấu hình | Mục đích |
|---|---|
captchaImageURL |
URL cung cấp hình ảnh captcha (ví dụ: https://example.com/captcha.png) |
formActionURL |
Điểm cuối nhận POST biểu mẫu |
captchaFieldName |
Tên trường biểu mẫu cho câu trả lời captcha (ví dụ: captcha, captcha_code, verification) |
module |
Mô-đun nhận dạng CapSolver (common cho OCR chung, number chỉ cho số) |
userAgent |
Chuỗi tác nhân người dùng để gửi cùng với các yêu cầu |
| Cài đặt | Giá trị |
|---|---|
| Phương thức | GET |
| URL | ={{ $json.captchaImageURL }} |
| Định dạng phản hồi | File (nhị phân) |
Điều này tải xuống hình ảnh captcha dưới dạng dữ liệu nhị phân. Phản hồi sẽ có sẵn trong $binary.data.
Lưu ý: Một số trang web yêu cầu cookie hoặc tiêu đề phiên để cung cấp hình ảnh captcha. Nếu captcha bị ràng buộc phiên, bạn có thể cần thêm một yêu cầu trước đó để lấy cookie phiên và chuyển nó đi.
// Chuyển đổi hình ảnh captcha nhị phân thành chuỗi base64 sạch
const binaryData = $input.first().binary.data;
const base64String = binaryData.data;
// Loại bỏ tiền tố data: nếu có
const cleanBase64 = base64String.replace(/^data:image\/\w+;base64,/, '');
// Loại bỏ bất kỳ ký tự xuống dòng nào
const finalBase64 = cleanBase64.replace(/\n/g, '');
// Chuyển cấu hình mục tiêu từ nút Set Target Config
const config = $('Set Target Config').first().json;
return [{
json: {
body: finalBase64,
module: config.module || 'common',
captchaFieldName: config.captchaFieldName,
formActionURL: config.formActionURL,
userAgent: config.userAgent
}
}];
| Tham số | Giá trị |
|---|---|
| Tài nguyên | Recognition |
| Hoạt động | Image To Text |
| Nội dung | {{ $json.body }} |
| Mô-đun | {{ $json.module }} |
Điều này trả về văn bản được nhận dạng ngay lập tức trong $json.data.solution.text.
| Cài đặt | Giá trị |
|---|---|
| Phương thức | POST |
| URL | ={{ $('Set Target Config').first().json.formActionURL }} |
| Loại nội dung | form-urlencoded |
| Trường nội dung | Các trường biểu mẫu + câu trả lời captcha |
Câu trả lời captcha đi vào trường được chỉ định bởi captchaFieldName:
| Trường | Giá trị |
|---|---|
username |
tên-người-dùng-của-bạn |
password |
mật-khẩu-của-bạn |
{{ captchaFieldName }} |
={{ $json.data.solution.text }} |
| Cài đặt | Giá trị |
|---|---|
| Điều kiện | {{ $json.statusCode < 400 }} — kiểm tra phản hồi HTTP có chỉ ra thành công hay không |
| Nhánh True | Đánh dấu thành công |
| Nhánh False | Đánh dấu thất bại |
Gửi yêu cầu POST để kích hoạt tự động hóa biểu mẫu:
curl -X POST https://your-n8n-instance.com/webhook/image-captcha-form \
-H "Content-Type: application/json" \
-d '{}'
Phản hồi dự kiến (thành công):
{
"action": "form_submission",
"status": "success",
"captchaText": "xK7mQ",
"message": "Form submitted successfully with solved captcha",
"submittedAt": "2026-03-16T12:00:00.000Z"
}
Phản hồi dự kiến (thất bại):
{
"action": "form_submission",
"status": "failed",
"statusCode": 403,
"message": "Form submission was rejected by the target site",
"submittedAt": "2026-03-16T12:00:00.000Z"
}
Sao chép JSON bên dưới và nhập nó vào n8n thông qua Menu -> Import from JSON:
{
"name": "Form Automation — Solve Image Captcha & Submit",
"nodes": [
{
"parameters": {
"content": "## Tự động hóa biểu mẫu — Giải Captcha hình ảnh và gửi\n\n**Dành cho ai:** Các nhóm tự động hóa việc gửi biểu mẫu trên các trang web được bảo vệ bởi CAPTCHA dựa trên hình ảnh.\n\n**Nó làm gì:** Lấy hình ảnh captcha từ trang web mục tiêu, chuyển đổi nó thành base64, giải quyết nó bằng OCR của CapSolver và gửi biểu mẫu với văn bản được nhận dạng.\n\n**Cách hoạt động:**\n1. Lịch trình (mỗi 6h) hoặc Webhook kích hoạt luồng\n2. Cấu hình mục tiêu xác định URL mục tiêu, tên trường và mô-đun\n3. Yêu cầu HTTP lấy hình ảnh captcha dưới dạng nhị phân\n4. Nút Mã chuyển đổi nhị phân thành base64 sạch\n5. Nhận dạng CapSolver giải quyết hình ảnh ngay lập tức\n6. Yêu cầu HTTP gửi biểu mẫu với văn bản được nhận dạng\n7. Nút IF kiểm tra việc gửi thành công\n\n**Thiết lập:**\n1. Thêm khóa API CapSolver của bạn trong **Settings → Credentials**\n2. Cập nhật Cấu hình mục tiêu với chi tiết trang web mục tiêu của bạn\n3. Cập nhật các trường biểu mẫu trong Gửi biểu mẫu để khớp với mục tiêu\n4. Kích hoạt quy trình làm việc",
"height": 480,
"width": 460,
"color": 1
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [-920, -380],
"id": "sticky-fa-main-001",
"name": "Sticky Note"
},
{
"parameters": {
"content": "### Đường dẫn lịch trình\nChạy tự động mỗi 6 giờ. Lấy captcha, giải quyết và gửi biểu mẫu.",
"height": 480,
"width": 2800,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [-440, -280],
"id": "sticky-fa-section-002",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "### Đường dẫn Webhook\nKích hoạt theo yêu cầu — logic tương tự, trả về kết quả dưới dạng phản hồi JSON.",
"height": 480,
"width": 2800,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [-440, 240],
"id": "sticky-fa-section-003",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "### Lấy và Chuyển đổi\nTải xuống hình ảnh captcha, chuyển đổi nhị phân thành base64.",
"height": 480,
"width": 700,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [170, -280],
"id": "sticky-fa-section-004",
"name": "Sticky Note3"
},
{
"parameters": {
"content": "### Giải quyết và Gửi\nCapSolver đọc hình ảnh, biểu mẫu được gửi với câu trả lời.",
"height": 480,
"width": 700,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [890, -280],
"id": "sticky-fa-section-005",
"name": "Sticky Note4"
},
{
"parameters": {
"content": "### Xử lý kết quả\nKiểm tra trạng thái HTTP, đánh dấu thành công hoặc thất bại.",
"height": 480,
"width": 700,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [1610, -280],
"id": "sticky-fa-section-006",
"name": "Sticky Note5"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 6
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [-400, 0],
"id": "fa-22222222-2222-2222-2222-222222222201",
"name": "Every 6 Hours"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "fa-cfg-001",
"name": "captchaImageURL",
"value": "https://YOUR-TARGET-SITE.com/captcha.png",
"type": "string"
},
{
"id": "fa-cfg-002",
"name": "formActionURL",
"value": "https://YOUR-TARGET-SITE.com/submit",
"type": "string"
},
{
"id": "fa-cfg-003",
"name": "captchaFieldName",
"value": "captcha",
"type": "string"
},
{
"id": "fa-cfg-004",
"name": "module",
"value": "common",
"type": "string"
},
{
"id": "fa-cfg-005",
"name": "userAgent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [-96, 0],
"id": "fa-22222222-2222-2222-2222-222222222202",
"name": "Set Target Config"
},
{
"parameters": {
"url": "={{ $json.captchaImageURL }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "user-agent",
"value": "={{ $json.userAgent }}"
}
]
},
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [208, 0],
"id": "fa-22222222-2222-2222-2222-222222222203",
"name": "Lấy hình ảnh Captcha"
},
{
"parameters": {
"jsCode": "// Chuyển đổi hình ảnh captcha nhị phân thành chuỗi base64 sạch\nconst binaryData = $input.first().binary.data;\nconst base64String = binaryData.data;\n\n// Loại bỏ tiền tố data: nếu có\nconst cleanBase64 = base64String.replace(/^data:image\\/\\w+;base64,/, '');\n\n// Loại bỏ bất kỳ ký tự xuống dòng nào\nconst finalBase64 = cleanBase64.replace(/\\n/g, '');\n\n// Chuyển cấu hình mục tiêu\nconst config = $('Set Target Config').first().json;\n\nreturn [{\n json: {\n body: finalBase64,\n module: config.module || 'common',\n captchaFieldName: config.captchaFieldName,\n formActionURL: config.formActionURL,\n userAgent: config.userAgent\n }\n}];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [512, 0],
"id": "fa-22222222-2222-2222-2222-222222222204",
"name": "Chuyển đổi sang Base64"
},
{
"parameters": {
"resource": "recognition",
"operation": "Image To Text",
"body": "={{ $json.body }}",
"module": "={{ $json.module }}"
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [930, 0],
"id": "fa-22222222-2222-2222-2222-222222222205",
"name": "Giải Captcha hình ảnh",
"onError": "continueRegularOutput",
"credentials": {
"capSolverApi": {
"id": "YOUR_CREDENTIAL_ID",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"method": "POST",
"url": "={{ $('Set Target Config').first().json.formActionURL }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "content-type",
"value": "application/x-www-form-urlencoded"
},
{
"name": "user-agent",
"value": "={{ $('Set Target Config').first().json.userAgent }}"
}
]
},
"sendBody": true,
"contentType": "form-urlencoded",
"bodyParameters": {
"parameters": [
{
"name": "username",
"value": "YOUR_USERNAME"
},
{
"name": "password",
"value": "YOUR_PASSWORD"
},
{
"name": "={{ $('Set Target Config').first().json.captchaFieldName }}",
"value": "={{ $json.data.solution.text }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": true,
"neverError": true
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [1234, 0],
"id": "fa-22222222-2222-2222-2222-222222222206",
"name": "Gửi biểu mẫu với giải pháp"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "fa-if-001",
"leftValue": "={{ $json.statusCode }}",
"rightValue": 400,
"operator": {
"type": "number",
"operation": "lt"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [1538, 0],
"id": "fa-22222222-2222-2222-2222-222222222207",
"name": "Kiểm tra kết quả gửi"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "fa-ms-001",
"name": "action",
"value": "form_submission",
"type": "string"
},
{
"id": "fa-ms-002",
"name": "status",
"value": "success",
"type": "string"
},
{
"id": "fa-ms-003",
"name": "captchaText",
"value": "={{ $('Giải Captcha hình ảnh').first().json.data.solution.text }}",
"type": "string"
},
{
"id": "fa-ms-004",
"name": "message",
"value": "Form submitted successfully with solved captcha",
"type": "string"
},
{
"id": "fa-ms-005",
"name": "submittedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [1842, -80],
"id": "fa-22222222-2222-2222-2222-222222222208",
"name": "Đánh dấu thành công"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "fa-mf-001",
"name": "action",
"value": "form_submission",
"type": "string"
},
{
"id": "fa-mf-002",
"name": "status",
"value": "failed",
"type": "string"
},
{
"id": "fa-mf-003",
"name": "statusCode",
"value": "={{ $json.statusCode }}",
"type": "number"
},
{
"id": "fa-mf-004",
"name": "message",
"value": "Form submission was rejected by the target site",
"type": "string"
},
{
"id": "fa-mf-005",
"name": "submittedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [1842, 120],
"id": "fa-22222222-2222-2222-2222-222222222209",
"name": "Đánh dấu thất bại"
},
{
"parameters": {
"httpMethod": "POST",
"path": "image-captcha-form",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [-400, 520],
"id": "fa-22222222-2222-2222-2222-222222222210",
"name": "Kích hoạt Webhook",
"webhookId": "fa-aaaa-bbbb-cccc-dddd-222222222210",
"onError": "continueRegularOutput"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "fa-cfg-011",
"name": "captchaImageURL",
"value": "https://YOUR-TARGET-SITE.com/captcha.png",
"type": "string"
},
{
"id": "fa-cfg-012",
"name": "formActionURL",
"value": "https://YOUR-TARGET-SITE.com/submit",
"type": "string"
},
{
"id": "fa-cfg-013",
"name": "captchaFieldName",
"value": "captcha",
"type": "string"
},
{
"id": "fa-cfg-014",
"name": "module",
"value": "common",
"type": "string"
},
{
"id": "fa-cfg-015",
"name": "userAgent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [-96, 520],
"id": "fa-22222222-2222-2222-2222-222222222211",
"name": "Đặt cấu hình mục tiêu [Webhook]"
},
{
"parameters": {
"url": "={{ $json.captchaImageURL }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "user-agent",
"value": "={{ $json.userAgent }}"
}
]
},
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [208, 520],
"id": "fa-22222222-2222-2222-2222-222222222212",
"name": "Lấy hình ảnh Captcha [Webhook]"
},
{
"parameters": {
"jsCode": "// Chuyển đổi hình ảnh captcha nhị phân thành chuỗi base64 sạch\nconst binaryData = $input.first().binary.data;\nconst base64String = binaryData.data;\n\n// Loại bỏ tiền tố data: nếu có\nconst cleanBase64 = base64String.replace(/^data:image\\/\\w+;base64,/, '');\n\n// Loại bỏ bất kỳ ký tự xuống dòng nào\nconst finalBase64 = cleanBase64.replace(/\\n/g, '');\n\n// Chuyển cấu hình mục tiêu\nconst config = $('Đặt cấu hình mục tiêu [Webhook]').first().json;\n\nreturn [{\n json: {\n body: finalBase64,\n module: config.module || 'common',\n captchaFieldName: config.captchaFieldName,\n formActionURL: config.formActionURL,\n userAgent: config.userAgent\n }\n}];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [512, 520],
"id": "fa-22222222-2222-2222-2222-222222222213",
"name": "Chuyển đổi sang Base64 [Webhook]"
},
{
"parameters": {
"resource": "recognition",
"operation": "Image To Text",
"body": "={{ $json.body }}",
"module": "={{ $json.module }}"
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [930, 520],
"id": "fa-22222222-2222-2222-2222-222222222214",
"name": "Giải Captcha hình ảnh [Webhook]",
"onError": "continueRegularOutput",
"credentials": {
"capSolverApi": {
"id": "YOUR_CREDENTIAL_ID",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"method": "POST",
"url": "={{ $('Đặt cấu hình mục tiêu [Webhook]').first().json.formActionURL }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "content-type",
"value": "application/x-www-form-urlencoded"
},
{
"name": "user-agent",
"value": "={{ $('Đặt cấu hình mục tiêu [Webhook]').first().json.userAgent }}"
}
]
},
"sendBody": true,
"contentType": "form-urlencoded",
"bodyParameters": {
"parameters": [
{
"name": "username",
"value": "YOUR_USERNAME"
},
{
"name": "password",
"value": "YOUR_PASSWORD"
},
{
"name": "={{ $('Đặt cấu hình mục tiêu [Webhook]').first().json.captchaFieldName }}",
"value": "={{ $json.data.solution.text }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": true,
"neverError": true
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [1234, 520],
"id": "fa-22222222-2222-2222-2222-222222222215",
"name": "Gửi biểu mẫu với giải pháp [Webhook]"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "fa-if-002",
"leftValue": "={{ $json.statusCode }}",
"rightValue": 400,
"operator": {
"type": "number",
"operation": "lt"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [1538, 520],
"id": "fa-22222222-2222-2222-2222-222222222216",
"name": "Kiểm tra kết quả gửi [Webhook]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "fa-ms-011",
"name": "action",
"value": "form_submission",
"type": "string"
},
{
"id": "fa-ms-012",
"name": "status",
"value": "success",
"type": "string"
},
{
"id": "fa-ms-013",
"name": "captchaText",
"value": "={{ $('Giải Captcha hình ảnh [Webhook]').first().json.data.solution.text }}",
"type": "string"
},
{
"id": "fa-ms-014",
"name": "message",
"value": "Form submitted successfully with solved captcha",
"type": "string"
},
{
"id": "fa-ms-015",
"name": "submittedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [1842, 440],
"id": "fa-22222222-2222-2222-2222-222222222217",
"name": "Đánh dấu thành công [Webhook]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "fa-mf-011",
"name": "action",
"value": "form_submission",
"type": "string"
},
{
"id": "fa-mf-012",
"name": "status",
"value": "failed",
"type": "string"
},
{
"id": "fa-mf-013",
"name": "statusCode",
"value": "={{ $json.statusCode }}",
"type": "number"
},
{
"id": "fa-mf-014",
"name": "message",
"value": "Form submission was rejected by the target site",
"type": "string"
},
{
"id": "fa-mf-015",
"name": "submittedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [1842, 600],
"id": "fa-22222222-2222-2222-2222-222222222218",
"name": "Đánh dấu thất bại [Webhook]"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [2146, 520],
"id": "fa-22222222-2222-2222-2222-222222222219",
"name": "Phản hồi Webhook"
}
],
"connections": {
"Every 6 Hours": {
"main": [
[
{
"node": "Set Target Config",
"type": "main",
"index": 0
}
]
]
},
"Set Target Config": {
"main": [
[
{
"node": "Lấy hình ảnh Captcha",
"type": "main",
"index": 0
}
]
]
},
"Lấy hình ảnh Captcha": {
"main": [
[
{
"node": "Chuyển đổi sang Base64",
"type": "main",
"index": 0
}
]
]
},
"Chuyển đổi sang Base64": {
"main": [
[
{
"node": "Giải Captcha hình ảnh",
"type": "main",
"index": 0
}
]
]
},
"Giải Captcha hình ảnh": {
"main": [
[
{
"node": "Gửi biểu mẫu với giải pháp",
"type": "main",
"index": 0
}
]
]
},
"Gửi biểu mẫu với giải pháp": {
"main": [
[
{
"node": "Kiểm tra kết quả gửi",
"type": "main",
"index": 0
}
]
]
},
"Kiểm tra kết quả gửi": {
"main": [
[
{
"node": "Đánh dấu thành công",
"type": "main",
"index": 0
}
],
[
{
"node": "Đánh dấu thất bại",
"type": "main",
"index": 0
}
]
]
},
"Kích hoạt Webhook": {
"main": [
[
{
"node": "Đặt cấu hình mục tiêu [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Đặt cấu hình mục tiêu [Webhook]": {
"main": [
[
{
"node": "Lấy hình ảnh Captcha [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Lấy hình ảnh Captcha [Webhook]": {
"main": [
[
{
"node": "Chuyển đổi sang Base64 [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Chuyển đổi sang Base64 [Webhook]": {
"main": [
[
{
"node": "Giải Captcha hình ảnh [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Giải Captcha hình ảnh [Webhook]": {
"main": [
[
{
"node": "Gửi biểu mẫu với giải pháp [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Gửi biểu mẫu với giải pháp [Webhook]": {
"main": [
[
{
"node": "Kiểm tra kết quả gửi [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Kiểm tra kết quả gửi [Webhook]": {
"main": [
[
{
"node": "Đánh dấu thành công [Webhook]",
"type": "main",
"index": 0
}
],
[
{
"node": "Đánh dấu thất bại [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Đánh dấu thành công [Webhook]": {
"main": [
[
{
"node": "Phản hồi Webhook",
"type": "main",
"index": 0
}
]
]
},
"Đánh dấu thất bại [Webhook]": {
"main": [
[
{
"node": "Phản hồi Webhook",
"type": "main",
"index": 0
}
]
]
}
],
"active": false,
"settings": {
"executionOrder": "v1"
}
}
Nếu bạn đã sử dụng nút CapSolver n8n cho reCAPTCHA, Turnstile hoặc các loại thử thách khác, bạn đã sử dụng tài nguyên Mã thông báo. Hình ảnh thành Văn bản sử dụng tài nguyên Nhận dạng và sự khác biệt là quan trọng:
websiteURL và websiteKey.Đây là lý do tại sao nút CapSolver n8n có hai tài nguyên riêng biệt:
| Tài nguyên | Hoạt động |
|---|---|
| Mã thông báo | reCAPTCHA v2, reCAPTCHA v3, Cloudflare Turnstile, Cloudflare Challenge, GeeTest V3, GeeTest V4, DataDome, AWS WAF, MTCaptcha |
| Nhận dạng | Hình ảnh thành Văn bản |
Khi cấu hình nút CapSolver cho Hình ảnh thành Văn bản, hãy đảm bảo bạn chọn Resource = Recognition trước — điều này sẽ thay đổi các hoạt động và tham số có sẵn.
Các quy trình làm việc này là các mẫu. Trên một mục tiêu thực tế, bạn nên mong đợi tùy chỉnh:
Mẫu tự động hóa biểu mẫu lấy hình ảnh từ một URL duy nhất (captchaImageURL). Trong thực tế, hình ảnh captcha có thể là:
<img> base64Nhiều hệ thống captcha hình ảnh ràng buộc phiên — hình ảnh captcha được liên kết với một phiên phía máy chủ. Nếu bạn lấy hình ảnh trong một yêu cầu và gửi câu trả lời trong một yêu cầu khác, bạn cần:
Các trang web khác nhau sử dụng các tên trường biểu mẫu khác nhau cho câu trả lời captcha:
| Tên trường phổ biến |
|---|
captcha |
captcha_code |
verification |
captcha_text |
answer |
security_code |
Kiểm tra HTML biểu mẫu để tìm tên trường chính xác.
Hầu hết các captcha hình ảnh hoạt động với module: "common". Nhưng nếu captcha chỉ chứa số, hãy thử module: "number" — nó được tối ưu hóa cho nhận dạng số và có thể cho kết quả tốt hơn.
Mẫu bao gồm các trường giữ chỗ username và password. Mục tiêu của bạn có thể yêu cầu:
Lỗi này có nghĩa là tài khoản hoặc gói CapSolver của bạn không bao gồm quyền truy cập ImageToText. Kiểm tra bảng điều khiển CapSolver của bạn để xác minh gói của bạn bao gồm dịch vụ này.
Nhận dạng captcha hình ảnh không chính xác 100%. Nếu bạn nhận được kết quả không chính xác:
module khác — "common" so với "number" so với ID mô-đun cụ thểNguyên nhân phổ biến:
data:image/...;base64, không bị loại bỏNếu việc gửi biểu mẫu luôn thất bại ngay cả với văn bản được nhận dạng chính xác, nguyên nhân rất có thể là không khớp phiên giữa việc lấy hình ảnh và gửi biểu mẫu. Đảm bảo bạn đang chuyển cùng một cookie phiên giữa cả hai yêu cầu.
Điều này thường có nghĩa là:
data: — luôn làm sạch base64 của bạn trước khi gửi đến CapSolver."common" cho chữ và số hỗn hợp, "number" chỉ cho chữ số.Sẵn sàng bắt đầu? Đăng ký CapSolver và sử dụng mã thưởng n8n để nhận thêm 8% tiền thưởng cho lần nạp đầu tiên của bạn!

Bạn đã học cách xây dựng API giải quyết Hình ảnh thành Văn bản và quy trình làm việc tự động hóa biểu mẫu bằng cách sử dụng n8n và CapSolver.
Tóm tắt:
Điểm mấu chốt: Hình ảnh thành Văn bản là hoạt động CapSolver đơn giản nhất để tích hợp — bạn gửi hình ảnh base64 và nhận lại văn bản ngay lập tức. Thử thách thường nằm ở quy trình làm việc xung quanh: lấy hình ảnh đúng cách, duy trì trạng thái phiên và gửi câu trả lời vào trường biểu mẫu chính xác.
Mẹo: Các quy trình làm việc này sử dụng các kích hoạt Lịch trình + Webhook, nhưng bạn có thể hoán đổi nút kích hoạt thành bất kỳ kích hoạt n8n nào — thủ công, sự kiện ứng dụng, gửi biểu mẫu, v.v. Sau khi giải captcha, hãy sử dụng các nút tích hợp của n8n để lưu kết quả vào Google Sheets, cơ sở dữ liệu, bộ nhớ đám mây hoặc gửi cảnh báo qua Telegram/Slack/Email.
ImageToTextTask là dịch vụ nhận dạng captcha dựa trên OCR của CapSolver. Bạn gửi một hình ảnh captcha được mã hóa base64 và CapSolver trả về văn bản được nhận dạng — chữ cái, số hoặc cả hai. Nó sử dụng tài nguyên Nhận dạng trong nút CapSolver n8n, khác với tài nguyên Mã thông báo được sử dụng cho reCAPTCHA, Turnstile và các loại thử thách khác.
Giá cả thay đổi tùy theo mức sử dụng. Kiểm tra trang giá CapSolver để biết giá ImageToText hiện tại. Các tác vụ nhận dạng hình ảnh thường là một trong những hoạt động CapSolver có giá cả phải chăng nhất.
Hình ảnh thành Văn bản là một hoạt động Nhận dạng, có nghĩa là kết quả được trả về ngay lập tức — thường dưới 1 giây. Không có việc tạo tác vụ hoặc độ trễ thăm dò như với các hoạt động Mã thông báo.
Không. Không giống như các hoạt động Mã thông báo (reCAPTCHA, Turnstile, Cloudflare Challenge), Hình ảnh thành Văn bản không yêu cầu proxy. Bạn đang gửi dữ liệu hình ảnh trực tiếp đến CapSolver — không có tương tác trình duyệt hoặc truy cập trang web nào liên quan.
CapSolver chấp nhận các định dạng hình ảnh phổ biến (PNG, JPEG, GIF, BMP) dưới dạng dữ liệu được mã hóa base64. Hình ảnh phải chứa một captcha có thể nhìn thấy — không có hình ảnh trống, bị hỏng hoặc quá lớn.
module làm gì?Tham số module cho CapSolver biết nên sử dụng công cụ nhận dạng nào:
"common" — OCR chung cho chữ cái, số và ký tự hỗn hợp. Đây là mặc định và hoạt động cho hầu hết các captcha."number" — Tối ưu hóa cho captcha chỉ có số. Cũng hỗ trợ giải quyết hàng loạt với tối đa 9 hình ảnh bổ sung."module_001" đến "module_032" — Các công cụ chuyên biệt cho các kiểu captcha cụ thể. Kiểm tra tài liệu CapSolver để biết chi tiết về từng mô-đun.Không. Nhận dạng Hình ảnh thành Văn bản của CapSolver không hỗ trợ phân biệt chữ hoa chữ thường. Nếu trang web mục tiêu yêu cầu câu trả lời captcha phân biệt chữ hoa chữ thường, kết quả nhận dạng có thể không khớp. Đây là một hạn chế đã biết.
Có. Quy trình làm việc này hoạt động với cả n8n tự lưu trữ và n8n Cloud. Nút CapSolver đã có sẵn dưới dạng tích hợp chính thức — chỉ cần thêm thông tin xác thực API của bạn.
Nhiều trang web liên kết hình ảnh captcha với một phiên máy chủ. Để xử lý điều này:
Trong n8n, bạn có thể trích xuất cookie từ tiêu đề phản hồi Yêu cầu HTTP và chuyển chúng đến các yêu cầu tiếp theo.
Nhận dạng captcha hình ảnh không chính xác 100% — đặc biệt đối với các hình ảnh bị biến dạng nặng hoặc nhiễu. Nếu bạn nhận được kết quả không chính xác:
"common", "number" hoặc ID mô-đun cụ thể).Đối với Hình ảnh thành Văn bản, CapSolver trả về văn bản được nhận dạng, không phải mã thông báo. Nếu việc gửi biểu mẫu bị từ chối:
solution.text.Xây dựng API giải eCAPTCHA v2/v3 bằng CapSolver và n8n. Tìm hiểu cách tự động hóa việc giải token, gửi token đến website và trích xuất dữ liệu được bảo vệ mà không cần lập trình.

Hãy tìm hiểu cách tích hợp CapSolver với n8n để giải quyết bài toán GeeTest V3 và xây dựng các quy trình tự động hóa đáng tin cậy.
