CAPSOLVER
Blog
Cách giải các câu đố hình ảnh trong n8n với Vision Engine của CapSolver

Làm thế nào để giải các câu đố thị giác trong n8n với CapSolver

Logo of CapSolver

Anh Tuan

Data Science Expert

18-Mar-2026

Các câu đố hình ảnh đang xuất hiện ở khắp mọi nơi: CAPTCHA trượt yêu cầu kéo một mảnh vào vị trí đúng, các thử thách xoay hình ảnh để căn chỉnh, lưới chọn đối tượng, và nhận diện văn bản trong GIF động. Những điều này không phải là CAPTCHA dựa trên văn bản truyền thống, cũng không phải là các thử thách dựa trên token (như reCAPTCHA hay Turnstile) mà trả về một chuỗi bạn gửi cùng với biểu mẫu. Chúng là các thử thách hình ảnh mà đầu vào là một bức ảnh và đầu ra là một phép đo — khoảng cách tính bằng pixel, góc tính bằng độ, tập hợp tọa độ, hoặc văn bản được nhận diện.

Đó chính là điều mà CapSolver's Vision Engine giải quyết. Nó sử dụng AI để phân tích hình ảnh câu đố hình ảnh và trả về câu trả lời chính xác mà tự động hóa của bạn cần để tiếp tục.

Trong hướng dẫn này, bạn sẽ học cách sử dụng Vision Engine trong n8n thông qua nút cộng đồng CapSolver. Hướng dẫn này bao gồm quy trình làm việc cơ bản của API Solver và một giải pháp cho câu đố trượt thực tế, bao gồm việc tải hình ảnh câu đố, chuyển đổi chúng thành chuỗi base64, giải câu đố trượt và trả về khoảng cách tính bằng pixel.

Lưu ý quan trọng: Vision Engine là một thao tác nhận diện, không phải là thao tác token. Điều này có nghĩa là kết quả sẽ được trả về ngay lập tức trong một lần gọi API — không cần đợi, không có vòng lặp getTaskResult, và không có thời gian chờ hết hạn. Bạn gửi hình ảnh, và bạn sẽ nhận được câu trả lời.


Cách Vision Engine Khác Với Các Thao Tác CapSolver Khác

Hầu hết các thao tác CapSolver trong n8n là các nhiệm vụ token. Bạn gửi các tham số trang web (URL, site key, proxy), CapSolver giải quyết thử thách trong nền, và quy trình làm việc của bạn sẽ kiểm tra kết quả. Đầu ra là một chuỗi token mà bạn sau đó gửi đến trang đích.

Vision Engine hoạt động khác biệt:

Yếu tố Thao tác Token (reCAPTCHA, Turnstile, v.v.) Vision Engine (Nhận diện)
Nguồn lực Token Nhận diện
Đầu vào URL trang web, site key, proxy Hình ảnh base64 (nhiều hình ảnh), tên mô-đun
Xử lý Bất đồng bộ — kiểm tra kết quả Tức thì — một lần gọi API
Đầu ra Chuỗi token Pixel, độ, tọa độ hoặc văn bản
Proxy Thường được yêu cầu Không cần
Trường hợp sử dụng Gửi token để vượt qua rào cản thử thách Hiểu câu đố hình ảnh để tự động hóa tương tác

Vision Engine gần giống với chuyển đổi hình ảnh sang văn bản (OCR) hơn là giải CAPTCHA, nhưng nó vượt xa việc nhận diện văn bản đơn giản. Trong khi OCR đọc các ký tự từ một hình ảnh tĩnh, Vision Engine hiểu được mối quan hệ không gian — nó có thể tính toán khoảng cách cần kéo mảnh trượt, góc cần xoay hình ảnh, các khu vực của hình ảnh nào phù hợp với câu hỏi, hoặc văn bản bị ẩn trong GIF động.


Các Mô-đun Hiện Có

Vision Engine hỗ trợ nhiều mô hình AI, mỗi mô hình được thiết kế cho một loại câu đố hình ảnh cụ thể:

Mô-đun Mục đích Đầu vào Trả về
slider_1 Giải câu đố trượt image (mảnh câu đố) + imageBackground (nền có vị trí trượt) Khoảng cách tính bằng pixel
rotate_1 Xoay hình ảnh đơn image + imageBackground Góc tính bằng độ
rotate_2 Xoay nhiều hình ảnh (trong + ngoài) image (hình ảnh bên trong) Góc tính bằng độ
shein Chọn đối tượng/vùng image + question (điều cần chọn) Mảng rects — các hộp giới hạn [{x1, y1, x2, y2}]
ocr_gif Nhận diện văn bản trong GIF động image (base64 của GIF) Chuỗi văn bản được nhận diện

Khi Nào Sử Dụng Mỗi Mô-đun

slider_1 — Loại CAPTCHA hình ảnh phổ biến nhất. Người dùng nhìn thấy hình ảnh nền với mảnh bị thiếu và mảnh câu đố riêng biệt. Mục tiêu là xác định số pixel cần kéo mảnh sang phải. Cả image (mảnh câu đố) và imageBackground (nền đầy đủ với vị trí trượt) đều cần thiết.

rotate_1 — Một hình ảnh đơn cần xoay đúng hướng. Cả imageimageBackground đều cần thiết. Động cơ trả về góc tính bằng độ.

rotate_2 — Hai hình ảnh đồng tâm (hình ảnh bên trong và vòng ngoài). Hình ảnh bên trong cần xoay để khớp với vòng ngoài. Chỉ cần image. Động cơ trả về góc.

shein — Được sử dụng cho các thử thách yêu cầu "chọn các mục phù hợp" hoặc "nhấn vào khu vực đúng." Cần image cộng với tham số question mô tả điều gì cần tìm. Trả về tọa độ hộp giới hạn cho mỗi khu vực phù hợp.

ocr_gif — GIF động mà văn bản chớp qua các khung, khiến nó không thể đọc được bằng OCR thông thường. Động cơ phân tích chuyển động và trích xuất văn bản.


Điều Kiện Tiên决

Trước khi bắt đầu, hãy đảm bảo bạn có:

  1. Một cài đặt n8n (tự lưu trữ hoặc đám mây)
  2. Một tài khoản CapSolver với khóa API và số dư — đăng ký tại đây
  3. Nút cộng đồng CapSolver đã cài đặt trong n8n (n8n-nodes-capsolver)
  4. Một thẻ xác thực CapSolver được cấu hình trong n8n (Cài đặt > Thẻ xác thực > CapSolver API)

Không cần proxy cho các nhiệm vụ Vision Engine.


Cài Đặt Nút CapSolver Cho Vision Engine

Trong nút CapSolver của n8n, cấu hình các cài đặt sau:

Cài đặt Giá trị
Nguồn lực Nhận diện
Thao tác Vision Engine
module Tên mô-đun (ví dụ: slider_1, rotate_1, ocr_gif)
image Chuỗi base64 của hình ảnh (không có tiền tố data:image/...;base64,)
imageBackground Chuỗi base64 của hình ảnh nền (tùy chọn — cần thiết cho slider_1rotate_1)
question Câu hỏi văn bản (tùy chọn — cần thiết chỉ cho mô-đun shein)
websiteURL URL trang nguồn (tùy chọn — có thể cải thiện độ chính xác)

Trường type sẽ tự động được đặt thành VisionEngine khi bạn chọn thao tác Vision Engine.

Yêu cầu Chuỗi Base64

Các trường imageimageBackground phải là chuỗi base64 nguyên bản — không có tiền tố URI dữ liệu, không có dòng mới:

  • Đúng: /9j/4AAQSkZJRgABA... (base64 nguyên bản)
  • Sai: data:image/jpeg;base64,/9j/4AAQSkZJRgABA... (có tiền tố)

Nếu hình ảnh nguồn là URL, bạn phải tải nó trước và chuyển đổi thành base64. Nếu nó đã có tiền tố data:image/...;base64,, hãy xóa nó trước khi truyền cho nút CapSolver.


Quy Trình 1: Vision Engine — API Solver

Quy trình này mở rộng Vision Engine thành một điểm cuối API REST đơn giản. Gửi yêu cầu POST với tên mô-đun và hình ảnh base64, và nhận được giải pháp dưới dạng JSON.

Luồng Nút

Copy
Nhận Yêu cầu Giải Đáp (Webhook POST)
  → Xác minh Đầu vào (Code)
    → Giải Câu Đố Hình Ảnh (CapSolver — Nhận Diện — Vision Engine)
      → Lỗi Vision Engine? (IF)
        → true: Trả lời Webhook Lỗi
        → false: Trả lời Webhook (Thành Công)

Cách Hoạt Động

1. Nhận Yêu cầu Giải Đáp

Một điểm cuối webhook chấp nhận các yêu cầu POST với nội dung JSON chứa:

json Copy
{
  "module": "slider_1",
  "image": "/9j/4AAQSkZJRgABA...",
  "imageBackground": "/9j/4AAQSkZJRgABA...",
  "question": "",
  "websiteURL": ""
}

2. Xác minh Đầu vào

Nút Code kiểm tra xem image có tồn tại và module có phải là một giá trị được hỗ trợ (slider_1, rotate_1, rotate_2, shein, ocr_gif) không. Nếu xác minh thất bại, nó sẽ thiết lập trường error.

3. Giải Câu Đố Hình Ảnh

Nút CapSolver được cấu hình với:

  • Nguồn lực: Nhận diện
  • Thao tác: Vision Engine
  • module: từ nội dung yêu cầu
  • image: từ nội dung yêu cầu
  • imageBackground: từ nội dung yêu cầu (chuỗi trống nếu không cung cấp)
  • question: từ nội dung yêu cầu (chuỗi trống nếu không cung cấp)

Vì đây là nhiệm vụ nhận diện, kết quả sẽ được trả về ngay lập tức.

4. Xử lý Lỗi

Nút IF kiểm tra lỗi. Nếu nút CapSolver trả về lỗi (mô-đun sai, hình ảnh không hợp lệ, v.v.), webhook lỗi sẽ được kích hoạt. Ngược lại, phản hồi thành công sẽ trả về giải pháp.

Yêu cầu và Phản hồi Dự kiến

Yêu cầu câu đố trượt:

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/vision-engine-solver \
  -H "Content-Type: application/json" \
  -d '{
    "module": "slider_1",
    "image": "BASE64_PUZZLE_PIECE",
    "imageBackground": "BASE64_BACKGROUND"
  }'

Phản hồi thành công:

json Copy
{
  "solution": {
    "distance": 142,
    "module": "slider_1"
  }
}

Yêu cầu OCR GIF:

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/vision-engine-solver \
  -H "Content-Type: application/json" \
  -d '{
    "module": "ocr_gif",
    "image": "BASE64_GIF_DATA"
  }'

Phản hồi thành công:

json Copy
{
  "solution": {
    "text": "x7Km9",
    "module": "ocr_gif"
  }
}

Nhập Quy Trình Này

Click để mở rộng JSON quy trình
json Copy
{
  "name": "Vision Engine — Solver API",
  "nodes": [
    {
      "parameters": {
        "content": "## Vision Engine — Solver API\n\n**Đối tượng sử dụng:** Các nhà phát triển và đội ngũ tự động hóa cần giải các câu đố hình ảnh (trượt, xoay, chọn đối tượng, OCR GIF) thông qua điểm cuối REST đơn giản.\n\n**Chức năng:** Nhận chuỗi base64 của hình ảnh và tên mô-đun, gửi nó đến Vision Engine của CapSolver, và trả về giải pháp ngay lập tức.\n\n**Cách hoạt động:**\n1. Webhook nhận POST với `module`, `image`, và các tham số tùy chọn `imageBackground` / `question`\n2. Nút Code xác minh đầu vào (hình ảnh tồn tại, mô-đun hợp lệ)\n3. Nút CapSolver Nhận Diện giải câu đố hình ảnh\n4. Trả về giải pháp hoặc lỗi dưới dạng JSON\n\n**Cài đặt:**\n1. Thêm khóa API CapSolver của bạn dưới **Cài đặt → Thẻ xác thực**\n2. Kích hoạt quy trình\n3. Gửi POST đến `/webhook/vision-engine-solver` với dữ liệu hình ảnh của bạn",
        "height": 560,
        "width": 460,
        "color": 1
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-920, -380],
      "id": "sticky-ve-main-001",
      "name": "Ghi chú Dính"
    },
    {
      "parameters": {
        "content": "### Xác minh Đầu vào\nKiểm tra xem `image` có tồn tại và `module` có phải là một trong các giá trị sau: slider_1, rotate_1, rotate_2, shein, ocr_gif",
        "height": 480,
        "width": 440,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-100, -280],
      "id": "sticky-ve-section-002",
      "name": "Ghi chú Dính1"
    },
    {
      "parameters": {
        "content": "### Vision Engine CapSolver\nNguồn lực Nhận Diện — kết quả tức thì, không cần kiểm tra. Trả về khoảng cách, góc, tọa độ hoặc văn bản tùy theo mô-đun.",
        "height": 480,
        "width": 440,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [380, -280],
      "id": "sticky-ve-section-003",
      "name": "Ghi chú Dính2"
    },
    {
      "parameters": {
        "content": "### Xử lý Lỗi\nKiểm tra lỗi từ CapSolver (hình ảnh không hợp lệ, mô-đun không hỗ trợ, v.v.) và trả về phản hồi lỗi có cấu trúc.",
        "height": 480,
        "width": 440,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [860, -280],
      "id": "sticky-ve-section-004",
      "name": "Ghi chú Dính3"
    },
    {
      "parameters": {
        "content": "### Triggers Webhook\nPOST /webhook/vision-engine-solver với nội dung JSON chứa module, image và các tham số tùy chọn imageBackground / question.",
        "height": 480,
        "width": 440,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-580, -280],
      "id": "sticky-ve-section-005",
      "name": "Ghi chú Dính4"
    },
    {
      "parameters": {
        "content": "### Phản hồi Thành Công\nTrả về đối tượng giải pháp đầy đủ từ CapSolver — nội dung thay đổi tùy theo loại mô-đun.",
        "height": 480,
        "width": 440,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [1340, -280],
      "id": "sticky-ve-section-006",
      "name": "Ghi chú Dính5"
    },
    {
      "parameters": {
        "content": "### Phản hồi Lỗi\nTrả về thông báo lỗi từ CapSolver hoặc từ xác minh đầu vào.",
        "height": 480,
        "width": 440,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [1340, 240],
      "id": "sticky-ve-section-007",
      "name": "Ghi chú Dính6"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "vision-engine-solver",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [-540, 0],
      "id": "ve-api-11111111-1111-1111-1111-111111111101",
      "name": "Nhận Yêu cầu Giải Đáp",
      "webhookId": "ve-api-11111111-aaaa-bbbb-cccc-111111111101"
    },
    {
      "parameters": {
        "jsCode": "const body = $input.first().json.body || {};\nconst validModules = ['slider_1', 'rotate_1', 'rotate_2', 'shein', 'ocr_gif'];\n\nconst module = (body.module || '').trim();\nconst image = (body.image || '').trim();\nconst imageBackground = (body.imageBackground || '').trim();\nconst question = (body.question || '').trim();\nconst websiteURL = (body.websiteURL || '').trim();\n\n// Xác minh các trường bắt buộc\nif (!image) {\n  return [{ json: { error: 'Thiếu trường bắt buộc: image (đã mã hóa base64)' } }];\n}\n\nif (!module) {\n  return [{ json: { error: 'Thiếu trường bắt buộc: module' } }];\n}\n\nif (!validModules.includes(module)) {\n  return [{ json: { error: `Mô-đun không hợp lệ: ${module}. Phải là một trong số: ${validModules.join(', ')}` } }];\n}\n\n// Xác minh mô-đun cụ thể\nif ((module === 'slider_1' || module === 'rotate_2') && !imageBackground) {\n  return [{ json: { error: `Mô-đun ${module} yêu cầu imageBackground` } }];\n}\n\nif (module === 'shein' && !question) {\n  return [{ json: { error: 'Mô-đun shein yêu cầu tham số câu hỏi' } }];\n}\n\nreturn [{ json: {\n  module,\n  image,\n  imageBackground,\n  question,\n  websiteURL,\n  validated: true\n} }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [-60, 0],
      "id": "ve-api-11111111-1111-1111-1111-111111111102",
      "name": "Xác minh Đầu vào"
    },
    {
      "parameters": {
        "resource": "Nhận diện",
        "operation": "Vision Engine",
        "module": "={{ $json.module }}",
        "image": "={{ $json.image }}",
        "imageBackground": "={{ $json.imageBackground || '' }}",
        "question": "={{ $json.question || '' }}",
        "websiteURL": "={{ $json.websiteURL || '' }}"
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [420, 0],
      "id": "ve-api-11111111-1111-1111-1111-111111111103",
      "name": "Giải Câu Đố Hình Ảnh",
      "onError": "continueRegularOutput",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "Tài khoản CapSolver"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
"caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose",
            "version": 2
          },
          "conditions": [
            {
              "id": "ve-err-001",
              "leftValue": "={{ $json.error }}",
              "operator": {
                "type": "string",
                "operation": "isNotEmpty",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [900, 0],
      "id": "ve-api-11111111-1111-1111-1111-111111111104",
      "name": "Lỗi Động cơ Thị giác?"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json.data) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [1380, -80],
      "id": "ve-api-11111111-1111-1111-1111-111111111105",
      "name": "Trả lời Webhook"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify({ error: $json.error }) }}",
        "options": {
          "responseCode": 400
        }
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [1380, 120],
      "id": "ve-api-11111111-1111-1111-1111-111111111106",
      "name": "Trả lời Webhook Lỗi"
    }
  ],
  "connections": {
    "Receive Solver Request": {
      "main": [
        [
          {
            "node": "Validate Input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Input": {
      "main": [
        [
          {
            "node": "Solve Visual Puzzle",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve Visual Puzzle": {
      "main": [
        [
          {
            "node": "Vision Engine Error?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Vision Engine Error?": {
      "main": [
        [
          {
            "node": "Respond to Webhook Error",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

Luồng công việc 2: Giải đố slider — Lấy và giải

Luồng công việc này minh họa một giải pháp end-to-end thực tế cho đố slider. Nó lấy hình ảnh mảnh đố và hình ảnh nền từ các URL, chuyển đổi chúng thành định dạng base64, gửi chúng đến Động cơ Thị giác với mô-đun slider_1, và trả về khoảng cách pixel cần thiết để hoàn thành slider.

Đây là mẫu bạn sẽ sử dụng khi tích hợp giải đố CAPTCHA slider vào quy trình tự động hóa lớn hơn — khoảng cách được trả về sẽ cho biết chính xác bao nhiêu bạn cần kéo thanh trượt trong trình duyệt automation (Puppeteer, Playwright, Selenium).

Luồng nút

Copy
Kích hoạt lịch trình (mỗi 1 giờ) ─┐
                                 ├→ Thiết lập cấu hình đố → Lấy hình ảnh đố → Lấy hình ảnh nền
Kích hoạt Webhook (POST) ──────────┘    → Chuyển đổi hình ảnh thành base64 → Giải đố slider
                                        → Lỗi slider? → Định dạng giải pháp → Trả về kết quả
                                                        → Định dạng lỗi → Trả về lỗi

Cách hoạt động

1. Hai trình kích hoạt

  • Kích hoạt lịch trình: chạy mỗi giờ cho kiểm tra tự động hoặc giải đố lặp lại
  • Kích hoạt Webhook: kích hoạt theo yêu cầu từ luồng khác hoặc dịch vụ bên ngoài

2. Thiết lập cấu hình đố

Xác định các URL cho hình ảnh mảnh đố và hình ảnh nền, cùng với bất kỳ websiteURL nào tùy chọn để cải thiện độ chính xác. Trong tích hợp thực tế, các URL này sẽ đến từ phản hồi thử thách CAPTCHA của trang đích.

3. Lấy hình ảnh đố + Lấy hình ảnh nền

Hai nút Yêu cầu HTTP tải xuống hình ảnh mảnh đố và hình ảnh nền dưới dạng dữ liệu nhị phân.

4. Chuyển đổi hình ảnh thành base64

Một nút Code chuyển đổi cả hai hình ảnh nhị phân thành chuỗi base64 nguyên bản, loại bỏ tiền tố data:image/...;base64,.

5. Giải đố slider

Nút CapSolver với:

  • Tài nguyên: "Nhận diện"
  • Thao tác: "Động cơ Thị giác"
  • mô-đun: "slider_1"
  • hình ảnh: base64 mảnh đố
  • hình ảnh nền: base64 hình ảnh nền

Trả về khoảng cách tính bằng pixel ngay lập tức.

6. Kiểm tra kết quả và phản hồi

Nút IF kiểm tra lỗi. Nếu thành công, giải pháp được định dạng và trả về. Nếu có lỗi, thông báo lỗi được trả về.

Phản hồi mong đợi

Thành công:

json Copy
{
  "success": true,
  "module": "slider_1",
  "distance": 142,
  "unit": "pixel",
  "solvedAt": "2026-03-16T10:00:00.000Z"
}

Lỗi:

json Copy
{
  "success": false,
  "error": "ERROR_INVALID_IMAGE",
  "solvedAt": "2026-03-16T10:00:00.000Z"
}

Nhập luồng công việc này

Nhấp để mở JSON luồng công việc
json Copy
{
  "name": "Giải đố slider — Lấy và giải — Động cơ Thị giác",
  "nodes": [
    {
      "parameters": {
        "content": "## Giải đố slider — Lấy và giải\n\n**Dành cho:** Các nhóm tự động hóa giải CAPTCHA slider trong quy trình tự động hóa trình duyệt hoặc quét web.\n\n**Công việc:** Lấy hình ảnh đố slider và hình ảnh nền từ các URL, chuyển đổi cả hai thành base64, gửi chúng đến Động cơ Thị giác CapSolver (mô-đun slider_1), và trả về khoảng cách pixel chính xác để kéo thanh trượt.\n\n**Cách hoạt động:**\n1. Kích hoạt lịch trình (mỗi 1 giờ) hoặc Webhook — cả hai đều đưa vào cùng một quy trình giải đố\n2. Nút cấu hình thiết lập các URL hình ảnh đố\n3. Hai nút Yêu cầu HTTP tải xuống các hình ảnh\n4. Nút Code chuyển đổi hình ảnh thành base64\n5. Động cơ Thị giác CapSolver giải đố slider\n6. Trả về khoảng cách tính bằng pixel cho tự động hóa\n\n**Thiết lập:**\n1. Thêm khóa API CapSolver của bạn dưới **Cài đặt → Chứng chỉ**\n2. Thay thế các URL hình ảnh mẫu trong Thiết lập cấu hình đố\n3. Kích hoạt và kiểm tra",
        "height": 560,
        "width": 460,
        "color": 1
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-1200, -380],
      "id": "sticky-slider-main-001",
      "name": "Ghi chú dính"
    },
    {
      "parameters": {
        "content": "### Kích hoạt\nKích hoạt lịch trình (mỗi giờ) hoặc Webhook — cả hai đều đưa vào cùng một quy trình giải đố.",
        "height": 480,
        "width": 440,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-860, -280],
      "id": "sticky-slider-section-002",
      "name": "Ghi chú dính1"
    },
    {
      "parameters": {
        "content": "### Cấu hình đố\nThiết lập các URL cho hình ảnh mảnh đố và hình ảnh nền. Trong sản xuất, trích xuất các URL này từ phản hồi thử thách của trang đích.",
        "height": 480,
        "width": 440,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-380, -280],
      "id": "sticky-slider-section-003",
      "name": "Ghi chú dính2"
    },
    {
      "parameters": {
        "content": "### Tải xuống hình ảnh\nTải xuống cả hai hình ảnh dưới dạng nhị phân. Mảnh đố đi vào hình ảnh, hình ảnh nền (với khe) đi vào hình ảnh nền.",
        "height": 480,
        "width": 920,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [100, -280],
      "id": "sticky-slider-section-004",
      "name": "Ghi chú dính3"
    },
    {
      "parameters": {
        "content": "### Chuyển đổi thành base64\nChuyển đổi dữ liệu nhị phân hình ảnh thành chuỗi base64 nguyên bản (không có tiền tố URI dữ liệu). Cả hai hình ảnh phải là base64 nguyên bản cho API CapSolver.",
        "height": 480,
        "width": 440,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [1060, -280],
      "id": "sticky-slider-section-005",
      "name": "Ghi chú dính4"
    },
    {
      "parameters": {
        "content": "### Giải đố Động cơ Thị giác + Xử lý kết quả\nCapSolver trả về khoảng cách slider ngay lập tức. Kết quả được định dạng và trả về qua Webhook hoặc lưu trữ để sử dụng sau.",
        "height": 480,
        "width": 1400,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [1540, -280],
      "id": "sticky-slider-section-006",
      "name": "Ghi chú dính5"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 1
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [-820, -60],
      "id": "ve-slider-22222222-2222-2222-2222-222222222201",
      "name": "Mỗi 1 giờ"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "slider-puzzle-solver",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [-820, 140],
      "id": "ve-slider-22222222-2222-2222-2222-222222222202",
      "name": "Kích hoạt Webhook",
      "webhookId": "ve-slider-22222222-aaaa-bbbb-cccc-222222222202",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "cfg-001",
              "name": "puzzleImageURL",
              "value": "={{ $json.body?.puzzleImageURL || 'https://example.com/captcha/puzzle-piece.png' }}",
              "type": "string"
            },
            {
              "id": "cfg-002",
              "name": "backgroundImageURL",
              "value": "={{ $json.body?.backgroundImageURL || 'https://example.com/captcha/background.png' }}",
              "type": "string"
            },
            {
              "id": "cfg-003",
              "name": "websiteURL",
              "value": "={{ $json.body?.websiteURL || '' }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [-340, 0],
      "id": "ve-slider-22222222-2222-2222-2222-222222222203",
      "name": "Thiết lập cấu hình đố"
    },
    {
      "parameters": {
        "url": "={{ $json.puzzleImageURL }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [140, -60],
      "id": "ve-slider-22222222-2222-2222-2222-222222222204",
      "name": "Lấy hình ảnh đố"
    },
    {
      "parameters": {
        "url": "={{ $('Set Puzzle Config').first().json.backgroundImageURL }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [540, -60],
      "id": "ve-slider-22222222-2222-2222-2222-222222222205",
      "name": "Lấy hình ảnh nền"
    },
    {
      "parameters": {
        "jsCode": "// Lấy dữ liệu nhị phân từ cả hai lần tải hình ảnh\nconst puzzleBinary = $input.first().binary;\nconst config = $('Set Puzzle Config').first().json;\n\nif (!puzzleBinary || !puzzleBinary.data) {\n  return [{ json: { error: 'Không thể tải hình ảnh đố — không có dữ liệu nhị phân trả về' } }];\n}\n\n// Chuyển đổi mảnh đố thành base64\nconst puzzleBuffer = await this.helpers.getBinaryDataBuffer(0, 'data');\nconst puzzleBase64 = puzzleBuffer.toString('base64');\n\n// Lấy dữ liệu nhị phân hình ảnh nền từ đầu vào nút hiện tại\n// Hình ảnh nền đã được tải ở nút trước\nlet backgroundBase64 = '';\ntry {\n  const bgBinary = $input.first().binary;\n  if (bgBinary && bgBinary.data) {\n    const bgBuffer = await this.helpers.getBinaryDataBuffer(0, 'data');\n    backgroundBase64 = bgBuffer.toString('base64');\n  }\n} catch (e) {\n  // Hình ảnh nền có thể không có nếu tải thất bại\n}\n\nreturn [{ json: {\n  image: puzzleBase64,\n  imageBackground: backgroundBase64,\n  websiteURL: config.websiteURL || '',\n  module: 'slider_1'\n} }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [1100, 0],
      "id": "ve-slider-22222222-2222-2222-2222-222222222206",
      "name": "Chuyển đổi hình ảnh thành base64"
    },
    {
      "parameters": {
        "resource": "Nhận diện",
        "operation": "Động cơ Thị giác",
        "module": "={{ $json.module }}",
        "image": "={{ $json.image }}",
        "imageBackground": "={{ $json.imageBackground }}",
        "websiteURL": "={{ $json.websiteURL || '' }}"
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [1580, 0],
      "id": "ve-slider-22222222-2222-2222-2222-222222222207",
      "name": "Giải đố slider",
      "onError": "continueRegularOutput",
      "credentials": {
        "capSolverApi": {
          "id": "YOUR_CREDENTIAL_ID",
          "name": "Tài khoản CapSolver"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose",
            "version": 2
          },
          "conditions": [
            {
              "id": "slider-err-001",
              "leftValue": "={{ $json.error }}",
              "operator": {
                "type": "string",
                "operation": "isNotEmpty",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [1900, 0],
      "id": "ve-slider-22222222-2222-2222-2222-222222222208",
      "name": "Lỗi slider?"
    },
    {
      "parameters": {
        "jsCode": "const solution = $input.first().json.data?.solution || $input.first().json.data || {};\nconst distance = solution.distance || solution.slide_distance || null;\n\nreturn [{ json: {\n  success: true,\n  module: 'slider_1',\n  distance: distance,\n  unit: 'pixel',\n  rawSolution: solution,\n  solvedAt: new Date().toISOString()\n} }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [2200, -80],
      "id": "ve-slider-22222222-2222-2222-2222-222222222209",
      "name": "Định dạng giải pháp"
    },
    {
      "parameters": {
        "jsCode": "return [{ json: {\n  success: false,\n  error: $input.first().json.error || 'Lỗi Động cơ Thị giác không xác định',\n  solvedAt: new Date().toISOString()\n} }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [2200, 120],
      "id": "ve-slider-22222222-2222-2222-2222-222222222210",
{
  "name": "Lỗi định dạng"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [2500, -80],
      "id": "ve-slider-22222222-2222-2222-2222-222222222211",
      "name": "Trả về Kết quả"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {
          "responseCode": 400
        }
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [2500, 120],
      "id": "ve-slider-22222222-2222-2222-2222-222222222212",
      "name": "Trả về Lỗi"
    }
  ],
  "connections": {
    "Every 1 Hour": {
      "main": [
        [
          {
            "node": "Set Puzzle Config",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Set Puzzle Config",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Puzzle Config": {
      "main": [
        [
          {
            "node": "Fetch Puzzle Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Puzzle Image": {
      "main": [
        [
          {
            "node": "Fetch Background Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Background Image": {
      "main": [
        [
          {
            "node": "Convert Images to Base64",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert Images to Base64": {
      "main": [
        [
          {
            "node": "Solve Slider Puzzle",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve Slider Puzzle": {
      "main": [
        [
          {
            "node": "Slider Error?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slider Error?": {
      "main": [
        [
          {
            "node": "Format Error",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Format Solution",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Solution": {
      "main": [
        [
          {
            "node": "Return Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Error": {
      "main": [
        [
          {
            "node": "Return Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}
``

---

## Thử nghiệm

### Kiểm tra API Solver

Sau khi cấu hình thông tin xác thực CapSolver và kích hoạt workflow, kiểm tra API Solver:

**Puzzle trượt:**

```bash
curl -X POST https://your-n8n-instance.com/webhook/vision-engine-solver \
  -H "Content-Type: application/json" \
  -d '{
    "module": "slider_1",
    "image": "BASE64_PUZZLE_PIECE_HERE",
    "imageBackground": "BASE64_BACKGROUND_HERE"
  }'

Puzzle xoay:

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/vision-engine-solver \
  -H "Content-Type: application/json" \
  -d '{
    "module": "rotate_1",
    "image": "BASE64_IMAGE_TO_ROTATE"
  }'

Chọn đối tượng (shein):

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/vision-engine-solver \
  -H "Content-Type: application/json" \
  -d '{
    "module": "shein",
    "image": "BASE64_IMAGE",
    "question": "Chọn tất cả giày"
  }'

OCR GIF:

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/vision-engine-solver \
  -H "Content-Type: application/json" \
  -d '{
    "module": "ocr_gif",
    "image": "BASE64_GIF_DATA"
  }'

Kiểm tra Solver Puzzle Trượt

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/slider-puzzle-solver \
  -H "Content-Type: application/json" \
  -d '{
    "puzzleImageURL": "https://example.com/captcha/puzzle-piece.png",
    "backgroundImageURL": "https://example.com/captcha/background.png",
    "websiteURL": "https://example.com"
  }'

Một phản hồi với giá trị số distance xác nhận toàn bộ quy trình hoạt động — hình ảnh được tải, chuyển đổi thành base64, Vision Engine giải puzzle, và khoảng cách pixel được trả về.


Hiểu về Phản hồi

Vision Engine trả về các dạng giải pháp khác nhau tùy theo module:

slider_1

json Copy
{
  "solution": {
    "distance": 142
  }
}

distance tính bằng pixel — đây là khoảng cách mà cần trượt phải di chuyển sang phải để hoàn thành puzzle.

rotate_1 / rotate_2

json Copy
{
  "solution": {
    "angle": 73
  }
}

angle tính bằng độ — đây là số độ mà hình ảnh phải xoay (theo chiều kim đồng hồ) để đạt được hướng đúng.

shein

json Copy
{
  "solution": {
    "rects": [
      { "x1": 45, "y1": 120, "x2": 180, "y2": 250 },
      { "x1": 300, "y1": 90, "x2": 420, "y2": 210 }
    ]
  }
}

Mỗi rect trong mảng là một hộp giới hạn (tọa độ góc trên bên trái và góc dưới bên phải) cho khu vực khớp trong hình ảnh.

ocr_gif

json Copy
{
  "solution": {
    "text": "x7Km9"
  }
}

text là chuỗi được nhận dạng từ GIF động.


Tùy chỉnh cho Các Loại Module Khác

Workflow Solver API đã hỗ trợ tất cả năm module qua nội dung yêu cầu. Để xây dựng workflow chuyên dụng cho module khác — ví dụ, rotate_1 cho puzzle xoay — các thay đổi là tối thiểu:

  1. Node cấu hình: Thay thế puzzleImageURL / backgroundImageURL bằng URL hình ảnh xoay
  2. Node tải hình ảnh: Chỉ cần một yêu cầu HTTP (không cần hình nền cho rotate_1)
  3. Node CapSolver: Thay đổi module thành rotate_1
  4. Format Solution: Trích xuất angle thay vì distance

Đối với shein, bạn cũng cần thêm tham số question vào cấu hình và truyền nó đến node CapSolver.


Xử lý Sự cố

"ERROR_INVALID_IMAGE"

Chuỗi base64 bị hỏng hoặc trống. Kiểm tra rằng:

  • Hình ảnh được tải thành công (HTTP 200)
  • Chuyển đổi nhị phân sang base64 tạo ra chuỗi không trống
  • Tiền tố data:image/...;base64, đã được loại bỏ
  • Chuỗi base64 không có khoảng trắng hoặc dòng mới

"ERROR_INVALID_MODULE"

Giá trị module không khớp với mô hình nào được hỗ trợ. Sử dụng chính xác một trong số: slider_1, rotate_1, rotate_2, shein, ocr_gif.

Khoảng cách trả về 0 hoặc Null

Hình ảnh có thể không phải là cặp puzzle trượt hợp lệ. Kiểm tra rằng:

  • image là phần mảnh puzzle (mảnh nhỏ có thể trượt)
  • imageBackgroundhình nền đầy đủ với khe trống nhìn thấy
  • Cả hai hình ảnh đều đến từ cùng một phiên thử thách
  • Hình ảnh không bị hỏng hoặc quá nhỏ

Node CapSolver không hiển thị tùy chọn "Vision Engine"

Đảm bảo bạn đã cài đặt phiên bản 1.x hoặc cao hơn của n8n-nodes-capsolver. Tính năng Vision Engine đã được thêm vào các phiên bản gần đây. Cập nhật node cộng đồng nếu cần:

  1. Vào Cài đặt > Node Cộng đồng
  2. Tìm n8n-nodes-capsolver
  3. Cập nhật lên phiên bản mới nhất
  4. Khởi động lại n8n

Webhook trả về 404

Workflow phải được kích hoạt để webhook hoạt động. Nhập workflow, cấu hình thông tin xác thực, sau đó bật workflow trong n8n.


Nguyên tắc Tốt

  1. Sử dụng chuỗi base64 nguyên bản — luôn loại bỏ tiền tố data:image/...;base64, trước khi truyền hình ảnh đến node CapSolver.

  2. Phù hợp hình ảnh với moduleslider_1 cần cả imageimageBackground. rotate_1 chỉ cần image. shein cần image kèm question. Sử dụng kết hợp sai sẽ thất bại hoặc trả về kết quả sai.

  3. Tải hình ảnh mới — hình ảnh puzzle thị giác thường chỉ sử dụng một lần và hết hạn nhanh. Tải chúng gần thời điểm giải càng tốt.

  4. Vision Engine là tức thì — khác với các hoạt động Token cần đợi kết quả, các hoạt động Nhận dạng trả về kết quả ngay lập tức. Workflow của bạn không cần logic thử lại hoặc độ trễ đợi.

  5. Không cần proxy — Vision Engine phân tích hình ảnh bên máy chủ. Không có tương tác trình duyệt với trang đích, vì vậy không cần proxy.

  6. Kiểm tra trước khi giải — kiểm tra xem dữ liệu hình ảnh có tồn tại và tên module có hợp lệ không trước khi gọi node CapSolver. Điều này tránh lãng phí tín dụng API cho các yêu cầu sẽ thất bại.

  7. Sử dụng websiteURL khi có sẵn — tuy nhiên, đây là tùy chọn, cung cấp URL trang nguồn có thể cải thiện độ chính xác cho một số loại puzzle.

  8. Xử lý phản hồi theo module — các module khác nhau trả về các trường khác nhau (distance, angle, rects, text). Logic downstream của bạn nên kiểm tra module nào được sử dụng và trích xuất trường đúng.

Sẵn sàng bắt đầu chưa? Đăng ký CapSolver và sử dụng mã khuyến mãi n8n để nhận thêm 8% khuyến mãi cho lần nạp đầu tiên!

Banner mã khuyến mãi CapSolver

Kết luận

Vision Engine lấp đầy khoảng trống khác với các hoạt động Token của CapSolver. Trong khi reCAPTCHA, Turnstile và Cloudflare Challenge giải các token mà bạn gửi để vượt qua hàng rào, Vision Engine trả về các phép đo mà tự động hóa của bạn sử dụng để tương tác với các puzzle thị giác — trượt thanh, xoay hình ảnh, chọn đối tượng, hoặc đọc văn bản từ GIF động.

Những khác biệt chính cần lưu ý:

  • Nguồn Nhận dạng, không phải Token — kết quả tức thì, không cần đợi
  • Hình ảnh base64 vào, phép đo ra — pixel, độ, tọa độ, hoặc văn bản
  • Không cần proxy — AI phân tích hình ảnh bên máy chủ
  • Năm module — mỗi module được thiết kế cho một loại puzzle thị giác cụ thể

Hai workflow trong bài viết này bao gồm hai mẫu tích hợp phổ biến:

  1. API Solver — điểm cuối webhook chung chấp nhận bất kỳ module nào và trả về giải pháp
  2. Solver Puzzle Trượt — quy trình đầy đủ tải, chuyển đổi, giải puzzle trượt

Cả hai đều được nhập với trạng thái không hoạt động. Cấu hình thông tin xác thực CapSolver, thay thế các giá trị mẫu, kích hoạt workflow và kiểm tra.


Câu hỏi Thường Gặp

Vision Engine khác gì so với Image To Text (OCR)?

Image To Text nhận dạng ký tự trong hình ảnh tĩnh — OCR tiêu chuẩn. Vision Engine đi xa hơn: nó hiểu mối quan hệ không gian trong các puzzle thị giác. Nó có thể tính khoảng cách trượt, góc xoay, hộp giới hạn đối tượng, và thậm chí đọc văn bản từ GIF động. Cả hai đều là hoạt động Nhận dạng (kết quả tức thì, không cần đợi), nhưng chúng giải các loại bài toán khác nhau.

Bạn có cần proxy cho Vision Engine không?

Không. Vision Engine phân tích hình ảnh bạn cung cấp bên máy chủ. Không có phiên trình duyệt, không có cookie, và không có tương tác với trang đích. Proxy không cần thiết và node CapSolver không chấp nhận tham số proxy cho các nhiệm vụ Vision Engine.

Bạn có thể giải nhiều puzzle trong một lần thực thi workflow không?

Có. Node CapSolver xử lý một mục tại một thời điểm, nhưng n8n có thể xử lý nhiều mục dựa trên item. Mỗi mục nhận được cuộc gọi Nhận dạng riêng và trả về giải pháp riêng. Sử dụng node Split In Batches hoặc cung cấp nhiều mục từ node Code.

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

Các trường imageimageBackground chấp nhận chuỗi base64 của JPEG, PNG, GIF và WebP. Chuỗi base64 phải nguyên bản — không có tiền tố data:image/...;base64,, không có khoảng trắng.

Làm thế nào để lấy hình ảnh puzzle từ trang web thực tế?

Trong tích hợp puzzle trượt thực tế, trang đích cung cấp hình ảnh puzzle như một phần của phản hồi thử thách. Thường bạn sẽ:

  1. Tải trang (qua HTTP Request hoặc tự động hóa trình duyệt)
  2. Trích xuất các URL hình ảnh từ DOM hoặc yêu cầu mạng của widget CAPTCHA
  3. Tải hình ảnh
  4. Chuyển đổi thành base64
  5. Gửi đến Vision Engine

Workflow Solver Puzzle Trượt minh họa các bước 3-5. Các bước 1-2 phụ thuộc vào trang đích cụ thể.

Tham số question làm gì?

Tham số question chỉ được sử dụng bởi module shein. Nó cho AI biết cần tìm gì trong hình ảnh — ví dụ, "Chọn tất cả giày" hoặc "Nhấn vào các mục khớp." Đối với các module khác, để trống.

Bạn có thể sử dụng Vision Engine cho các thử thách hình ảnh hCaptcha không?

Các module của Vision Engine (slider_1, rotate_1, rotate_2, shein, ocr_gif) được thiết kế cho các loại puzzle thị giác cụ thể. Các thử thách phân loại hình ảnh hCaptcha sử dụng cách tiếp cận khác. Kiểm tra tài liệu CapSolver cho các giải pháp đặc biệt cho hCaptcha.

Vision Engine nhanh đến mức nào?

Vision Engine là hoạt động Nhận dạng, có nghĩa là kết quả được trả về trong một cuộc gọi API — thường dưới 2 giây. Không cần đợi vòng lặp, không có gọi getTaskResult, và không có thời gian chờ hết hạn. Điều này khiến nó nhanh hơn đáng kể so với các hoạt động Token, có thể mất 10-30 giây để hoàn thành.

Điều gì xảy ra nếu hình ảnh quá nhỏ hoặc quá lớn?

Hình ảnh quá nhỏ có thể không chứa đủ chi tiết để phân tích chính xác. Hình ảnh quá lớn sẽ làm tăng kích thước dữ liệu base64 và có thể làm chậm yêu cầu. Để đạt kết quả tốt nhất, sử dụng độ phân giải gốc được cung cấp bởi thử thách CAPTCHA — không nên thay đổi kích thước hình ảnh.

Bạn có thể nối Vision Engine với tự động hóa trình duyệt không?

Có, và đó là trường hợp sử dụng được dự kiến cho hầu hết các ứng dụng thực tế. Luồng thường là:

  1. Tự động hóa trình duyệt (Puppeteer/Playwright qua n8n) tải trang
  2. Thử thách CAPTCHA xuất hiện với các hình ảnh puzzle
  3. Workflow của bạn trích xuất các URL hình ảnh và tải chúng
  4. Vision Engine trả về giải pháp (khoảng cách, góc, v.v.)
  5. Tự động hóa trình duyệt sử dụng giải pháp để hoàn thành thử thách (trượt thanh, xoay hình ảnh, nhấp tọa độ)

Workflow Vision Engine xử lý bước 3-4. Bước 1-2 và 5 được xử lý bởi node tự động hóa trình duyệt của bạn.

Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.

Thêm