
Sora Fujimoto
AI Solutions Architect
Diterbitkan Sep 17, 2026
Diperbarui Sep 17, 2026 ยท min baca

ImageToTextTask.solution.text dari createTask; contoh ini tidak melakukan polling.Integrasi CAPTCHA gambar dimulai dengan perbedaan yang memengaruhi seluruh implementasi: inputnya adalah file gambar, dan output yang berguna adalah teks. Ketika runner uji Node.js menemui formulir yang memiliki karakter terdistorsi, ia membutuhkan karakter tersebut untuk percobaan tertentu ini. Contoh reCAPTCHA yang berorientasi token menangani tugas yang berbeda.
Panduan ini menggunakan permintaan pengenalan gambar yang terdokumentasi CapSolver dan adapter Node.js kecil untuk menunjukkan bagaimana file menjadi tubuh permintaan dan di mana jawaban muncul. Contoh ini mengasumsikan formulir uji yang dimiliki dengan gambar yang dapat disimpan secara lokal. Navigasi browser dan pengiriman formulir spesifik aplikasi tetap menjadi bagian dari runner uji Anda.
Pemecah CAPTCHA gambar mengembalikan karakter yang dikenalinya dalam gambar yang dikirimkan. Entri glosarium CAPTCHA memberikan konteks yang lebih luas; implementasi ini menitikberatkan pada gambar teks daripada widget interaktif.
Dokumentasi tugas ImageToTextTask resmi mendefinisikan tugas yang mengandung tipe, gambar Base64 dalam body, dan modul pengenalan. Respons siap yang sukses mengekspos teks yang dikenali di solution.text. Untuk alur ini, respons createTask awal mengandung hasilnya.
Pisahkan nilai-nilai ini saat menghubungkan contoh ke formulir:
| Nilai | Tujuan | Tujuan |
|---|---|---|
| Bite gambar | Tantangan untuk dikenali | File lokal, lalu tubuh permintaan Base64 |
| Teks yang dikenali | Jawaban yang diajukan | Kolom jawaban CAPTCHA formulir yang dimiliki |
| Hasil aplikasi | Apakah percobaan berhasil | Penegasan Anda setelah pengiriman |
Hasil pengenalan adalah hasil antara. Aplikasi masih dapat menolak jawaban jika tantangan berubah, sesi habis masa berlakunya, atau jawaban milik gambar lain.
Gunakan versi Node.js dengan fetch dan AbortSignal.timeout yang terbawa; adapter telah diuji pada Node.js 24.16.0. Tidak ada dependensi npm yang diperlukan. Simpan dua file JavaScript di bawah ini di satu direktori dan tempatkan gambar uji non-sensitif di sampingnya.
Contoh ini membaca ./captcha.png. Ini adalah jalur lokal, bukan URL gambar atau string yang dienkripsi. Periksa file sebelum memperbaiki panggilan API: halaman error HTML yang disimpan dengan ekstensi PNG tetap merupakan halaman HTML. Gunakan gambar valid yang didukung layanan.
Dapatkan kunci API pemecah dari akun CapSolver Anda dan ekspos ke proses sebagai CAPSOLVER_API_KEY melalui lingkungan atau manajer rahasia Anda. Simpan kredensial ini jauh dari JavaScript browser dan kontrol sumber. Kredensial administrasi atau MCP bukan pengganti kunci API pemecah.
Tetapkan sesi formulir yang terkait dengan gambar. Simpan gambar baru setiap kali formulir menghasilkan tantangan baru. Menimpa nama file yang sama saat permintaan lain menggunakan formulir sebelumnya dapat menghasilkan respons pengenalan yang valid untuk percobaan yang salah. Berikan file terpisah untuk percobaan bersamaan atau simpan byte mereka secara terpisah.
Baca gambar sebagai data biner, lalu enkripsi Buffer yang dihasilkan. Dokumentasi sistem file Node menggambarkan readFile, dan dokumentasi Buffer mendefinisikan enkripsi Base64.
Ekspresi kunci di bawah ini adalah image.toString('base64'). Jangan baca file sebagai UTF-8 terlebih dahulu: bite gambar bukan dokumen teks. Jangan kirim nama file sebagai task.body, juga. Layanan jauh membutuhkan konten yang dienkripsi, bukan jalur di komputer Anda.
Kirim Base64 mentah tanpa awalan data:image/png;base64,. URL data memiliki peran yang berguna di browser tetapi berbeda dari tubuh tugas yang ditunjukkan dalam dokumentasi pengenalan. Menghasilkan enkripsi dari Buffer menghindari salinan awalan yang tidak relevan atau baris baru.
Contoh ini menolak file kosong. Ia tidak memvalidasi format gambar, dimensi, atau kualitas visual. Jika aplikasi Anda menerima unggahan arbitrer, validasi mereka sebelum fungsi ini. Pembacaan yang sukses hanya menetapkan bahwa bite tersedia.
Simpan adapter ini sebagai recognize-image.mjs. Bidang endpoint dan tugas mengikuti dokumentasi resmi. Pemuatan file, timeout, dan pemeriksaan respons adalah penambahan untuk contoh ini. Adapter dijalankan dengan respons yang dimokokan; menggunakannya terhadap layanan nyata memerlukan kunci pemecah Anda dan tetap menjadi langkah validasi hidup.
import { readFile } from 'node:fs/promises';
// Bidang permintaan mengikuti dokumentasi tugas ImageToTextTask resmi.
export async function recognizeImage(path, apiKey, request = fetch) {
if (!apiKey) throw new Error('Setel CAPSOLVER_API_KEY terlebih dahulu.');
const image = await readFile(path);
if (!image.length) throw new Error('File gambar kosong.');
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('Kode status HTTP ' + response.status);
const result = await response.json();
if (result.errorId !== 0) {
throw new Error(result.errorCode || 'Pengenalan gambar gagal.');
}
if (result.status !== 'ready' ||
typeof result.solution?.text !== 'string' ||
!result.solution.text.length) {
throw new Error('API tidak mengembalikan teks yang dikenali.');
}
return result.solution.text;
}
Fungsi ini menerima jalur dan kunci API dan mengembalikan teks yang dikenali. Argumen ketiga memungkinkan pengujian mengganti fetch; pemanggil normal mengabaikannya. Timeout 60 detik adalah pengaturan lokal, bukan waktu pengenalan yang dijanjikan atau batas layanan.
Pemeriksaan respons mengikuti tahap permintaan. Status HTTP yang tidak berhasil gagal sebelum parsing. JSON yang tidak valid menghasilkan kesalahan parsing. Kesalahan penyedia ditangani melalui errorId. Envelope yang terlihat sukses harus tetap mengandung hasil siap dengan teks non-kosong, mencegah jawaban yang hilang menjadi nilai kosong formulir.
Tidak ada permintaan ulang otomatis. Setelah kegagalan transportasi, klien mungkin tidak tahu apakah layanan menerima tugas asli. Putuskan bagaimana menangani ketidakpastian ini sebelum menambahkan ulang.
Klaim Kode Bonus CapSolver Anda
Tingkatkan anggaran otomasi Anda secara instan!
Gunakan kode bonus CAP26 saat menambahkan dana ke akun CapSolver Anda untuk mendapatkan tambahan 5% bonus pada setiap penambahan โ tanpa batas.
Klaim sekarang di Dashboard CapSolver Anda
Simpan titik masuk berikut sebagai run.mjs di samping adapter. Permintaan hidup memerlukan kunci pemecah Anda sendiri; adapter lokal tidak menetapkan solusi hidup:
import { recognizeImage } from './recognize-image.mjs';
try {
const path = process.argv[2];
if (!path) throw new Error('Penggunaan: node run.mjs ./captcha.png');
const text = await recognizeImage(path, process.env.CAPSOLVER_API_KEY);
console.log(text); // Hanya gunakan gambar uji yang dimiliki dan non-sensitif di sini.
} catch (error) {
console.error(error.message);
process.exitCode = 1;
}
Dengan kunci pemecah tersedia di lingkungan Anda, jalankan perintah berikut. Invokasi hidup tidak dilakukan untuk panduan ini:
node run.mjs ./captcha.png
Invokasi yang sukses mencetak teks yang dikembalikan. Jawaban bergantung pada gambar Anda; tidak ada nilai yang diharapkan tetap untuk panggilan hidup. Gunakan fixture yang dimiliki dan non-sensitif untuk contoh terminal ini, dan hindari mencetak jawaban tantangan di log aplikasi yang berbagi.
Dalam runner uji, panggil recognizeImage dan kirim nilai kembalinya ke kolom jawaban yang terkait dengan gambar yang sama. Pemilih dan metode pengiriman milik aplikasi Anda, jadi tidak dibuat di sini. Pastikan hasil formulir aktual setelah pengiriman, seperti catatan uji yang diharapkan diterima.
Simpan string yang dikenali kecuali formulir secara eksplisit menentukan normalisasi. Mengonversi setiap jawaban ke huruf besar atau menghapus spasi dapat mengubah maknanya. Set karakter yang diketahui dapat membantu mengidentifikasi hasil yang tidak terduga, tetapi validasi tidak boleh menulis ulang karakter yang tidak pasti secara diam-diam.
Pilih modul sesuai dengan tugas gambar yang dijelaskan oleh layanan. Permintaan ini secara eksplisit menggunakan common. Konsultasikan deskripsi modul dalam dokumentasi ImageToTextTask sebelum memilih mode khusus.
Modul tidak dapat memperbaiki input yang tidak relevan. Screenshot seluruh formulir, tantangan lama, atau gambar yang mengandung teks tidak relevan mungkin menghasilkan jawaban yang tidak sesuai terlepas dari pengaturan. Pastikan bite yang dikirimkan sesuai dengan tantangan dan percobaan aktif yang dimaksud terlebih dahulu.
Jika aplikasi Anda menghasilkan beberapa gaya gambar, gunakan sampel yang dimiliki untuk setiap gaya. Pisahkan jawaban yang diharapkan dari jawaban yang dikenali dari fixture Anda. Ini membuat ketidakcocokan dapat diulang tanpa mempresentasikan pemeriksaan enkripsi sintetis sebagai bukti akurasi pengenalan.
Misalnya, fixture dapat menegaskan bahwa byte file yang tepat bertahan melalui enkripsi dan dekripsi Base64. Pemeriksaan pengenalan yang terpisah membandingkan jawaban penyedia dengan karakter yang diketahui dari fixture. Uji ketiga mengirimkan jawaban ini melalui formulir. Uji ini menjawab pertanyaan yang berbeda dan harus melaporkan hasil yang terpisah.
Selidiki kegagalan input lokal sebelum kualitas pengenalan. Jalur yang tidak dapat dibaca, file kosong, atau kunci yang hilang berarti permintaan belum selesai dengan sukses. Mengubah modul pengenalan tidak dapat memecahkan kegagalan ini.
Untuk kegagalan jauh, simpan kode kesalahan penyedia dalam catatan diagnostik yang dikendalikan dan konsultasikan referensi kesalahan API resmi. Hindari menumpahkan tubuh permintaan, yang mengandung kredensial dan gambar. Catat tahap yang gagal dan identifikasi kesalahan alih-alih.
| Gejala | Pemeriksaan pertama |
|---|---|
| File tidak dapat dibaca | Direktori kerja, jalur, izin |
| Tugas gambar ditolak | Tipe tugas, Base64 mentah, input gambar yang didukung |
| Tidak ada teks yang dikenali | Bidang kesalahan dan struktur respons |
| Teks ditolak formulir | Gambar dan sesi yang sama, jawaban tidak berubah |
| Permintaan timeout | Apakah hasil asli tidak pasti |
Dokumentasi API global Node menutupi primitif permintaan dan pembatalan yang digunakan di sini. Mengakhiri tunggu lokal tidak menetapkan bahwa pemrosesan jauh dibatalkan.
Ketika melaporkan masalah, deskripsikan tahap yang gagal. "Pembacaan file gagal" dan "layanan mengembalikan teks yang ditolak formulir" memerlukan bukti yang berbeda. Jaga kredensial dan konten gambar jauh dari laporan yang berbagi kecuali proses dukungan yang dikendalikan secara eksplisit membutuhkannya.
Adapter dijalankan dengan tujuh kasus uji lokal yang mencakup konstruksi permintaan dan penyimpanan Base64, kunci yang hilang, input kosong, kegagalan HTTP, kesalahan penyedia, hasil yang hilang, dan respons yang tidak terbaca atau gagal. Beberapa kasus mengelompokkan asersi yang terkait. Uji ini mengganti fetch, jadi tidak menghubungi layanan berbayar.
Fixture gambar memeriksa enkripsi, dan jawaban adalah nilai uji yang disediakan. Pemeriksaan ini menetapkan perilaku JavaScript lokal. Mereka tidak mengukur akurasi pengenalan atau membuktikan penerimaan oleh formulir nyata. Lengkapi pemeriksaan ini dengan kunci pemecah Anda dan tantangan yang dimiliki saat ini sebelum mengandalkan integrasi.
Untuk tugas token dalam aplikasi yang sama, gunakan panduan API CAPTCHA JavaScript. Pertahankan pengenalan gambar di cabang terpisah karena tipe hasil dan alur pengambilan yang terdokumentasi berbeda. Coba CapSolver dengan gambar yang dimiliki untuk memvalidasi koneksi akhir.
P: Apakah saya memerlukan paket npm?
Adapter menggunakan API Node.js bawaan dan tidak memerlukan paket npm. Anda masih memerlukan runtime yang kompatibel, gambar yang valid, dan kunci pemecah. Node.js 24.16.0 digunakan untuk pengujian lokal.
P: Apakah ImageToTextTask menggunakan getTaskResult?
Alur pengenalan yang terdokumentasi mengembalikan hasil siap dengan solution.text dari createTask. Adapter ini tidak melakukan polling. Loop polling dari tugas CAPTCHA lain tidak boleh disalin otomatis.
P: Bisakah saya mengirim URL gambar alih-alih Base64?
Permintaan yang terdokumentasi menggunakan konten gambar yang dienkripsi dalam bidang body. Peroleh gambar yang dimiliki melalui aplikasi Anda dan enkripsi bite-nya. Nama file atau URL tidak setara dengan nilai ini.
P: Mengapa formulir menolak teks yang dikenali?
Periksa apakah gambar dan sesi milik percobaan yang sama dan jawaban tidak berubah. String yang dikembalikan tidak menetapkan kebenaran pengenalan atau penerimaan aplikasi.
P: Apakah pengujian lokal membuktikan akurasi pengenalan?
Tidak. Mereka menggunakan respons yang disediakan untuk memverifikasi perilaku adapter. Pengenalan dan penerimaan end-to-end memerlukan uji terpisah terhadap layanan hidup dan formulir yang dimiliki.

Sora Fujimoto
AI Solutions Architect
Connecting agents, browsers, and APIs into one workflow.
TENTANG PENULIS
Bandingkan ImageToTextTask dan VisionEngine dengan input CAPTCHA, output pengenalan, persyaratan modul, dan pemeriksaan aplikasi sebelum memilih tugas penyelesaian.

Pilih pemecah CAPTCHA polling atau webhooks menggunakan status tugas, persyaratan penerima, kebaruan hasil, dan alur penyelesaian API CapSolver yang didokumentasikan.
