Sản phẩmTích hợpTài nguyênTài liệuGiá cả
Bắt đầu ngay

© 2026 CapSolver. All rights reserved.

Liên hệ chúng tôi

Slack: lola@capsolver.com

Sản phẩm

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Tiện ích trình duyệt
  • Thêm nhiều loại CAPTCHA

Tích hợp

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Đối tác
  • Xem tất cả tích hợp

Tài nguyên

  • Chương trình giới thiệu
  • Tài liệu
  • Tham chiếu API
  • Blog
  • Câu hỏi thường gặp
  • Thuật ngữ
  • Trạng thái

Pháp lý

  • Điều khoản dịch vụ
  • Chính sách bảo mật
  • Chính sách hoàn tiền
  • Không bán thông tin cá nhân của tôi
//Cách giải bài toán ImageToText bằng CapSolver và n8n
Mar16, 2026

Cách giải bài toán ImageToText bằng CapSolver và n8n

Sora Fujimoto

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:

  • Một API giải quyết Hình ảnh thành Văn bản chấp nhận hình ảnh base64 và trả về văn bản được nhận dạng.

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:

  • Một tự động hóa biểu mẫu lấy hình ảnh captcha từ mộ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.

Hình ảnh thành Văn bản (ImageToTextTask) là gì?

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.

Các tham số bắt buộc

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

Các tham số tùy chọn

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

Các loại mô-đun

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

Điều kiện tiên quyết

Trước khi bắt đầu, hãy đảm bảo bạn có những điều sau:

  1. Một phiên bản n8n — Tự lưu trữ hoặc n8n Cloud
  2. Một tài khoản CapSolver — Đăng ký tại đây và lấy khóa API của bạn
  3. Nút CapSolver n8n — Đã có sẵn dưới dạng nút chính thức trong n8n (không cần cài đặt)

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.


Thiết lập CapSolver trong n8n

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.

Bước 1: Mở trang thông tin xác thực

Đ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.

Trang thông tin xác thực n8n hiển thị tài khoản CapSolver

Bước 2: Tạo thông tin xác thực CapSolver

  1. Nhấp vào Create credential (góc trên bên phải)
  2. Tìm kiếm "CapSolver" và chọn CapSolver API
  3. Nhập Khóa API của bạn — sao chép trực tiếp từ Bảng điều khiển CapSolver
  4. Để Allowed HTTP Request Domains được đặt thành All (mặc định)
  5. Nhấp vào Save

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ệ.

Cấu hình thông tin xác thực CapSolver với kiểm tra kết nối thành công

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!


Hiểu mã hóa Base64 cho hình ảnh Captcha

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.

CapSolver mong đợi gì

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ể:

  • Không có tiền tố data: — nếu bạn có data:image/png;base64,iVBORw0KGgo..., bạn phải loại bỏ phần data:image/png;base64,
  • Không có ký tự xuống dòng — chuỗi base64 phải là một dòng liên tục duy nhất không có ký tự \n
  • Không có khoảng trắng — không có khoảng trắng, tab hoặc các ký tự khoảng trắng khác

Cách lấy chuỗi Base64 sạch trong n8n

Khi 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ã:

javascript Copy
// 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 thường gặp

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 1: API giải quyết Hình ảnh thành Văn bản

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.

Cách hoạt động

Quy trình làm việc bao gồm sáu nút:

  1. Receive Solver Request — Webhook nhận các yêu cầu POST với dữ liệu hình ảnh
  2. Validate Image Input — Nút Mã kiểm tra body tồn tại và là base64 hợp lệ
  3. Solve Image Captcha — Nút CapSolver sử dụng Resource=Recognition, Operation=Image To Text
  4. Image Captcha Error? — Nút IF phân nhánh dựa trên việc giải quyết có thất bại hay không
  5. Respond to Webhook — Trả về văn bản được nhận dạng khi thành công
  6. Respond to Webhook Error — Trả về thông báo lỗi khi thất bại

Cấu hình nút

1. Receive Solver Request (Webhook)

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

2. Validate Image Input (Code)

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:

javascript Copy
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'
  }
}];

3. Solve Image Captcha (CapSolver)

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.

4. Image Captcha Error? (IF)

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.

5. Respond to Webhook (Success)

Cài đặt Giá trị
Phản hồi bằng JSON
Nội dung phản hồi ={{ JSON.stringify($json.data) }}

6. Respond to Webhook Error

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": "..." }

Kiểm tra

Gửi yêu cầu POST đến điểm cuối webhook của bạn:

bash Copy
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:

json Copy
{
  "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.

Nhập quy trình làm việc này

Sao chép JSON bên dưới và nhập nó vào n8n thông qua Menu -> Import from JSON:

Nhấp để mở rộng JSON quy trình làm việc
json Copy
{
  "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 2: Tự động hóa biểu mẫu — Giải Captcha hình ảnh và gửi

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:

  • Lịch trình: tự động chạy mỗi 6 giờ
  • Webhook: kích hoạt theo yêu cầu và trả về kết quả dưới dạng JSON

Cách hoạt động

Đường dẫn lịch trình:

Copy
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:

Copy
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

Cấu hình nút

1. Nút kích hoạt

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

2. Đặt cấu hình mục tiêu

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

3. Lấy hình ảnh Captcha (Yêu cầu HTTP)

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.

4. Chuyển đổi sang Base64 (Mã)

javascript Copy
// 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
  }
}];

5. Giải Captcha hình ảnh (Nhận dạng CapSolver)

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.

6. Gửi biểu mẫu với giải pháp (Yêu cầu HTTP)

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 }}

7. Kiểm tra kết quả gửi (IF)

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

Kiểm tra

Gửi yêu cầu POST để kích hoạt tự động hóa biểu mẫu:

bash Copy
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):

json Copy
{
  "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):

json Copy
{
  "action": "form_submission",
  "status": "failed",
  "statusCode": 403,
  "message": "Form submission was rejected by the target site",
  "submittedAt": "2026-03-16T12:00:00.000Z"
}

Nhập quy trình làm việc này

Sao chép JSON bên dưới và nhập nó vào n8n thông qua Menu -> Import from JSON:

Nhấp để mở rộng JSON quy trình làm việc
json Copy
{
  "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"
  }
}

Nhận dạng so với Mã thông báo: Tại sao Hình ảnh thành Văn bản lại khác biệt

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:

Các hoạt động Mã thông báo (reCAPTCHA, Turnstile, v.v.)

  1. CapSolver tạo một tác vụ trên máy chủ của nó.
  2. Tác vụ chạy không đồng bộ — nút thăm dò kết quả.
  3. Việc giải quyết có thể mất vài giây đến hơn một phút.
  4. Kết quả là một mã thông báo bạn gửi đến trang web mục tiêu để xác minh.
  5. Bạn cần websiteURL và websiteKey.

Các hoạt động Nhận dạng (Hình ảnh thành Văn bản)

  1. CapSolver xử lý hình ảnh ngay lập tức trong một yêu cầu duy nhất.
  2. Không thăm dò — kết quả được trả về trong cùng một phản hồi.
  3. Việc giải quyết là gần như tức thì (thường dưới 1 giây).
  4. Kết quả là văn bản được nhận dạng bạn nhập vào trường nhập captcha.
  5. Bạn cần hình ảnh base64, không phải URL hoặc khóa trang web.

Đâ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.


Những gì bạn có thể sẽ cần thay đổi

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:

1. Nguồn hình ảnh Captcha

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à:

  • được cung cấp từ một URL động thay đổi theo mỗi yêu cầu
  • được nhúng trong HTML trang dưới dạng thẻ <img> base64
  • được liên kết với một cookie phiên (vì vậy bạn cần cookie để lấy hình ảnh phù hợp)
  • được cung cấp với các tham số truy vấn chống bộ nhớ đệm

2. Xử lý phiên và Cookie

Nhiề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:

  • nắm bắt cookie phiên từ yêu cầu hình ảnh
  • chuyển cùng cookie đó khi gửi biểu mẫu
  • có thể trích xuất mã thông báo CSRF từ trang

3. Tên trường Captcha

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.

4. Mô-đun nhận dạng

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.

5. Các trường biểu mẫu bổ sung

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:

  • các tên trường khác nhau
  • các trường ẩn bổ sung
  • mã thông báo CSRF
  • tiêu đề giới thiệu
  • các cookie cụ thể

Khắc phục sự cố

"Không tìm thấy quyền truy cập ImageToTextTask"

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.

CapSolver trả về văn bản sai

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:

  • Thử một module khác — "common" so với "number" so với ID mô-đun cụ thể
  • Kiểm tra xem mã hóa base64 của bạn có đúng không — mã hóa không hợp lệ có thể tạo ra đầu vào bị xáo trộn
  • Xác minh hình ảnh không bị hỏng hoặc trống
  • Một số captcha bị biến dạng nặng có tỷ lệ thành công thấp hơn

"Mã hóa base64 không hợp lệ" hoặc Phản hồi trống

Nguyên nhân phổ biến:

  • Tiền tố data:image/...;base64, không bị loại bỏ
  • Có ký tự xuống dòng trong chuỗi base64
  • URL hình ảnh trả về HTML thay vì hình ảnh (kiểm tra Content-Type)
  • Nút Yêu cầu HTTP trả về trang lỗi, không phải hình ảnh

Không khớp phiên

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.

Gửi biểu mẫu trả về 403 hoặc lỗi Captcha

Điều này thường có nghĩa là:

  • Câu trả lời captcha được gửi quá muộn (một số captcha hết hạn)
  • Cookie phiên bị thiếu
  • Tên trường captcha sai
  • Mã thông báo CSRF bị thiếu
  • Cần thêm các trường ẩn

Các phương pháp hay nhất

  1. Gửi văn bản được nhận dạng ngay lập tức — captcha hình ảnh thường hết hạn trong vòng 60-120 giây.
  2. Giữ lại cookie phiên giữa việc lấy hình ảnh và gửi biểu mẫu.
  3. Loại bỏ tiền tố data: — luôn làm sạch base64 của bạn trước khi gửi đến CapSolver.
  4. Sử dụng mô-đun phù hợp — "common" cho chữ và số hỗn hợp, "number" chỉ cho chữ số.
  5. Xác thực base64 trong nút Mã trước khi gửi đến CapSolver để phát hiện lỗi mã hóa sớm.
  6. Kiểm tra hình ảnh — nếu nhận dạng thất bại, ghi lại chuỗi base64 và giải mã thủ công để xác minh đó là hình ảnh captcha hợp lệ.
  7. Xử lý thử lại — nếu văn bản được nhận dạng bị từ chối, bạn có thể muốn thêm một vòng lặp thử lại để lấy hình ảnh captcha mới và thử lại.
  8. Không cần proxy — không giống như các hoạt động Mã thông báo, Hình ảnh thành Văn bản không yêu cầu proxy. Dữ liệu hình ảnh được gửi trực tiếp đến máy chủ của CapSolver.

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!

Biểu ngữ mã thưởng CapSolver

Kết luậ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:

  • Hình ảnh thành Văn bản khác với các hoạt động Mã thông báo như thế nào — Nhận dạng là tức thì, không thăm dò, không cần proxy.
  • Các yêu cầu mã hóa Base64 — chỉ các chuỗi sạch, không có tiền tố data:, không có ký tự xuống dòng.
  • Một điểm cuối API giải quyết chấp nhận hình ảnh base64 và trả về văn bản được nhận dạng.
  • Một quy trình làm việc tự động hóa biểu mẫu lấy hình ảnh captcha, chuyển đổi nó, giải quyết nó và gửi biểu mẫu.
  • Cách chuyển đổi hình ảnh thành base64 trong n8n bằng cách sử dụng các nút Mã.
  • Các phương pháp hay nhất để xử lý phiên, lựa chọn mô-đun và quản lý lỗi.

Đ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.


Câu hỏi thường gặp

ImageToTextTask là gì?

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ải một captcha hình ảnh tốn bao nhiêu tiền?

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.

Mất bao lâu để giải một captcha hình ảnh?

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.

Tôi có cần proxy cho Hình ảnh thành Văn bản không?

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.

Các định dạng hình ảnh nào được hỗ trợ?

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.

Tham số 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.

CapSolver có hỗ trợ nhận dạng phân biệt chữ hoa chữ thường không?

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.

Tôi có thể sử dụng quy trình làm việc này với n8n Cloud không?

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.

Làm cách nào để xử lý các captcha bị ràng buộc phiê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:

  1. Thực hiện yêu cầu ban đầu đến trang captcha để lấy cookie phiên.
  2. Sử dụng cookie đó khi lấy hình ảnh captcha.
  3. Chuyển cùng cookie đó khi gửi biểu mẫu với văn bản được nhận dạng.

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.

Điều gì sẽ xảy ra nếu CapSolver trả về văn bản sai?

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:

  • Thử một mô-đun khác ("common", "number" hoặc ID mô-đun cụ thể).
  • Xác minh mã hóa base64 của bạn có đúng không.
  • Thêm một vòng lặp thử lại để lấy hình ảnh captcha mới khi thất bại.
  • Kiểm tra tài liệu CapSolver để biết các đề xuất mô-đun cho các kiểu captcha cụ thể.

CapSolver đã trả về mã thông báo nhưng trang web vẫn từ chối — tại sao?

Đố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:

  • Xác minh câu trả lời captcha có đúng không bằng cách kiểm tra giá trị solution.text.
  • Kiểm tra xử lý phiên — captcha có thể đã hết hạn hoặc cookie phiên có thể bị thiếu.
  • Xác minh tên trường biểu mẫu — câu trả lời captcha có thể cần đi vào một trường khác.
  • Tìm các trường bắt buộc bổ sung — mã thông báo CSRF, đầu vào ẩn hoặc dấu thời gian.
  • Kiểm tra thời gian — một số captcha hết hạn nhanh chóng, vì vậy hãy gửi câu trả lời ngay sau khi nhận dạng.

Xem thêm

n8nMar 09, 2026

Cách Giải reCAPTCHA v2/v3 Sử Dụng CapSolver và n8n

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.

Anh Tuan
Anh Tuan
n8nMar 12, 2026

Cách giải quyết GeeTest V3 trong n8n với CapSolver: Hướng dẫn tích hợp đầy đủ

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.

Nội dung

Emma Foster
Emma Foster
n8nMar 12, 2026

Cách giải GeeTest V4 trong n8n với CapSolver: Hướng dẫn tích hợp hoàn chỉnh

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

Sora Fujimoto
Sora Fujimoto
n8nMar 17, 2026

Cách sử dụng CapSolver trong n8n: Hướng dẫn toàn diện để giải CAPTCHA trong các quy trình làm việc của bạn

Học cách tích hợp CapSolver với n8n để giải CAPTCHAs và xây dựng các quy trình tự động đáng tin cậy một cách dễ dàng.

Anh Tuan
Anh Tuan
Blog
n8n