ProdukIntegrasiSumber DayaDokumentasiHarga
Mulai Sekarang

© 2026 CapSolver. All rights reserved.

Hubungi Kami

Slack: lola@capsolver.com

Produk

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • Ekstensi Browser
  • Lebih banyak jenis CAPTCHA

Integrasi

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • Mitra
  • Lihat semua integrasi

Sumber Daya

  • Program Referensi
  • Dokumentasi
  • Referensi API
  • Blog
  • FAQ
  • Glosarium
  • Status

Legal

  • Ketentuan Layanan
  • Kebijakan Privasi
  • Kebijakan Pengembalian Dana
  • Jangan jual informasi pribadi saya
//Cara Menyelesaikan Konversi Gambar ke Teks Menggunakan CapSolver dan n8n
Mar16, 2026

Cara Menyelesaikan Konversi Gambar ke Teks Menggunakan CapSolver dan n8n

Aloísio Vítor

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:

  • API pemecah Gambar-ke-Teks yang menerima gambar base64 dan mengembalikan teks yang dikenali.

Alur Kerja Penggunaan Langsung — CapSolver disematkan sebagai langkah dalam otomatisasi yang lebih besar:

  • Otomatisasi formulir yang mengambil gambar captcha dari situs web target, mengubahnya menjadi base64, memecahkannya dengan CapSolver, dan mengirimkan formulir dengan teks yang dikenali.

Apa itu ImageToTextTask?

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 Wajib

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 Opsional

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

Jenis Modul

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

Prasyarat

Sebelum memulai, pastikan Anda memiliki hal-hal berikut:

  1. Instans n8n — Self-hosted atau n8n Cloud
  2. Akun CapSolver — Daftar di sini dan dapatkan kunci API Anda
  3. Node CapSolver n8n — Sudah tersedia sebagai node resmi di n8n (tidak perlu instalasi)

Penting: Pastikan Anda memiliki saldo yang cukup di akun CapSolver Anda. Tugas ImageToText mengonsumsi kredit berdasarkan penggunaan.


Menyiapkan CapSolver di n8n

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.

Langkah 1: Buka halaman kredensial

Buka instans n8n Anda dan navigasikan ke Settings -> Credentials. Anda akan melihat semua kredensial yang telah Anda konfigurasi di sini.

Halaman kredensial n8n menampilkan akun CapSolver

Langkah 2: Buat kredensial CapSolver

  1. Klik Create credential (pojok kanan atas)
  2. Cari "CapSolver" dan pilih CapSolver API
  3. Masukkan Kunci API Anda — salin langsung dari Dasbor CapSolver
  4. Biarkan Allowed HTTP Request Domains diatur ke All (default)
  5. Klik Save

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

Konfigurasi kredensial CapSolver dengan pengujian koneksi berhasil

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!


Memahami Pengodean Base64 untuk Gambar Captcha

Sebelum masuk ke alur kerja, penting untuk memahami persyaratan base64 untuk ImageToTextTask. Ini adalah sumber kesalahan paling umum.

Apa yang Diharapkan CapSolver

Parameter body harus berisi string base64 bersih — byte yang dikodekan mentah dari file gambar. Secara khusus:

  • Tidak ada awalan data: — jika Anda memiliki data:image/png;base64,iVBORw0KGgo..., Anda harus menghapus bagian data:image/png;base64,
  • Tidak ada karakter baris baru — string base64 harus berupa satu baris berkelanjutan tanpa karakter \n
  • Tidak ada spasi kosong — tidak ada spasi, tab, atau karakter spasi kosong lainnya

Cara Mendapatkan String Base64 Bersih di n8n

Ketika Anda mengambil gambar menggunakan node Permintaan HTTP di n8n, respons datang sebagai data biner. Untuk mengubahnya menjadi base64 untuk CapSolver, gunakan node Kode:

javascript Copy
// 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 Umum

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 1: API Pemecah Gambar-ke-Teks

Alur kerja ini membuat titik akhir API POST yang menerima gambar captcha base64 dan mengembalikan teks yang dikenali.

Cara Kerjanya

Alur kerja terdiri dari enam node:

  1. Receive Solver Request — Webhook yang menerima permintaan POST dengan data gambar
  2. Validate Image Input — Node Kode yang memeriksa apakah body ada dan merupakan base64 yang valid
  3. Solve Image Captcha — Node CapSolver yang menggunakan Resource=Recognition, Operation=Image To Text
  4. Image Captcha Error? — Node IF yang bercabang berdasarkan apakah pemecahan gagal atau tidak
  5. Respond to Webhook — Mengembalikan teks yang dikenali saat berhasil
  6. Respond to Webhook Error — Mengembalikan pesan kesalahan saat gagal

Konfigurasi Node

1. Receive Solver Request (Webhook)

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

2. Validate Image Input (Code)

Node ini memastikan bahwa isi permintaan berisi parameter body yang valid dan menghapus awalan data: atau karakter baris baru yang tidak disengaja:

javascript Copy
const body = $input.first().json.body;

if (!body || !body.body) {
  return [{ json: { error: 'Missing required field: body (base64 encoded image)' } }];
}

let imageBase64 = String(body.body);

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

3. Solve Image Captcha (CapSolver)

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.

4. Image Captcha Error? (IF)

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.

5. Respond to Webhook (Success)

Pengaturan Nilai
Respons dengan JSON
Isi Respons ={{ JSON.stringify($json.data) }}

6. Respond to Webhook Error

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

Pengujian

Kirim permintaan POST ke titik akhir webhook Anda:

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/solver-image-to-text \
  -H "Content-Type: application/json" \
  -d '{
    "body": "iVBORw0KGgoAAAANSUhEUgAA...",
    "module": "common"
  }'

Respons yang diharapkan:

json Copy
{
  "solution": {
    "text": "xK7mQ"
  },
  "status": "ready"
}

Bidang solution.text berisi teks captcha yang dikenali. Ini adalah nilai yang akan Anda masukkan ke bidang input captcha.

Impor Alur Kerja Ini

Salin JSON di bawah ini dan impor ke n8n melalui Menu -> Import from JSON:

Klik untuk memperluas JSON alur kerja
json Copy
{
  "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 2: Otomatisasi Formulir — Pecahkan Captcha Gambar & Kirim

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:

  • Jadwal: berjalan secara otomatis setiap 6 jam
  • Webhook: memicu sesuai permintaan dan mengembalikan hasil sebagai JSON

Cara Kerjanya

Jalur Jadwal:

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

Copy
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

Konfigurasi Node

1. Node Pemicu

Pemicu Jadwal:

Pengaturan Nilai
Interval Setiap 6 jam

Pemicu Webhook:

Pengaturan Nilai
Metode HTTP POST
Jalur image-captcha-form
Respons Response Node

2. Atur Konfigurasi Target

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

3. Ambil Gambar Captcha (Permintaan HTTP)

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.

4. Ubah ke Base64 (Kode)

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

5. Pecahkan Captcha Gambar (Pengenalan CapSolver)

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.

6. Kirim Formulir dengan Solusi (Permintaan HTTP)

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

7. Periksa Hasil Pengiriman (IF)

Pengaturan Nilai
Kondisi {{ $json.statusCode < 400 }} — memeriksa apakah respons HTTP menunjukkan keberhasilan
Cabang True Tandai Berhasil
Cabang False Tandai Gagal

Pengujian

Kirim permintaan POST untuk memicu otomatisasi formulir:

bash Copy
curl -X POST https://your-n8n-instance.com/webhook/image-captcha-form \
  -H "Content-Type: application/json" \
  -d '{}'

Respons yang diharapkan (berhasil):

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

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

Impor Alur Kerja Ini

Salin JSON di bawah ini dan impor ke n8n melalui Menu -> Import from JSON:

Klik untuk memperluas JSON alur kerja
json Copy
{
  "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"
  }
}

Pengenalan vs. Token: Mengapa Gambar-ke-Teks Berbeda

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:

Operasi Token (reCAPTCHA, Turnstile, dll.)

  1. CapSolver membuat tugas di servernya.
  2. Tugas berjalan secara asinkron — node melakukan polling untuk hasilnya.
  3. Pemecahan dapat memakan waktu beberapa detik hingga lebih dari satu menit.
  4. Hasilnya adalah token yang Anda kirim ke situs web target untuk verifikasi.
  5. Anda memerlukan websiteURL dan websiteKey.

Operasi Pengenalan (Gambar-ke-Teks)

  1. CapSolver memproses gambar secara instan dalam satu permintaan.
  2. Tidak ada polling — hasilnya dikembalikan dalam respons yang sama.
  3. Pemecahan hampir instan (biasanya di bawah 1 detik).
  4. Hasilnya adalah teks yang dikenali yang Anda masukkan ke bidang input captcha.
  5. Anda memerlukan gambar base64, bukan URL atau kunci situs.

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.


Apa yang Mungkin Perlu Anda Ubah

Alur kerja ini adalah template. Pada target dunia nyata, Anda harus mengharapkan penyesuaian:

1. Sumber Gambar Captcha

Template otomatisasi formulir mengambil gambar dari satu URL (captchaImageURL). Dalam praktiknya, gambar captcha mungkin:

  • disajikan dari URL dinamis yang berubah dengan setiap permintaan
  • disematkan dalam HTML halaman sebagai tag <img> base64
  • terikat pada cookie sesi (jadi Anda memerlukan cookie untuk mengambil gambar yang benar)
  • disajikan dengan parameter kueri anti-caching

2. Penanganan Sesi dan Cookie

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

  • menangkap cookie sesi dari permintaan gambar
  • meneruskan cookie yang sama saat mengirimkan formulir
  • mungkin mengekstrak token CSRF dari halaman

3. Nama Bidang Captcha

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.

4. Modul Pengenalan

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.

5. Bidang Formulir Tambahan

Template menyertakan bidang placeholder username dan password. Target Anda mungkin memerlukan:

  • nama bidang yang berbeda
  • bidang tersembunyi tambahan
  • token CSRF
  • header perujuk
  • cookie tertentu

Pemecahan Masalah

"Akses ImageToTextTask tidak ditemukan"

Kesalahan ini berarti akun atau paket CapSolver Anda tidak menyertakan akses ImageToText. Periksa dasbor CapSolver Anda untuk memverifikasi paket Anda menyertakan layanan ini.

CapSolver mengembalikan teks yang salah

Pengenalan captcha gambar tidak 100% akurat. Jika Anda mendapatkan hasil yang salah:

  • Coba module yang berbeda — "common" vs. "number" vs. ID modul tertentu
  • Periksa apakah pengodean base64 Anda benar — pengodean yang tidak valid dapat menghasilkan input yang kacau
  • Verifikasi gambar tidak rusak atau kosong
  • Beberapa captcha yang sangat terdistorsi memiliki tingkat keberhasilan yang lebih rendah

"Pengodean base64 tidak valid" atau Respons kosong

Penyebab umum:

  • Awalan data:image/...;base64, tidak dihapus
  • Ada karakter baris baru dalam string base64
  • URL gambar mengembalikan HTML alih-alih gambar (periksa Content-Type)
  • Node Permintaan HTTP mengembalikan halaman kesalahan, bukan gambar

Ketidakcocokan Sesi

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

Pengiriman Formulir mengembalikan 403 atau kesalahan Captcha

Ini biasanya berarti:

  • Jawaban captcha dikirim terlalu lambat (beberapa captcha kedaluwarsa)
  • Cookie sesi hilang
  • Nama bidang captcha salah
  • Token CSRF hilang
  • Bidang tersembunyi tambahan diperlukan

Praktik Terbaik

  1. Kirim teks yang dikenali segera — captcha gambar sering kedaluwarsa dalam 60-120 detik.
  2. Pertahankan cookie sesi antara pengambilan gambar dan pengiriman formulir.
  3. Hapus awalan data: — selalu bersihkan base64 Anda sebelum mengirim ke CapSolver.
  4. Gunakan modul yang tepat — "common" untuk alfanumerik campuran, "number" untuk angka saja.
  5. Validasi base64 di node Kode sebelum mengirim ke CapSolver untuk mendeteksi kesalahan pengodean lebih awal.
  6. Periksa gambar — jika pengenalan gagal, catat string base64 dan dekode secara manual untuk memverifikasi bahwa itu adalah gambar captcha yang valid.
  7. Tangani percobaan ulang — jika teks yang dikenali ditolak, Anda mungkin ingin menambahkan loop percobaan ulang untuk mengambil gambar captcha baru dan mencoba lagi.
  8. Tidak ada proxy yang diperlukan — tidak seperti operasi Token, Gambar-ke-Teks tidak memerlukan proxy. Data gambar dikirim langsung ke server CapSolver.

Siap untuk memulai? Daftar untuk CapSolver dan gunakan kode bonus n8n untuk mendapatkan bonus 8% tambahan pada isi ulang pertama Anda!

Spanduk kode bonus CapSolver

Kesimpulan

Anda telah belajar cara membangun API pemecah Gambar-ke-Teks dan alur kerja otomatisasi formulir menggunakan n8n dan CapSolver.

Ringkasan:

  • Bagaimana Gambar-ke-Teks berbeda dari operasi Token — Pengenalan instan, tidak ada polling, tidak ada proxy yang diperlukan.
  • Persyaratan pengodean Base64 — hanya string bersih, tidak ada awalan data:, tidak ada karakter baris baru.
  • Titik akhir API pemecah yang menerima gambar base64 dan mengembalikan teks yang dikenali.
  • Alur kerja otomatisasi formulir yang mengambil gambar captcha, mengubahnya, memecahkannya, dan mengirimkan formulir.
  • Cara mengubah gambar menjadi base64 di n8n menggunakan node Kode.
  • Praktik terbaik untuk penanganan sesi, pemilihan modul, dan manajemen kesalahan.

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.


Pertanyaan yang Sering Diajukan

Apa itu ImageToTextTask?

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.

Berapa biaya untuk memecahkan captcha gambar?

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.

Berapa lama waktu yang dibutuhkan untuk memecahkan captcha gambar?

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.

Apakah saya memerlukan proxy untuk Gambar-ke-Teks?

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.

Format gambar apa yang didukung?

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.

Apa yang dilakukan parameter 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.

Apakah CapSolver mendukung pengenalan peka huruf besar/kecil?

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.

Bisakah saya menggunakan alur kerja ini dengan n8n Cloud?

Ya. Alur kerja ini berfungsi dengan n8n self-hosted dan n8n Cloud. Node CapSolver sudah tersedia sebagai integrasi resmi — cukup tambahkan kredensial API Anda.

Bagaimana cara menangani captcha yang terikat sesi?

Banyak situs web mengikat gambar captcha ke sesi server. Untuk menangani ini:

  1. Lakukan permintaan awal ke halaman captcha untuk mendapatkan cookie sesi.
  2. Gunakan cookie tersebut saat mengambil gambar captcha.
  3. Teruskan cookie yang sama saat mengirimkan formulir dengan teks yang dikenali.

Di n8n, Anda dapat mengekstrak cookie dari header respons Permintaan HTTP dan meneruskannya ke permintaan berikutnya.

Bagaimana jika CapSolver mengembalikan teks yang salah?

Pengenalan captcha gambar tidak 100% akurat — terutama untuk gambar yang sangat terdistorsi atau berisik. Jika Anda mendapatkan hasil yang salah:

  • Coba modul yang berbeda ("common", "number", atau ID modul tertentu).
  • Verifikasi pengodean base64 Anda benar.
  • Tambahkan loop percobaan ulang untuk mengambil gambar captcha baru saat gagal.
  • Periksa dokumentasi CapSolver untuk rekomendasi modul untuk jenis captcha tertentu.

CapSolver mengembalikan token tetapi situs web masih menolaknya — mengapa?

Untuk Gambar-ke-Teks, CapSolver mengembalikan teks yang dikenali, bukan token. Jika pengiriman formulir ditolak:

  • Verifikasi jawaban captcha benar dengan memeriksa nilai solution.text.
  • Periksa penanganan sesi — captcha mungkin telah kedaluwarsa atau cookie sesi mungkin hilang.
  • Verifikasi nama bidang formulir — jawaban captcha mungkin perlu masuk ke bidang yang berbeda.
  • Cari bidang wajib tambahan — token CSRF, input tersembunyi, atau stempel waktu.
  • Periksa waktu — beberapa captcha kedaluwarsa dengan cepat, jadi kirim jawaban segera setelah pengenalan.

Lihat Lebih Banyak

n8nMar 09, 2026

Cara Menyelesaikan reCAPTCHA v2/v3 Menggunakan CapSolver dan n8n

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.

Emma Foster
Emma Foster
n8nMar 09, 2026

Cara Mengatasi Cloudflare Turnstile Menggunakan CapSolver dan n8n

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.

Daftar Isi

Emma Foster
Emma Foster
n8nMar 17, 2026

Cara Menggunakan CapSolver di n8n: Panduan Lengkap untuk Menyelesaikan CAPTCHA dalam Alur Kerja Anda

Pelajari cara mengintegrasikan CapSolver dengan n8n untuk menyelesaikan CAPTCHAs dan membangun alur kerja otomasi yang andal dengan mudah.

Emma Foster
Emma Foster
n8nMar 12, 2026

Cara Menyelesaikan GeeTest V3 di n8n dengan CapSolver: Panduan Integrasi Lengkap

Pelajari cara mengintegrasikan CapSolver dengan n8n untuk menyelesaikan GeeTest V3 dan membangun alur kerja otomatisasi yang andal.

Ethan Collins
Ethan Collins
Blog
n8n