
Anh Tuan
Data Science Expert
Đã xuất bản Sep 17, 2026
Đã cập nhật Sep 17, 2026 · đọc tối thiểu

ImageToTextTask.solution.text từ createTask; ví dụ này không kiểm tra trạng thái.Một tích hợp CAPTCHA hình ảnh bắt đầu bằng sự khác biệt ảnh hưởng đến toàn bộ triển khai: đầu vào là một tệp hình ảnh, và đầu ra hữu ích là văn bản. Khi trình chạy kiểm thử Node.js gặp một biểu mẫu chứa các ký tự bị biến dạng, nó cần các ký tự đó cho lần thử này. Một ví dụ CAPTCHA dựa trên token giải quyết một nhiệm vụ khác.
Hướng dẫn này sử dụng yêu cầu nhận dạng hình ảnh được tài liệu hóa CapSolver và một bộ chuyển đổi Node.js nhỏ để cho thấy tệp trở thành nội dung yêu cầu và nơi câu trả lời xuất hiện. Ví dụ giả định một biểu mẫu kiểm thử bạn sở hữu với hình ảnh bạn có thể lưu cục bộ. Việc điều hướng trình duyệt và gửi biểu mẫu cụ thể của ứng dụng vẫn là một phần của trình chạy kiểm thử của bạn.
Một trình giải CAPTCHA hình ảnh trả về các ký tự mà nó nhận diện trong hình ảnh được gửi. Bài viết từ điển CAPTCHA https://www.capsolver.com/glossary/captcha cung cấp bối cảnh rộng hơn; triển khai này liên quan đến hình ảnh văn bản thay vì một tiện ích tương tác.
Đường dẫn chính thức của ImageToTextTask định nghĩa một nhiệm vụ chứa loại, hình ảnh Base64 trong body, và một mô-đun nhận dạng. Một phản hồi thành công hiển thị văn bản được nhận dạng tại solution.text. Đối với luồng này, phản hồi ban đầu từ createTask chứa kết quả.
Giữ các giá trị này riêng biệt khi kết nối ví dụ với biểu mẫu:
| Giá trị | Mục đích | Đích đến |
|---|---|---|
| Dữ liệu hình ảnh | Thách thức cần nhận dạng | Tệp cục bộ, sau đó là nội dung Base64 của nhiệm vụ |
| Văn bản được nhận dạng | Câu trả lời đề xuất | Trường câu trả lời CAPTCHA của biểu mẫu bạn sở hữu |
| Kết quả ứng dụng | Xem xét lần thử có thành công hay không | Sự xác nhận của bạn sau khi gửi biểu mẫu |
Một kết quả nhận dạng là kết quả trung gian. Ứng dụng vẫn có thể từ chối câu trả lời nếu thách thức thay đổi, phiên hết hạn, hoặc câu trả lời thuộc về hình ảnh khác.
Sử dụng phiên bản Node.js có sẵn fetch và AbortSignal.timeout; bộ chuyển đổi đã được kiểm tra trên Node.js 24.16.0. Không cần phụ thuộc npm. Lưu hai tệp JavaScript dưới đây trong cùng một thư mục và đặt một hình ảnh kiểm thử không nhạy cảm bên cạnh chúng.
Ví dụ đọc ./captcha.png. Đây là đường dẫn cục bộ, không phải URL hình ảnh hoặc chuỗi được mã hóa. Kiểm tra tệp trước khi gỡ lỗi gọi API: một trang HTML được lưu với phần mở rộng PNG vẫn là trang HTML. Sử dụng hình ảnh hợp lệ được dịch vụ hỗ trợ.
Lấy khóa API giải CAPTCHA từ tài khoản CapSolver của bạn và xuất nó cho quá trình dưới dạng CAPSOLVER_API_KEY thông qua môi trường hoặc quản lý bí mật. Giữ khóa này an toàn khỏi JavaScript trình duyệt và kiểm soát nguồn. Một quyền quản trị hoặc quyền MCP không thay thế cho khóa API giải CAPTCHA.
Giữ phiên bản biểu mẫu liên quan đến hình ảnh. Lưu một hình ảnh mới mỗi khi biểu mẫu tạo ra thách thức mới. Ghi đè tên tệp chung trong khi một yêu cầu khác sử dụng phiên bản biểu mẫu trước có thể tạo ra phản hồi nhận dạng hợp lệ cho lần thử sai. Cung cấp tệp riêng biệt cho các lần thử đồng thời hoặc lưu trữ byte của chúng riêng biệt.
Đọc hình ảnh dưới dạng dữ liệu nhị phân, sau đó mã hóa Buffer kết quả. Tài liệu hệ thống tệp của Node https://nodejs.org/api/fs.html mô tả readFile, và tài liệu Buffer của Node https://nodejs.org/api/buffer.html định nghĩa mã hóa Base64.
Biểu thức quan trọng dưới đây là image.toString('base64'). Không đọc tệp dưới dạng UTF-8 trước: byte hình ảnh không phải là tài liệu văn bản. Cũng không gửi tên tệp làm task.body, cả hai đều không cần thiết. Dịch vụ từ xa cần nội dung được mã hóa, không phải đường dẫn trên máy tính của bạn.
Gửi Base64 nguyên bản mà không có tiền tố data:image/png;base64,. Một URL dữ liệu có vai trò hữu ích trong trình duyệt nhưng khác với nội dung nhiệm vụ được hiển thị trong tài liệu nhận dạng. Tạo mã hóa từ Buffer tránh sao chép các tiền tố không liên quan hoặc dấu xuống dòng.
Ví dụ này từ chối tệp trống. Nó không kiểm tra định dạng hình ảnh, kích thước hoặc chất lượng hình ảnh. Nếu ứng dụng của bạn chấp nhận tải lên bất kỳ, hãy kiểm tra trước khi gọi hàm này. Một lần đọc thành công chỉ xác nhận rằng byte đã sẵn sàng.
Lưu bộ chuyển đổi này dưới dạng recognize-image.mjs. Các trường yêu cầu tuân theo tài liệu chính thức. Tải tệp, thời gian chờ và kiểm tra phản hồi là các bổ sung cho ví dụ này. Bộ chuyển đổi đã được chạy với phản hồi mô phỏng; sử dụng nó với dịch vụ thực tế yêu cầu khóa giải của bạn và vẫn là bước kiểm tra trực tiếp.
import { readFile } from 'node:fs/promises';
// Các trường yêu cầu tuân theo tài liệu ImageToTextTask chính thức.
export async function recognizeImage(path, apiKey, request = fetch) {
if (!apiKey) throw new Error('Vui lòng thiết lập CAPSOLVER_API_KEY trước.');
const image = await readFile(path);
if (!image.length) throw new Error('Tệp hình ảnh trống.');
const response = await request('https://api.capsolver.com/createTask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
signal: AbortSignal.timeout(60000),
body: JSON.stringify({
clientKey: apiKey,
task: {
type: 'ImageToTextTask',
module: 'common',
body: image.toString('base64')
}
})
});
if (!response.ok) throw new Error('Mã trạng thái HTTP ' + response.status);
const result = await response.json();
if (result.errorId !== 0) {
throw new Error(result.errorCode || 'Nhận dạng hình ảnh thất bại.');
}
if (result.status !== 'ready' ||
typeof result.solution?.text !== 'string' ||
!result.solution.text.length) {
throw new Error('API không trả về văn bản được nhận dạng.');
}
return result.solution.text;
}
Hàm nhận đường dẫn và khóa API và trả về văn bản được nhận dạng. Tham số thứ ba cho phép kiểm tra thay thế fetch; người gọi bình thường bỏ qua nó. Thời gian chờ 60 giây là cài đặt cục bộ, không phải thời gian nhận dạng được đảm bảo hoặc giới hạn dịch vụ.
Kiểm tra phản hồi tuân theo các giai đoạn yêu cầu. Mã trạng thái không thành công sẽ thất bại trước khi phân tích. JSON không hợp lệ gây ra lỗi phân tích. Lỗi nhà cung cấp được xử lý qua errorId. Một bao bì trông thành công vẫn phải chứa kết quả sẵn sàng với văn bản không trống, ngăn chặn việc câu trả lời bị thiếu trở thành giá trị trống của biểu mẫu.
Không có yêu cầu lặp lại tự động. Sau khi thất bại truyền tải, khách hàng có thể không biết liệu dịch vụ có nhận được nhiệm vụ ban đầu hay không. Quyết định cách xử lý sự không chắc chắn trước khi thêm lại.
Nhận thưởng mã khuyến mãi CapSolver
Tăng ngân sách tự động hóa của bạn ngay lập tức!
Sử dụng mã khuyến mãi CAP26 khi nạp tiền cho tài khoản CapSolver để nhận thêm 5% khuyến mãi cho mỗi lần nạp — không giới hạn.
Nhận mã ngay trong Bảng điều khiển CapSolver
Lưu tệp điểm vào dưới dạng run.mjs bên cạnh bộ chuyển đổi. Yêu cầu trực tiếp yêu cầu khóa giải của bạn; các thử nghiệm bộ chuyển đổi cục bộ không thiết lập giải pháp trực tiếp:
import { recognizeImage } from './recognize-image.mjs';
try {
const path = process.argv[2];
if (!path) throw new Error('Cách sử dụng: node run.mjs ./captcha.png');
const text = await recognizeImage(path, process.env.CAPSOLVER_API_KEY);
console.log(text); // Chỉ sử dụng hình ảnh kiểm thử không nhạy cảm ở đây.
} catch (error) {
console.error(error.message);
process.exitCode = 1;
}
Với khóa giải có sẵn trong môi trường của bạn, chạy lệnh dưới đây. Một lần gọi trực tiếp không được thực hiện cho hướng dẫn này:
node run.mjs ./captcha.png
Một lần gọi thành công in ra văn bản được trả về. Câu trả lời phụ thuộc vào hình ảnh của bạn; không có giá trị kỳ vọng cố định cho cuộc gọi thực tế. Sử dụng bộ thử nghiệm không nhạy cảm cho ví dụ này trong terminal, và tránh in các câu trả lời thách thức trong nhật ký ứng dụng chung.
Trong trình chạy kiểm thử, gọi recognizeImage và gửi giá trị trả về đến trường câu trả lời liên quan đến cùng hình ảnh đó. Bộ chọn và phương pháp gửi thuộc về ứng dụng của bạn, vì vậy chúng không được tạo ra ở đây. Xác nhận kết quả biểu mẫu thực tế sau khi gửi, ví dụ như bản ghi kiểm tra mong muốn được chấp nhận.
Giữ nguyên chuỗi được nhận dạng trừ khi biểu mẫu định nghĩa rõ ràng về chuẩn hóa. Chuyển mọi câu trả lời thành chữ in hoa hoặc xóa khoảng trắng có thể thay đổi ý nghĩa. Một tập ký tự đã biết có thể giúp xác định kết quả không mong đợi, nhưng kiểm tra không nên thay đổi các ký tự không chắc chắn một cách im lặng.
Chọn mô-đun theo nhiệm vụ hình ảnh được mô tả bởi dịch vụ. Yêu cầu này sử dụng common một cách rõ ràng. Tham khảo mô tả mô-đun trong tài liệu ImageToTextTask trước khi chọn chế độ chuyên dụng.
Một mô-đun không thể sửa chữa đầu vào không liên quan. Một ảnh chụp màn hình toàn bộ biểu mẫu, thách thức cũ, hoặc hình ảnh chứa văn bản không liên quan có thể tạo ra câu trả lời không phù hợp bất kể cài đặt. Xác nhận rằng byte được gửi tương ứng với thách thức và lần thử hiện tại trước tiên.
Nếu ứng dụng của bạn tạo ra nhiều kiểu hình ảnh, hãy sử dụng các mẫu đại diện cho mỗi kiểu. Giữ câu trả lời mong đợi từ bộ thử nghiệm riêng biệt với câu trả lời được nhận dạng. Điều này làm cho sự không khớp có thể lặp lại mà không trình bày kiểm tra mã hóa tổng hợp như bằng chứng về độ chính xác của nhận dạng.
Ví dụ, một bộ thử nghiệm có thể xác nhận rằng byte tệp chính xác tồn tại sau khi mã hóa và giải mã. Một kiểm tra nhận dạng khác so sánh câu trả lời của nhà cung cấp với các ký tự đã biết của bộ thử nghiệm. Một kiểm tra thứ ba gửi câu trả lời đó thông qua biểu mẫu. Các kiểm tra này trả lời các câu hỏi khác nhau và nên báo cáo kết quả riêng biệt.
Điều tra các lỗi đầu vào cục bộ trước khi kiểm tra chất lượng nhận dạng. Một đường dẫn không đọc được, tệp trống hoặc khóa thiếu có nghĩa là yêu cầu chưa hoàn thành thành công. Thay đổi mô-đun nhận dạng không thể giải quyết những lỗi này.
Đối với lỗi từ xa, giữ mã lỗi nhà cung cấp trong tài liệu chẩn đoán có kiểm soát và tham khảo tham khảo lỗi API chính thức. Tránh ghi lại nội dung yêu cầu, chứa cả thông tin xác thực và hình ảnh. Ghi lại giai đoạn thất bại và mã lỗi thay vào đó.
| Triệu chứng | Kiểm tra đầu tiên |
|---|---|
| Không thể đọc tệp | Thư mục làm việc, đường dẫn, quyền truy cập |
| Nhiệm vụ hình ảnh bị từ chối | Loại nhiệm vụ, Base64 thô, đầu vào hình ảnh được hỗ trợ |
| Không có văn bản được nhận dạng | Trường lỗi và cấu trúc phản hồi |
| Văn bản bị biểu mẫu từ chối | Cùng hình ảnh và phiên bản, câu trả lời không thay đổi |
| Yêu cầu hết thời gian | Xem xét kết quả ban đầu có chắc chắn không |
Tài liệu API toàn cục của Node https://nodejs.org/api/globals.html đề cập đến các nguyên mẫu yêu cầu và hủy bỏ được sử dụng ở đây. Kết thúc thời gian chờ cục bộ không xác nhận rằng xử lý từ xa đã bị hủy.
Khi báo cáo vấn đề, mô tả giai đoạn nào thất bại. "Lỗi đọc tệp" và "dịch vụ trả về văn bản bị biểu mẫu từ chối" yêu cầu bằng chứng khác nhau. Giữ thông tin xác thực và nội dung hình ảnh ngoài báo cáo chung trừ khi quy trình hỗ trợ có kiểm soát yêu cầu chúng.
Bộ chuyển đổi đã được chạy với bảy trường hợp kiểm thử cục bộ bao gồm việc xây dựng yêu cầu và bảo tồn Base64, thiếu thông tin xác thực, đầu vào trống, lỗi HTTP, lỗi nhà cung cấp, thiếu kết quả và phản hồi bị hỏng hoặc thất bại. Một số trường hợp nhóm các khẳng định liên quan. Các kiểm tra thay thế fetch, vì vậy chúng không liên hệ với dịch vụ trả phí.
Bộ thử nghiệm hình ảnh kiểm tra mã hóa, và câu trả lời là giá trị kiểm tra được cung cấp. Những kiểm tra này xác định hành vi JavaScript cục bộ. Chúng không đo lường độ chính xác nhận dạng hoặc chứng minh sự chấp nhận bởi biểu mẫu thực tế. Hoàn tất các kiểm tra này với khóa giải của bạn và thách thức hiện tại trước khi dựa vào tích hợp.
Đối với các nhiệm vụ token trong cùng ứng dụng, sử dụng hướng dẫn API CAPTCHA JavaScript. Giữ nhận dạng hình ảnh trong nhánh riêng vì loại kết quả và luồng truy xuất được tài liệu khác nhau. Thử CapSolver với hình ảnh đại diện bạn sở hữu để xác minh kết nối cuối cùng.
Câu hỏi: Bạn có cần gói npm không?
Bộ chuyển đổi sử dụng các API tích hợp của Node.js và không cần gói npm. Bạn vẫn cần môi trường tương thích, hình ảnh hợp lệ và khóa giải. Phiên bản Node.js 24.16.0 được sử dụng cho các kiểm tra cục bộ.
Câu hỏi: ImageToTextTask có nên sử dụng getTaskResult không?
Luồng nhận dạng được tài liệu hướng dẫn trả về kết quả sẵn sàng với solution.text từ createTask. Bộ chuyển đổi này không kiểm tra. Một vòng lặp kiểm tra từ nhiệm vụ CAPTCHA khác không nên sao chép tự động.
Câu hỏi: Bạn có thể gửi URL hình ảnh thay vì Base64 không?
Yêu cầu được tài liệu hóa sử dụng nội dung hình ảnh được mã hóa trong trường body. Nhận hình ảnh bạn sở hữu thông qua ứng dụng của bạn và mã hóa byte của nó. Một tên tệp hoặc URL không tương đương với giá trị đó.
Câu hỏi: Tại sao biểu mẫu có thể từ chối văn bản được nhận dạng?
Kiểm tra xem hình ảnh và phiên bản có thuộc cùng lần thử và câu trả lời có bị thay đổi không. Một chuỗi được trả về không đảm bảo tính chính xác của nhận dạng hoặc sự chấp nhận của ứng dụng.
Câu hỏi: Các kiểm tra cục bộ có chứng minh độ chính xác nhận dạng không?
Không. Chúng sử dụng phản hồi cung cấp để kiểm tra hành vi của bộ chuyển đổi. Nhận dạng và chấp nhận toàn bộ cần kiểm tra riêng biệt với dịch vụ thực tế và biểu mẫu bạn sở hữu.

Anh Tuan
Data Science Expert
Turning task outcomes into actionable insights.
GIỚI THIỆU TÁC GIẢ
So sánh ImageToTextTask và VisionEngine thông qua đầu vào CAPTCHA, đầu ra nhận dạng, yêu cầu mô đun, và kiểm tra ứng dụng trước khi chọn nhiệm vụ giải quyết.

Chọn người giải CAPTCHA kiểm tra định kỳ hoặc webhooks dựa trên trạng thái nhiệm vụ, yêu cầu người nhận, tính mới nhất của kết quả và luồng hoàn tất API CapSolver đã được tài liệu hóa.
