
Aloísio Vítor
Image Processing Expert

CAPTCHA berbasis gambar ada di mana-mana — formulir login, halaman pendaftaran, situs web tiket, dan portal pemerintah. Mereka menampilkan gambar huruf, angka, atau campuran keduanya yang terdistorsi, dan meminta pengguna untuk mengetik apa yang mereka lihat. Mengotomatiskan ini dengan alat tradisional berarti membangun pipeline OCR Anda sendiri, menangani filter kebisingan, dan menangani kasus khusus untuk setiap font dan jenis distorsi.
Bagaimana jika Anda dapat secara otomatis memecahkan CAPTCHA gambar dalam alur kerja n8n Anda — apakah Anda sedang membangun API pemecah yang dapat digunakan kembali atau mengotomatiskan pengiriman formulir yang memerlukan pembacaan captcha gambar — semuanya tanpa melatih satu model pun?
Dalam panduan ini, Anda akan belajar cara menggabungkan n8n (alat otomatisasi alur kerja visual) dengan CapSolver (layanan pemecah captcha bertenaga AI) untuk memecahkan captcha Gambar-ke-Teks sesuai permintaan — baik sebagai titik akhir API mandiri atau sebagai langkah dalam alur kerja otomatisasi yang lebih besar.
Apa yang akan Anda bangun:
API Pemecah — titik akhir yang dapat digunakan kembali yang dapat dipanggil oleh alat Anda yang lain:
Alur Kerja Penggunaan Langsung — CapSolver disematkan sebagai langkah dalam otomatisasi yang lebih besar:
ImageToTextTask adalah layanan pengenalan berbasis OCR CapSolver. Anda mengirimkan gambar captcha yang dikodekan base64, dan CapSolver mengembalikan teks yang dikenali — huruf, angka, atau keduanya — secara instan.
Ini secara fundamental berbeda dari operasi CapSolver lainnya seperti reCAPTCHA atau Turnstile:
| Fitur | ImageToText (Pengenalan) | reCAPTCHA / Turnstile (Token) |
|---|---|---|
| Jenis Sumber Daya | Pengenalan | Token |
| Input | Gambar Base64 | URL situs web + kunci situs |
| Hasil | Teks yang dikenali (instan) | Token (membutuhkan polling) |
| Membutuhkan Proxy | Tidak | Tergantung jenis tugas |
| Kasus Penggunaan | Membaca teks terdistorsi dari gambar | Menghasilkan token verifikasi |
Perbedaan utama adalah operasi Pengenalan mengembalikan hasil secara instan — tidak ada pembuatan tugas dan kemudian polling. Anda mengirimkan gambar, CapSolver membacanya, dan teks dikembalikan dalam satu siklus permintaan-respons.
| Parameter | Nilai | Deskripsi |
|---|---|---|
body |
String Base64 | Gambar captcha, dikodekan base64. Tidak ada karakter baris baru, tidak ada awalan data:image/...;base64, — hanya string base64 mentah |
module |
"common" |
Modul pengenalan. "common" menangani OCR alfanumerik umum |
| Parameter | Deskripsi |
|---|---|
websiteURL |
URL halaman tempat captcha muncul (membantu CapSolver mengoptimalkan pengenalan) |
images (1-9) |
Gambar tambahan untuk modul "number" saat memecahkan captcha numerik multi-gambar |
| Modul | Tujuan |
|---|---|
common |
OCR umum — huruf, angka, karakter campuran. Default untuk sebagian besar captcha |
number |
Captcha khusus angka. Mendukung pemecahan batch dengan hingga 9 gambar tambahan melalui parameter images |
Sebelum memulai, pastikan Anda memiliki hal-hal berikut:
Penting: Pastikan Anda memiliki saldo yang cukup di akun CapSolver Anda. Tugas ImageToText mengonsumsi kredit berdasarkan penggunaan.
CapSolver tersedia sebagai integrasi resmi di n8n — tidak perlu menginstal node komunitas. Anda dapat menemukannya langsung di panel node saat membangun alur kerja Anda.
Karena ini adalah integrasi resmi, Anda perlu membuat kredensial di n8n agar node CapSolver dapat mengautentikasi dengan akun Anda.
Buka instans n8n Anda dan navigasikan ke Settings -> Credentials. Anda akan melihat semua kredensial yang telah Anda konfigurasi di sini.

All (default)n8n akan secara otomatis menguji koneksi. Anda akan melihat spanduk hijau "Connection tested successfully" yang mengonfirmasi kunci API Anda valid.

Penting: Setiap node CapSolver dalam alur kerja Anda akan merujuk kredensial ini. Anda hanya perlu membuatnya sekali — semua alur kerja pemecah Anda akan berbagi kredensial yang sama.
Sekarang Anda siap untuk membangun alur kerja pemecah Gambar-ke-Teks Anda!
Sebelum masuk ke alur kerja, penting untuk memahami persyaratan base64 untuk ImageToTextTask. Ini adalah sumber kesalahan paling umum.
Parameter body harus berisi string base64 bersih — byte yang dikodekan mentah dari file gambar. Secara khusus:
data: — jika Anda memiliki data:image/png;base64,iVBORw0KGgo..., Anda harus menghapus bagian data:image/png;base64,\nKetika Anda mengambil gambar menggunakan node Permintaan HTTP di n8n, respons datang sebagai data biner. Untuk mengubahnya menjadi base64 untuk CapSolver, gunakan node Kode:
// Mengubah data gambar biner menjadi base64 bersih
const binaryData = $input.first().binary.data;
const base64String = binaryData.data; // Sudah base64 dalam format biner n8n
// Hapus awalan data: jika ada (pemeriksaan keamanan)
const cleanBase64 = base64String.replace(/^data:image\/\w+;base64,/, "");
// Hapus karakter baris baru apa pun
const finalBase64 = cleanBase64.replace(/\n/g, "");
return [{ json: { body: finalBase64 } }];
| Kesalahan | Hasil |
|---|---|
Mengirim data:image/png;base64,... |
CapSolver menolak konten sebagai tidak valid |
| String Base64 berisi karakter baris baru | CapSolver tidak dapat mendekode gambar |
| Mengirim URL gambar alih-alih base64 | Parameter salah — body mengharapkan base64, bukan URL |
| Mengirim string kosong | CapSolver mengembalikan kesalahan |
Alur kerja ini membuat titik akhir API POST yang menerima gambar captcha base64 dan mengembalikan teks yang dikenali.
Alur kerja terdiri dari enam node:
body ada dan merupakan base64 yang valid| Pengaturan | Nilai |
|---|---|
| Metode HTTP | POST |
| Jalur | solver-image-to-text |
| Respons | Response Node |
Ini membuat titik akhir di: https://your-n8n-instance.com/webhook/solver-image-to-text
Node ini memastikan bahwa isi permintaan berisi parameter body yang valid dan menghapus awalan data: atau karakter baris baru yang tidak disengaja:
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);
// Hapus awalan data: jika tidak sengaja disertakan
imageBase64 = imageBase64.replace(/^data:image\/\w+;base64,/, '');
// Hapus karakter baris baru dan spasi kosong
imageBase64 = imageBase64.replace(/[\n\r\s]/g, '');
// Validasi base64 dasar
if (!/^[A-Za-z0-9+\/]+=*$/.test(imageBase64)) {
return [{ json: { error: 'Invalid base64 encoding in body field' } }];
}
return [{
json: {
body: imageBase64,
module: body.module || 'common'
}
}];
| Parameter | Nilai | Deskripsi |
|---|---|---|
| Sumber Daya | Recognition |
Pilih sumber daya Pengenalan (bukan Token) |
| Operasi | Image To Text |
Operasi ImageToTextTask |
| Body | {{ $json.body }} |
String gambar base64 bersih |
| Modul | {{ $json.module }} |
Modul pengenalan (default: common) |
Penting: Dalam node CapSolver, Anda harus memilih Resource = Recognition terlebih dahulu, lalu Operation = Image To Text. Ini berbeda dari operasi Token seperti reCAPTCHA atau Turnstile. Juga pilih kredensial CapSolver Anda di node ini.
| Pengaturan | Nilai |
|---|---|
| Kondisi | ={{ $json.error }} tidak kosong |
| Cabang True | Pergi ke node Error Respond to Webhook |
| Cabang False | Pergi ke node Success Respond to Webhook |
Node CapSolver melanjutkan pada kesalahan (onError: continueRegularOutput), jadi kesalahan akan datang ke sini sebagai { "error": "..." } daripada menghentikan alur kerja.
| Pengaturan | Nilai |
|---|---|
| Respons dengan | JSON |
| Isi Respons | ={{ JSON.stringify($json.data) }} |
| Pengaturan | Nilai |
|---|---|
| Respons dengan | JSON |
| Isi Respons | ={{ JSON.stringify({ error: $json.error }) }} |
Pesan kesalahan mengikuti salah satu dari dua format:
| Titik Kegagalan | Format |
|---|---|
| Pembuatan tugas gagal | { "error": "..." } |
| Pengenalan gagal | { "status": "failed", "error": "..." } |
Kirim permintaan POST ke titik akhir webhook Anda:
curl -X POST https://your-n8n-instance.com/webhook/solver-image-to-text \
-H "Content-Type: application/json" \
-d '{
"body": "iVBORw0KGgoAAAANSUhEUgAA...",
"module": "common"
}'
Respons yang diharapkan:
{
"solution": {
"text": "xK7mQ"
},
"status": "ready"
}
Bidang solution.text berisi teks captcha yang dikenali. Ini adalah nilai yang akan Anda masukkan ke bidang input captcha.
Salin JSON di bawah ini dan impor ke n8n melalui Menu -> Import from JSON:
{
"name": "Image To Text — Solver API",
"nodes": [
{
"parameters": {
"content": "## Image To Text — Solver API\n\n**Untuk siapa:** Pengembang yang membutuhkan titik akhir pemecah captcha berbasis OCR untuk aplikasi mereka.\n\n**Apa yang dilakukannya:** Menerima gambar captcha yang dikodekan base64 melalui webhook, memvalidasi input, memecahkannya menggunakan pengenalan ImageToTextTask CapSolver, dan mengembalikan teks yang dikenali.\n\n**Cara kerjanya:**\n1. Webhook menerima POST dengan `body` (gambar base64) dan `module` opsional\n2. Node Kode memvalidasi input base64 dan menghapus awalan data: apa pun\n3. Node Pengenalan CapSolver memecahkan captcha gambar secara instan\n4. Node IF memeriksa kesalahan\n5. Respons mengembalikan teks yang dikenali atau detail kesalahan\n\n**Pengaturan:**\n1. Tambahkan kunci API CapSolver Anda di **Settings → Credentials**\n2. Aktifkan alur kerja untuk mengaktifkan titik akhir webhook\n3. Kirim gambar base64 ke `/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": "### Terima dan Validasi\nWebhook menerima POST dengan gambar base64. Node Kode memvalidasi dan membersihkan input.",
"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": "### Pecahkan Captcha Gambar\nNode Pengenalan CapSolver — mengembalikan teks yang dikenali secara instan (tidak ada polling).",
"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": "### Periksa Kesalahan dan Respons\nNode IF bercabang pada kesalahan. Berhasil mengembalikan teks yang dikenali, gagal mengembalikan detail kesalahan.",
"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": "### Logika Validasi\nHapus awalan data:, hapus karakter baris baru, periksa format 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": "### Penanganan Respons\nBerhasil: kembalikan solusi dengan teks yang dikenali. Gagal: kembalikan pesan kesalahan.",
"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// Hapus awalan data: jika tidak sengaja disertakan\nimageBase64 = imageBase64.replace(/^data:image\\/\\w+;base64,/, '');\n\n// Hapus karakter baris baru dan spasi kosong\nimageBase64 = imageBase64.replace(/[\\n\\r\\s]/g, '');\n\n// Validasi base64 dasar\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"
}
}
Alur kerja ini mengotomatiskan pengiriman formulir end-to-end di situs web yang dilindungi oleh captcha gambar. Ini mengambil gambar captcha dari situs web target, mengubahnya menjadi base64, memecahkannya dengan CapSolver, dan mengirimkan formulir dengan teks yang dikenali.
Ini mendukung dua mode pemicu:
Jalur Jadwal:
Setiap 6 Jam → Atur Konfigurasi Target → Ambil Gambar Captcha → Ubah ke Base64
→ Pecahkan Captcha Gambar → Kirim Formulir dengan Solusi → Periksa Hasil Pengiriman
→ Tandai Berhasil / Tandai Gagal
Jalur Webhook:
Pemicu Webhook → Atur Konfigurasi Target [Webhook] → Ambil Gambar Captcha [Webhook]
→ Ubah ke Base64 [Webhook] → Pecahkan Captcha Gambar [Webhook]
→ Kirim Formulir dengan Solusi [Webhook] → Periksa Hasil Pengiriman [Webhook]
→ Tandai Berhasil [Webhook] / Tandai Gagal [Webhook] → Respons Webhook
Pemicu Jadwal:
| Pengaturan | Nilai |
|---|---|
| Interval | Setiap 6 jam |
Pemicu Webhook:
| Pengaturan | Nilai |
|---|---|
| Metode HTTP | POST |
| Jalur | image-captcha-form |
| Respons | Response Node |
Node ini menyimpan semua konfigurasi untuk situs web target di satu tempat:
| Bidang Konfigurasi | Tujuan |
|---|---|
captchaImageURL |
URL yang menyajikan gambar captcha (misalnya, https://example.com/captcha.png) |
formActionURL |
Titik akhir yang menerima POST formulir |
captchaFieldName |
Nama bidang formulir untuk jawaban captcha (misalnya, captcha, captcha_code, verification) |
module |
Modul pengenalan CapSolver (common untuk OCR umum, number untuk angka saja) |
userAgent |
String agen pengguna untuk dikirim dengan permintaan |
| Pengaturan | Nilai |
|---|---|
| Metode | GET |
| URL | ={{ $json.captchaImageURL }} |
| Format Respons | File (biner) |
Ini mengunduh gambar captcha sebagai data biner. Respons akan tersedia di $binary.data.
Catatan: Beberapa situs web memerlukan cookie atau header sesi untuk menyajikan gambar captcha. Jika captcha terikat sesi, Anda mungkin perlu menambahkan permintaan sebelumnya untuk mendapatkan cookie sesi dan meneruskannya.
// Mengubah gambar captcha biner menjadi string base64 bersih
const binaryData = $input.first().binary.data;
const base64String = binaryData.data;
// Hapus awalan data: jika ada
const cleanBase64 = base64String.replace(/^data:image\/\w+;base64,/, '');
// Hapus karakter baris baru apa pun
const finalBase64 = cleanBase64.replace(/\n/g, '');
// Teruskan konfigurasi target dari node 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
}
}];
| Parameter | Nilai |
|---|---|
| Sumber Daya | Recognition |
| Operasi | Image To Text |
| Body | ={{ $json.body }} |
| Modul | ={{ $json.module }} |
Ini mengembalikan teks yang dikenali secara instan di $json.data.solution.text.
| Pengaturan | Nilai |
|---|---|
| Metode | POST |
| URL | ={{ $('Set Target Config').first().json.formActionURL }} |
| Jenis Konten | form-urlencoded |
| Bidang Konten | Bidang formulir + jawaban captcha |
Jawaban captcha masuk ke bidang yang ditentukan oleh captchaFieldName:
| Bidang | Nilai |
|---|---|
username |
nama-pengguna-anda |
password |
kata-sandi-anda |
{{ captchaFieldName }} |
={{ $json.data.solution.text }} |
| Pengaturan | Nilai |
|---|---|
| Kondisi | {{ $json.statusCode < 400 }} — memeriksa apakah respons HTTP menunjukkan keberhasilan |
| Cabang True | Tandai Berhasil |
| Cabang False | Tandai Gagal |
Kirim permintaan POST untuk memicu otomatisasi formulir:
curl -X POST https://your-n8n-instance.com/webhook/image-captcha-form \
-H "Content-Type: application/json" \
-d '{}'
Respons yang diharapkan (berhasil):
{
"action": "form_submission",
"status": "success",
"captchaText": "xK7mQ",
"message": "Form submitted successfully with solved captcha",
"submittedAt": "2026-03-16T12:00:00.000Z"
}
Respons yang diharapkan (gagal):
{
"action": "form_submission",
"status": "failed",
"statusCode": 403,
"message": "Form submission was rejected by the target site",
"submittedAt": "2026-03-16T12:00:00.000Z"
}
Salin JSON di bawah ini dan impor ke n8n melalui Menu -> Import from JSON:
{
"name": "Form Automation — Solve Image Captcha & Submit",
"nodes": [
{
"parameters": {
"content": "## Otomatisasi Formulir — Pecahkan Captcha Gambar & Kirim\n\n**Untuk siapa:** Tim yang mengotomatiskan pengiriman formulir di situs web yang dilindungi oleh CAPTCHA berbasis gambar.\n\n**Apa yang dilakukannya:** Mengambil gambar captcha dari situs web target, mengubahnya menjadi base64, memecahkannya dengan OCR CapSolver, dan mengirimkan formulir dengan teks yang dikenali.\n\n**Cara kerjanya:**\n1. Jadwal (setiap 6 jam) atau Webhook memicu alur\n2. Konfigurasi target menentukan URL target, nama bidang, dan modul\n3. Permintaan HTTP mengambil gambar captcha sebagai biner\n4. Node Kode mengubah biner menjadi base64 bersih\n5. Pengenalan CapSolver memecahkan gambar secara instan\n6. Permintaan HTTP mengirimkan formulir dengan teks yang dikenali\n7. Node IF memeriksa keberhasilan pengiriman\n\n**Pengaturan:**\n1. Tambahkan kunci API CapSolver Anda di **Settings → Credentials**\n2. Perbarui Konfigurasi target dengan detail situs web target Anda\n3. Perbarui bidang formulir di Kirim Formulir agar sesuai dengan target\n4. Aktifkan alur kerja",
"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": "### Jalur Jadwal\nBerjalan secara otomatis setiap 6 jam. Mengambil captcha, memecahkannya, dan mengirimkan formulir.",
"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": "### Jalur Webhook\nPemicu sesuai permintaan — logika yang sama, mengembalikan hasil sebagai respons 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": "### Ambil dan Ubah\nUnduh gambar captcha, ubah biner menjadi 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": "### Pecahkan dan Kirim\nCapSolver membaca gambar, formulir dikirim dengan jawaban.",
"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": "### Tangani Hasil\nPeriksa status HTTP, tandai berhasil atau gagal.",
"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": "Ambil Gambar Captcha"
},
{
"parameters": {
"jsCode": "// Mengubah gambar captcha biner menjadi string base64 bersih\nconst binaryData = $input.first().binary.data;\nconst base64String = binaryData.data;\n\n// Hapus awalan data: jika ada\nconst cleanBase64 = base64String.replace(/^data:image\\/\\w+;base64,/, '');\n\n// Hapus karakter baris baru apa pun\nconst finalBase64 = cleanBase64.replace(/\\n/g, '');\n\n// Teruskan konfigurasi target\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": "Ubah ke 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": "Pecahkan Captcha Gambar",
"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": "Kirim Formulir dengan Solusi"
},
{
"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": "Periksa Hasil Pengiriman"
},
{
"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": "={{ $('Pecahkan Captcha Gambar').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": "Tandai Berhasil"
},
{
"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": "Tandai Gagal"
},
{
"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": "Pemicu 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": "Atur Konfigurasi Target [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": "Ambil Gambar Captcha [Webhook]"
},
{
"parameters": {
"jsCode": "// Mengubah gambar captcha biner menjadi string base64 bersih\nconst binaryData = $input.first().binary.data;\nconst base64String = binaryData.data;\n\n// Hapus awalan data: jika ada\nconst cleanBase64 = base64String.replace(/^data:image\\/\\w+;base64,/, '');\n\n// Hapus karakter baris baru apa pun\nconst finalBase64 = cleanBase64.replace(/\\n/g, '');\n\n// Teruskan konfigurasi target\nconst config = $('Atur Konfigurasi Target [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": "Ubah ke 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": "Pecahkan Captcha Gambar [Webhook]",
"onError": "continueRegularOutput",
"credentials": {
"capSolverApi": {
"id": "YOUR_CREDENTIAL_ID",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"method": "POST",
"url": "={{ $('Atur Konfigurasi Target [Webhook]').first().json.formActionURL }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "content-type",
"value": "application/x-www-form-urlencoded"
},
{
"name": "user-agent",
"value": "={{ $('Atur Konfigurasi Target [Webhook]').first().json.userAgent }}"
}
]
},
"sendBody": true,
"contentType": "form-urlencoded",
"bodyParameters": {
"parameters": [
{
"name": "username",
"value": "YOUR_USERNAME"
},
{
"name": "password",
"value": "YOUR_PASSWORD"
},
{
"name": "={{ $('Atur Konfigurasi Target [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": "Kirim Formulir dengan Solusi [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": "Periksa Hasil Pengiriman [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": "={{ $('Pecahkan Captcha Gambar [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": "Tandai Berhasil [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": "Tandai Gagal [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": "Respons Webhook"
}
],
"connections": {
"Every 6 Hours": {
"main": [
[
{
"node": "Set Target Config",
"type": "main",
"index": 0
}
]
]
},
"Set Target Config": {
"main": [
[
{
"node": "Ambil Gambar Captcha",
"type": "main",
"index": 0
}
]
]
},
"Ambil Gambar Captcha": {
"main": [
[
{
"node": "Ubah ke Base64",
"type": "main",
"index": 0
}
]
]
},
"Ubah ke Base64": {
"main": [
[
{
"node": "Pecahkan Captcha Gambar",
"type": "main",
"index": 0
}
]
]
},
"Pecahkan Captcha Gambar": {
"main": [
[
{
"node": "Kirim Formulir dengan Solusi",
"type": "main",
"index": 0
}
]
]
},
"Kirim Formulir dengan Solusi": {
"main": [
[
{
"node": "Periksa Hasil Pengiriman",
"type": "main",
"index": 0
}
]
]
},
"Periksa Hasil Pengiriman": {
"main": [
[
{
"node": "Tandai Berhasil",
"type": "main",
"index": 0
}
],
[
{
"node": "Tandai Gagal",
"type": "main",
"index": 0
}
]
]
},
"Pemicu Webhook": {
"main": [
[
{
"node": "Atur Konfigurasi Target [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Atur Konfigurasi Target [Webhook]": {
"main": [
[
{
"node": "Ambil Gambar Captcha [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Ambil Gambar Captcha [Webhook]": {
"main": [
[
{
"node": "Ubah ke Base64 [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Ubah ke Base64 [Webhook]": {
"main": [
[
{
"node": "Pecahkan Captcha Gambar [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Pecahkan Captcha Gambar [Webhook]": {
"main": [
[
{
"node": "Kirim Formulir dengan Solusi [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Kirim Formulir dengan Solusi [Webhook]": {
"main": [
[
{
"node": "Periksa Hasil Pengiriman [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Periksa Hasil Pengiriman [Webhook]": {
"main": [
[
{
"node": "Tandai Berhasil [Webhook]",
"type": "main",
"index": 0
}
],
[
{
"node": "Tandai Gagal [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Tandai Berhasil [Webhook]": {
"main": [
[
{
"node": "Respons Webhook",
"type": "main",
"index": 0
}
]
]
},
"Tandai Gagal [Webhook]": {
"main": [
[
{
"node": "Respons Webhook",
"type": "main",
"index": 0
}
]
]
}
],
"active": false,
"settings": {
"executionOrder": "v1"
}
}
Jika Anda telah menggunakan node CapSolver n8n untuk reCAPTCHA, Turnstile, atau jenis tantangan lainnya, Anda telah menggunakan sumber daya Token. Gambar-ke-Teks menggunakan sumber daya Pengenalan, dan perbedaannya penting:
websiteURL dan websiteKey.Inilah mengapa node CapSolver n8n memiliki dua sumber daya terpisah:
| Sumber Daya | Operasi |
|---|---|
| Token | reCAPTCHA v2, reCAPTCHA v3, Cloudflare Turnstile, Cloudflare Challenge, GeeTest V3, GeeTest V4, DataDome, AWS WAF, MTCaptcha |
| Pengenalan | Gambar-ke-Teks |
Saat mengonfigurasi node CapSolver untuk Gambar-ke-Teks, pastikan Anda memilih Resource = Recognition terlebih dahulu — ini akan mengubah operasi dan parameter yang tersedia.
Alur kerja ini adalah template. Pada target dunia nyata, Anda harus mengharapkan penyesuaian:
Template otomatisasi formulir mengambil gambar dari satu URL (captchaImageURL). Dalam praktiknya, gambar captcha mungkin:
<img> base64Banyak sistem captcha gambar terikat sesi — gambar captcha terikat pada sesi sisi server. Jika Anda mengambil gambar dalam satu permintaan dan mengirimkan jawaban dalam permintaan lain, Anda perlu:
Situs web yang berbeda menggunakan nama bidang formulir yang berbeda untuk jawaban captcha:
| Nama Bidang Umum |
|---|
captcha |
captcha_code |
verification |
captcha_text |
answer |
security_code |
Periksa HTML formulir untuk nama bidang yang tepat.
Sebagian besar captcha gambar berfungsi dengan module: "common". Tetapi jika captcha hanya berisi angka, coba module: "number" — ini dioptimalkan untuk pengenalan numerik dan dapat memberikan hasil yang lebih baik.
Template menyertakan bidang placeholder username dan password. Target Anda mungkin memerlukan:
Kesalahan ini berarti akun atau paket CapSolver Anda tidak menyertakan akses ImageToText. Periksa dasbor CapSolver Anda untuk memverifikasi paket Anda menyertakan layanan ini.
Pengenalan captcha gambar tidak 100% akurat. Jika Anda mendapatkan hasil yang salah:
module yang berbeda — "common" vs. "number" vs. ID modul tertentuPenyebab umum:
data:image/...;base64, tidak dihapusJika pengiriman formulir selalu gagal bahkan dengan teks yang dikenali dengan benar, penyebab yang paling mungkin adalah ketidakcocokan sesi antara pengambilan gambar dan pengiriman formulir. Pastikan Anda meneruskan cookie sesi yang sama antara kedua permintaan.
Ini biasanya berarti:
data: — selalu bersihkan base64 Anda sebelum mengirim ke CapSolver."common" untuk alfanumerik campuran, "number" untuk angka saja.Siap untuk memulai? Daftar untuk CapSolver dan gunakan kode bonus n8n untuk mendapatkan bonus 8% tambahan pada isi ulang pertama Anda!

Anda telah belajar cara membangun API pemecah Gambar-ke-Teks dan alur kerja otomatisasi formulir menggunakan n8n dan CapSolver.
Ringkasan:
Intinya: Gambar-ke-Teks adalah operasi CapSolver paling sederhana untuk diintegrasikan — Anda mengirimkan gambar base64 dan mendapatkan teks kembali secara instan. Tantangannya seringkali terletak pada alur kerja di sekitarnya: mengambil gambar dengan benar, mempertahankan status sesi, dan mengirimkan jawaban ke bidang formulir yang benar.
Tip: Alur kerja ini menggunakan pemicu Jadwal + Webhook, tetapi Anda dapat menukar node pemicu dengan pemicu n8n lainnya — manual, peristiwa aplikasi, pengiriman formulir, dll. Setelah captcha dipecahkan, gunakan node bawaan n8n untuk menyimpan hasil ke Google Sheets, database, penyimpanan cloud, atau mengirim peringatan melalui Telegram/Slack/Email.
ImageToTextTask adalah layanan pengenalan captcha berbasis OCR CapSolver. Anda mengirimkan gambar captcha yang dikodekan base64, dan CapSolver mengembalikan teks yang dikenali — huruf, angka, atau keduanya. Ini menggunakan sumber daya Pengenalan di node CapSolver n8n, yang berbeda dari sumber daya Token yang digunakan untuk reCAPTCHA, Turnstile, dan jenis tantangan lainnya.
Harga bervariasi tergantung pada penggunaan. Periksa halaman harga CapSolver untuk harga ImageToText saat ini. Tugas pengenalan gambar biasanya merupakan salah satu operasi CapSolver yang paling terjangkau.
Image-to-Text adalah operasi Pengenalan, yang berarti hasilnya dikembalikan secara instan — biasanya di bawah 1 detik. Tidak ada pembuatan tugas atau penundaan polling seperti pada operasi Token.
Tidak. Tidak seperti operasi Token (reCAPTCHA, Turnstile, Cloudflare Challenge), Gambar-ke-Teks tidak memerlukan proxy. Anda mengirimkan data gambar langsung ke CapSolver — tidak ada interaksi browser atau akses situs web yang terlibat.
CapSolver menerima format gambar umum (PNG, JPEG, GIF, BMP) sebagai data yang dikodekan base64. Gambar harus berisi captcha yang terlihat — tidak ada gambar kosong, rusak, atau terlalu besar.
module?Parameter module memberi tahu CapSolver mesin pengenalan mana yang harus digunakan:
"common" — OCR umum untuk huruf, angka, dan karakter campuran. Ini adalah default dan berfungsi untuk sebagian besar captcha."number" — Dioptimalkan untuk captcha khusus angka. Juga mendukung pemecahan batch dengan hingga 9 gambar tambahan."module_001" hingga "module_032" — Mesin khusus untuk jenis captcha tertentu. Periksa dokumentasi CapSolver untuk detail tentang setiap modul.Tidak. Pengenalan Gambar-ke-Teks CapSolver tidak mendukung kepekaan huruf besar/kecil. Jika situs web target memerlukan jawaban captcha yang peka huruf besar/kecil, hasil pengenalan mungkin tidak cocok. Ini adalah batasan yang diketahui.
Ya. Alur kerja ini berfungsi dengan n8n self-hosted dan n8n Cloud. Node CapSolver sudah tersedia sebagai integrasi resmi — cukup tambahkan kredensial API Anda.
Banyak situs web mengikat gambar captcha ke sesi server. Untuk menangani ini:
Di n8n, Anda dapat mengekstrak cookie dari header respons Permintaan HTTP dan meneruskannya ke permintaan berikutnya.
Pengenalan captcha gambar tidak 100% akurat — terutama untuk gambar yang sangat terdistorsi atau berisik. Jika Anda mendapatkan hasil yang salah:
"common", "number", atau ID modul tertentu).Untuk Gambar-ke-Teks, CapSolver mengembalikan teks yang dikenali, bukan token. Jika pengiriman formulir ditolak:
solution.text.Bangun API solver eCAPTCHA v2/v3 menggunakan CapSolver dan n8n. Pelajari cara mengotomatisasi penyelesaian token, mengirimkannya ke website, dan mengekstrak data yang dilindungi tanpa coding.

Buat API untuk menyelesaikan Cloudflare Turnstile menggunakan CapSolver dan n8n. Pelajari cara mengotomatisasi proses pengambilan token, mengirimkannya ke situs web, dan mengekstrak data yang dilindungi tanpa perlu coding.
