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
Blog//Cara Menyelesaikan reCAPTCHA v2/v3 Menggunakan CapSolver dan n8n
Mar09, 2026

Cara Menyelesaikan reCAPTCHA v2/v3 Menggunakan CapSolver dan n8n

Emma Foster

Emma Foster

Machine Learning Engineer

Jika Anda pernah mencoba mengotomatisasi interaksi web, hampir pasti Anda pernah menemui reCAPTCHA — sistem tantangan Google yang memblokir bot dari mengakses situs web. Baik Anda sedang membangun scraper, menguji aplikasi web, atau mengotomatisasi tugas berulang, reCAPTCHA dapat menghentikan seluruh alur kerja Anda.

Bagaimana jika Anda bisa menyelesaikan reCAPTCHA secara otomatis di dalam alur kerja n8n Anda — apakah Anda sedang membangun solver API yang dapat digunakan ulang, meng-scrape situs yang dilindungi captcha, atau mengotomatisasi formulir login — semua tanpa menulis satu baris kode tradisional pun?

Dalam panduan ini, Anda akan belajar cara menggabungkan n8n (alat otomasi alur kerja visual) dengan CapSolver (layanan pemecahan captcha bertenaga AI) untuk menyelesaikan tantangan reCAPTCHA v2, v2 Invisible, dan v3 sesuai permintaan — baik sebagai endpoint API mandiri atau sebagai langkah di dalam alur kerja otomatisasi apa pun.

Apa yang akan Anda buat:

Solver API — endpoint yang dapat digunakan ulang yang dapat dipanggil oleh alat lain Anda:

  • API penyelesai reCAPTCHA (berfungsi untuk v2, v2 Invisible, dan v3 — cukup ubah Operation di node CapSolver)

Alur kerja penggunaan langsung — CapSolver tertanam sebagai langkah di dalam otomatisasi yang lebih besar:

  • Scraper harga & produk yang menyelesaikan reCAPTCHA, mengambil halaman yang dilindungi, dan memberi peringatan saat harga berubah
  • Otomatisasi login akun yang menyelesaikan reCAPTCHA sebelum mengirimkan kredensial

Apa itu reCAPTCHA?

reCAPTCHA adalah sistem deteksi bot Google yang digunakan oleh jutaan situs web. Ada tiga versi utama yang akan Anda temui:

reCAPTCHA v2 — Kotak centang ("Saya bukan robot") + tantangan gambar
reCAPTCHA v2 Invisible — Tidak ada kotak centang yang terlihat, aktif secara otomatis di latar belakang
reCAPTCHA v3 — Sepenuhnya tidak terlihat, memberikan skor (0.0–1.0) berdasarkan perilaku

Memahami versi mana yang digunakan sebuah situs sangat penting — masing-masing memerlukan parameter yang sedikit berbeda saat menyelesaikan.


Prasyarat

Sebelum memulai, pastikan Anda memiliki hal-hal berikut:

  1. Instansi n8n — Baik self-hosted atau n8n Cloud
  2. Akun CapSolver — Daftar di sini dan dapatkan kunci API Anda
  3. Node CapSolver untuk n8n — Sudah tersedia sebagai node resmi di n8n (tidak perlu instalasi)
  4. Ekstensi browser CapSolver (opsional tapi disarankan) — Untuk mengidentifikasi parameter captcha di situs target

Penting: Pastikan saldo akun CapSolver Anda cukup. Tugas penyelesaian reCAPTCHA mengonsumsi kredit berdasarkan jenis captcha.


Menyiapkan CapSolver di n8n

CapSolver tersedia sebagai integrasi resmi di n8n — tidak perlu instalasi 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 instansi n8n Anda dan navigasikan ke Settings → Credentials. Anda akan melihat semua kredensial yang sudah dikonfigurasi di sini.

Halaman kredensial n8n yang menampilkan akun CapSolver

Langkah 2: Buat Kredensial CapSolver

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

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

Konfigurasi kredensial CapSolver dengan tes koneksi berhasil

Penting: Setiap node CapSolver dalam alur kerja Anda akan merujuk ke kredensial ini. Anda hanya perlu membuatnya sekali — semua alur kerja solver Anda akan menggunakan kredensial yang sama.

Sekarang Anda siap membangun alur kerja penyelesai reCAPTCHA Anda!


Cara Mengidentifikasi Parameter reCAPTCHA

Sebelum Anda dapat menyelesaikan reCAPTCHA, Anda perlu mengetahui parameternya — khususnya websiteURL dan websiteKey (juga disebut site key). Cara termudah untuk menemukannya adalah menggunakan Ekstensi Browser CapSolver.

Langkah 1: Pasang Ekstensi CapSolver

Unduh dan pasang ekstensi CapSolver dari Chrome Web Store atau Firefox Add-ons.

Langkah 2: Buka Detektor CAPTCHA

  1. Buka situs target
  2. Tekan F12 untuk membuka Developer Tools
  3. Temukan tab "CapSolver Captcha Detector" di DevTools
Tab CapSolver Captcha Detector di DevTools

Langkah 3: Memicu CAPTCHA

Dengan panel detektor terbuka, interaksikan halaman untuk memicu reCAPTCHA. Ekstensi akan secara otomatis mendeteksi dan menampilkan semua parameter terkait:

  • Website URL — URL halaman yang memuat CAPTCHA
  • Website Key (Site Key) — Kunci publik pengenal captcha
  • pageAction — Aksi spesifik yang diverifikasi (v3)
  • isInvisible — Apakah ini reCAPTCHA yang tidak terlihat
  • isEnterprise — Apakah menggunakan reCAPTCHA Enterprise
  • apiDomain — Endpoint API yang digunakan (misalnya, recaptcha.net)
Parameter reCAPTCHA yang terdeteksi di ekstensi CapSolver

Tips: Ekstensi menghasilkan output JSON yang menunjukkan dengan tepat bagaimana memformat parameter ini untuk permintaan penyelesaian Anda. Ini menghemat waktu Anda dari harus memeriksa sumber halaman secara manual.

Untuk panduan detail tentang mengidentifikasi parameter captcha, lihat dokumentasi resmi CapSolver.


Alur Kerja: Solver API reCAPTCHA

Alur kerja ini membuat endpoint POST yang menerima parameter reCAPTCHA dan mengembalikan token yang sudah diselesaikan. Struktur 4-node yang sama berfungsi untuk semua jenis reCAPTCHA — cukup ubah Operation di node CapSolver.

Alur kerja penyelesai reCAPTCHA v2 di n8n

Cara Kerjanya

  1. Webhook — Menerima permintaan POST dengan parameter captcha
  2. CapSolver — Menyelesaikan tantangan menggunakan Operation yang dikonfigurasi
  3. CapSolver Error? — Node IF yang bercabang berdasarkan apakah penyelesaian gagal ($json.error tidak kosong)
  4. Respond to Webhook — Mengembalikan solusi jika berhasil, atau {"error": "..."} jika gagal

Memilih Jenis reCAPTCHA Anda

Jenis Operation yang dipilih Parameter tambahan
v2 Standar reCAPTCHA v2 —
v2 Invisible reCAPTCHA v2 Atur Is Invisible ke true di node
v3 reCAPTCHA v3 Tambahkan pageAction — harus sesuai dengan aksi yang dikonfigurasi situs target (misalnya, login, submit)

Alur kerja di bawah menggunakan reCAPTCHA v2 sebagai default. Buka node CapSolver dan ubah dropdown Operation untuk mengganti jenis. Tidak perlu perubahan struktur lain.

Konfigurasi Node

1. Node Webhook

Pengaturan Nilai
HTTP Method POST
Path solver-recaptcha
Respond Response Node

Ini membuat endpoint di: https://your-n8n-instance.com/webhook/solver-recaptcha

2. Node CapSolver

Parameter Nilai Deskripsi
Operation reCAPTCHA v2 Ubah ini ke reCAPTCHA v3 untuk v3; untuk v2 Invisible, tetap reCAPTCHA v2 dan setel Is Invisible ke true
Website URL ={{ $json.body.websiteURL }} URL halaman dengan captcha
Website Key ={{ $json.body.websiteKey }} Site key reCAPTCHA
Page Action ={{ $json.body.pageAction || '' }} Diperlukan untuk v3 — harus sesuai dengan aksi yang dikonfigurasi situs
Is Invisible ={{ $json.body.isInvisible || false }} Setel ke true untuk v2 Invisible
API Domain ={{ $json.body.apiDomain || '' }} Opsional — domain API kustom (misalnya, recaptcha.net)
Enterprise Payload ={{ $json.body.enterprisePayload || '' }} Opsional — payload tambahan untuk reCAPTCHA Enterprise
Is Session ={{ $json.body.isSession || false }} Opsional — aktifkan penyelesaian berbasis sesi
Task Type ={{ $json.body.taskType || 'ReCaptchaV2TaskProxyLess' }} Tipe tugas CapSolver — lihat referensi di bawah. Default ReCaptchaV2TaskProxyLess
Proxy ={{ $json.body.proxy || '' }} Hanya digunakan jika tipe tugas yang dipilih membutuhkan proxy (tipe non-ProxyLess). Kosongkan atau hilangkan untuk tipe tugas ProxyLess. Format: ip:port:user:pass

Jangan lupa pilih kredensial CapSolver Anda di node.

Referensi Tipe Tugas reCAPTCHA:

Tipe Tugas Proxy Diperlukan Catatan
ReCaptchaV2TaskProxyLess Tidak Default v2
ReCaptchaV2Task Ya v2 dengan proxy
ReCaptchaV2EnterpriseTaskProxyLess Tidak Enterprise v2, tanpa proxy
ReCaptchaV2EnterpriseTask Ya Enterprise v2, membutuhkan proxy
ReCaptchaV3TaskProxyLess Tidak Default v3
ReCaptchaV3Task Ya v3 dengan proxy
ReCaptchaV3EnterpriseTaskProxyLess Tidak Enterprise v3, tanpa proxy
ReCaptchaV3EnterpriseTask Ya Enterprise v3, membutuhkan proxy

Proxy: Hanya berlaku untuk tipe tugas non-ProxyLess (misalnya, ReCaptchaV2Task, ReCaptchaV3EnterpriseTask). Saat menggunakan tipe tugas ProxyLess, field proxy diabaikan — CapSolver menggunakan infrastrukturnya sendiri. Saat menggunakan tipe non-ProxyLess, Anda harus menyediakan proxy.

3. Node CapSolver Error? (IF)

Pengaturan Nilai
Kondisi ={{ $json.error }} tidak kosong
Cabang benar Mengarah ke node Error Respond to Webhook
Cabang salah Mengarah ke node Success Respond to Webhook

Ini membuat jalur error eksplisit di canvas. Node CapSolver melanjutkan saat error (onError: continueRegularOutput), sehingga kegagalan sampai di sini sebagai { "error": "..." } daripada menghentikan alur kerja. Anda dapat menambahkan node tambahan di cabang benar (logging, peringatan, retry) tanpa mengubah jalur sukses.

4. Node Respond to Webhook

Cabang sukses (output false dari CapSolver Error?):

Pengaturan Nilai
Respond With JSON
Response Body ={{ JSON.stringify($json.data) }}

Uji Coba

Kirim permintaan POST ke endpoint webhook Anda:bash curl -X POST https://your-n8n-instance.com/webhook/solver-recaptcha \ -H "Content-Type: application/json" \ -d '{ "websiteURL": "https://example.com/login", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "taskType": "ReCaptchaV2TaskProxyLess" }' > Jenis tugas harus sesuai dengan Operasi node. Setiap workflow yang diterapkan dikonfigurasi untuk versi reCAPTCHA tertentu melalui bidang Operation pada node CapSolver (reCAPTCHA v2 atau reCAPTCHA v3). Hanya jenis tugas untuk versi tersebut yang valid — mengirim jenis tugas v3 ke workflow v2 (atau sebaliknya) tidak akan berhasil. Catatan: v2 Invisible menggunakan operasi reCAPTCHA v2 yang sama seperti v2 standar — perbedaannya adalah parameter isInvisible, bukan operasinya.

Untuk reCAPTCHA v3, juga tambahkan "pageAction": "login" (atau aksi apa pun yang digunakan situs) ke dalam body permintaan, dan gunakan jenis tugas v3 (misalnya, "taskType": "ReCaptchaV3TaskProxyLess").

Respons yang Diharapkan:```json
{
"taskId": "abc123...",
"solution": {
"gRecaptchaResponse": "03AGdBq24PBCb..."
},
"status": "ready"
}

### Impor Alur Kerja Ini Copy
Salin JSON di bawah ini dan impor ke n8n melalui **Menu** → **Import from JSON**. Kemudian ubah **Operation** di node CapSolver ke tipe reCAPTCHA yang Anda inginkan.

<details>
<summary>Klik untuk memperluas JSON alur kerja (reCAPTCHA v2 — ubah Operation untuk tipe lain)</summary>```json
{
  "nodes": [
    {
      "parameters": {
        "content": "## reCAPTCHA Solver API\n\n### How it works\n\n1. A webhook receives the reCAPTCHA solver request.\n2. The request is passed to the solver node to resolve the reCAPTCHA.\n3. The system checks if the solver encountered an error.\n4. If an error occurred, a response is sent indicating the failure.\n5. If successful, a response is sent with the result.\n\n### Setup steps\n\n- [ ] Configure webhook endpoint to receive solver requests.\n- [ ] Set up CapSolver credentials if necessary.\n\n### Customization\n\nAdjust the solver node settings depending on reCAPTCHA type or difficulty.",
        "width": 480,
        "height": 592
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -800,
        -240
      ],
      "id": "497d295f-4668-48ff-8eaa-97773cfd1c89",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "## Receive request and solve\n\nHandles incoming requests and solves reCAPTCHA.",
        "width": 496,
        "height": 272,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -240,
        -112
      ],
      "id": "cb4b7a54-ae67-458e-bbef-18e3f6d242bb",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "## Evaluate and respond\n\nChecks for errors and sends appropriate webhook responses.",
        "width": 560,
        "height": 432,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        464,
        -240
      ],
      "id": "fc9430f0-b899-45ce-b5cf-de9a1b10fbe2",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "solver-recaptcha",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "rc-api-001",
      "name": "Receive Solver Request",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        -192,
        0
      ],
      "webhookId": "solver-recaptcha"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.body.websiteURL }}",
        "websiteKey": "={{ $json.body.websiteKey }}",
        "optional": {}
      },
      "id": "rc-api-002",
      "name": "Solve reCAPTCHA",
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        112,
        0
      ],
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      },
      "continueOnFail": true
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "version": 2,
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "1",
              "operator": {
                "type": "string",
                "operation": "isNotEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.error }}",
              "rightValue": ""
            }
          ]
        },
        "options": {}
      },
      "id": "rc-api-003",
      "name": "CapSolver Error?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        512,
        -32
      ]
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify({ error: $json.error }) }}",
        "options": {}
      },
      "id": "rc-api-004",
      "name": "Respond to Webhook (Error)",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        880,
        -128
      ]
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json.data) }}",
        "options": {}
      },
      "id": "rc-api-005",
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        880,
        32
      ]
    }
  ],
  "connections": {
    "Receive Solver Request": {
      "main": [
        [
          {
            "node": "Solve reCAPTCHA",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve reCAPTCHA": {
      "main": [
        [
          {
            "node": "CapSolver Error?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CapSolver Error?": {
      "main": [
        [
          {
            "node": "Respond to Webhook (Error)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
  }
}
```</details>
---

## Alur Kerja: Mengirimkan Token ke Situs Web

Sejauh ini, alur kerja API di atas menunjukkan cara **mendapatkan** token captcha yang sudah diselesaikan. Tapi apa yang sebenarnya **Anda lakukan** dengan token tersebut?

Dalam otomatisasi dunia nyata, menyelesaikan captcha hanyalah setengah dari pekerjaan. Anda perlu **mengirimkan token** ke situs web target — persis seperti yang dilakukan browser — untuk membuka data atau aksi di balik captcha tersebut.

Berikut pola umumnya:

1. **Selesaikan captcha** → Dapatkan token `gRecaptchaResponse` dari CapSolver
2. **Kirim token** → Kirim ke situs web target melalui Permintaan HTTP (biasanya sebagai field form `g-recaptcha-response` atau parameter URL)
3. **Verifikasi respons** → Periksa apakah situs web menerima token dan mengembalikan data yang diharapkan
4. **Proses hasil** → Ambil data yang Anda butuhkan

### Contoh: Menyelesaikan & Mengirim reCAPTCHA v2

**Contoh:** [example.com](https://example.com)

![alur kerja scraping reCAPTCHA v2 di n8n](https://assets.capsolver.com/prod/posts/how-to-solve-recaptcha-n8n/d5PwlG9NjvBb-d2b5ca33bd970f64a6301fa75ae2eb22.png)

#### Alur Kerja Flow```
Manual Trigger → CapSolver reCAPTCHA v2 → HTTP POST Request → IF (check success) → Valid / Invalid
```#### Cara Kerjanya

1. **Pemicu Manual** — Memulai alur kerja secara manual (klik "Execute workflow"). Anda dapat menggantinya dengan pemicu apa pun — Webhook, Jadwal, Event Aplikasi, dll.
2. **CapSolver reCAPTCHA v2** — Memecahkan captcha untuk halaman demo:
   - URL Situs Web: `https://example.com`
   - Kunci Situs Web: `YOUR_SITE_KEY`
3. **Permintaan HTTP POST** — Mengirimkan token yang sudah dipecahkan ke URL yang sama sebagai form POST:
   - Token dikirim dalam field form `g-recaptcha-response`
   - Ini persis seperti yang dilakukan browser saat Anda mengklik "Submit" setelah memecahkan captcha
4. **Node IF** — Memeriksa apakah HTML respons mengandung `"recaptcha-success"`, yang berarti captcha diterima
5. **Valid / Tidak Valid** — Node IF mengarahkan ke cabang **Valid** saat berhasil (di mana Anda mengekstrak data yang dibutuhkan, misalnya dengan **node HTML** untuk daftar produk, hasil form, dll.) atau cabang **Tidak Valid** saat gagal (di mana Anda menangani kesalahan)

> **Konsep utama:** Setiap situs web menangani pengiriman token dengan cara yang berbeda. Dalam demo ini, token dimasukkan dalam field form `g-recaptcha-response` melalui POST — tetapi situs lain mungkin mengharapkannya sebagai parameter URL, dalam body JSON, atau melalui endpoint yang benar-benar berbeda. Selalu periksa pengiriman form situs yang sebenarnya (menggunakan tab Network di DevTools) untuk melihat dengan tepat bagaimana token harus dikirim.

<details>
<summary>Klik untuk memperluas JSON alur kerja</summary>```json
{
  "nodes": [
    {
      "parameters": {
        "content": "## reCAPTCHA v2 \u2014 All Triggers\n\n### How it works\n\n1. Receives solver requests through a webhook.\n2. Processes these requests using CapSolver and returns the results.\n3. Regularly triggers checks every hour using a schedule.\n4. Executes the scheduled process and checks the status of tasks.\n5. Allows manual testing of CapSolver through a manual trigger.\n\n### Setup steps\n\n- [ ] Set up webhook credentials for 'Receive Solver Request'.\n- [ ] Configure CapSolver with necessary keys for all CapSolver nodes.\n- [ ] Assign necessary permissions for HTTP request to reCAPTCHA endpoint.\n- [ ] Review and adjust the schedule in 'Schedule Trigger'.\n- [ ] Test manual execution with 'Manual Trigger'.\n",
        "width": 480,
        "height": 896
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -816,
        -128
      ],
      "id": "68e8c344-ce45-4e9f-859b-ca005db7c73e",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "## Receive and handle requests\n\nStarts with receiving a solver request via webhook, processes it, and returns the solver result.",
        "width": 800,
        "height": 304,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -256,
        -128
      ],
      "id": "c26741c7-e0e6-4a4e-9fbf-2a623df014c8",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "## Scheduled recurrent process\n\nInitiates the process on an hourly schedule, sets target parameters, and sends them to CapSolver.",
        "width": 800,
        "height": 304,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -256,
        224
      ],
      "id": "4b879cbf-e269-4260-9596-740b95df628a",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "## Process and validate token\n\nPosts to the reCAPTCHA validation endpoint and checks results, branching into pass or fail paths.",
        "width": 736,
        "height": 464,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        656,
        96
      ],
      "id": "7c860b53-f4a7-4d0b-8537-5253eec5a043",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "content": "## Manual testing process\n\nAllows manual trigger testing with CapSolver and formats the result for review.",
        "width": 800,
        "height": 272,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -256,
        576
      ],
      "id": "8936a2df-c5b5-4c63-a0d5-afd190553a57",
      "name": "Sticky Note4"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "solve-recaptcha-v2",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -208,
        0
      ],
      "id": "11111111-1111-1111-1111-111111111101",
      "name": "Receive Solver Request",
      "webhookId": "a1b2c3d4-e5f6-7890-abcd-ef1234567801",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "type": "={{ $json.body.taskType || 'ReCaptchaV2TaskProxyLess' }}",
        "proxy": "={{ $json.body.proxy || '' }}",
        "websiteURL": "={{ $json.body.websiteURL }}",
        "websiteKey": "={{ $json.body.websiteKey }}",
        "optional": {
          "pageAction": "={{ $json.body.pageAction || '' }}",
          "isInvisible": "={{ $json.body.isInvisible || false }}",
          "apiDomain": "={{ $json.body.apiDomain || '' }}",
          "enterprisePayload": "={{ $json.body.enterprisePayload || '' }}",
          "isSession": "={{ $json.body.isSession || false }}"
        }
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        112,
        0
      ],
      "id": "11111111-1111-1111-1111-111111111102",
      "name": "CapSolver [Webhook]",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json.data) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        400,
        0
      ],
      "id": "11111111-1111-1111-1111-111111111103",
      "name": "Return Solver Result"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 1
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -208,
        352
      ],
      "id": "11111111-1111-1111-1111-111111111104",
      "name": "Schedule Trigger (Every 1h)"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "sa-001",
              "name": "websiteURL",
              "value": "https://www.google.com/recaptcha/api2/demo",
              "type": "string"
            },
            {
              "id": "sa-002",
              "name": "websiteKey",
              "value": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        112,
        352
      ],
      "id": "11111111-1111-1111-1111-111111111105",
      "name": "Set Target Params"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.websiteURL }}",
        "websiteKey": "={{ $json.websiteKey }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        400,
        352
      ],
      "id": "11111111-1111-1111-1111-111111111106",
      "name": "CapSolver [Schedule]",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://www.google.com/recaptcha/api2/demo",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "g-recaptcha-response",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        704,
        352
      ],
      "id": "11111111-1111-1111-1111-111111111107",
      "name": "Submit Token"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "if-001",
              "leftValue": "={{ $json.data }}",
              "rightValue": "recaptcha-success",
              "operator": {
                "type": "string",
                "operation": "contains"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        1008,
        352
      ],
      "id": "11111111-1111-1111-1111-111111111108",
      "name": "Check Result"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "sp-001",
              "name": "status",
              "value": "passed",
              "type": "string"
            },
            {
              "id": "sp-002",
              "name": "message",
              "value": "reCAPTCHA v2 monitor passed successfully",
              "type": "string"
            },
            {
              "id": "sp-003",
              "name": "timestamp",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1248,
        224
      ],
      "id": "11111111-1111-1111-1111-111111111109",
      "name": "Monitor Passed"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "sf-001",
              "name": "status",
              "value": "failed",
              "type": "string"
            },
            {
              "id": "sf-002",
              "name": "message",
              "value": "reCAPTCHA v2 monitor FAILED \u2014 token rejected",
              "type": "string"
            },
            {
              "id": "sf-003",
              "name": "timestamp",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1248,
        384
      ],
      "id": "11111111-1111-1111-1111-111111111110",
      "name": "Monitor Failed"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -208,
        688
      ],
      "id": "11111111-1111-1111-1111-111111111111",
      "name": "Manual Trigger (Test)"
    },
    {
      "parameters": {
        "websiteURL": "https://www.google.com/recaptcha/api2/demo",
        "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        112,
        688
      ],
      "id": "11111111-1111-1111-1111-111111111112",
      "name": "CapSolver [Manual]",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "mr-001",
              "name": "token",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}",
              "type": "string"
            },
            {
              "id": "mr-002",
              "name": "taskId",
              "value": "={{ $json.data.taskId }}",
              "type": "string"
            },
            {
              "id": "mr-003",
              "name": "status",
              "value": "solved",
              "type": "string"
            },
            {
              "id": "mr-004",
              "name": "solvedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        400,
        688
      ],
      "id": "11111111-1111-1111-1111-111111111113",
      "name": "Format Result"
    }
  ],
  "connections": {
    "Receive Solver Request": {
      "main": [
        [
          {
            "node": "CapSolver [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CapSolver [Webhook]": {
      "main": [
        [
          {
            "node": "Return Solver Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger (Every 1h)": {
      "main": [
        [
          {
            "node": "Set Target Params",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Target Params": {
      "main": [
        [
          {
            "node": "CapSolver [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CapSolver [Schedule]": {
      "main": [
        [
          {
            "node": "Submit Token",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Submit Token": {
      "main": [
        [
          {
            "node": "Check Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Result": {
      "main": [
        [
          {
            "node": "Monitor Passed",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Monitor Failed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Trigger (Test)": {
      "main": [
        [
          {
            "node": "CapSolver [Manual]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CapSolver [Manual]": {
      "main": [
        [
          {
            "node": "Format Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
  }
}
```</details>

> **Menyesuaikan untuk jenis reCAPTCHA lain:** Pola yang sama ini juga berlaku untuk **v2 Invisible** dan **v3**. Untuk v2 Invisible, atur `isInvisible: true` di node CapSolver. Untuk v3, ubah Operasi menjadi `reCAPTCHA v3` dan tambahkan parameter `pageAction`. Langkah pengiriman HTTP Request akan berbeda tiap situs — selalu periksa pengiriman formulir sebenarnya di DevTools.

---

## Alur Kerja: Contoh Kasus Penggunaan

API solver dan contoh scraping di atas menunjukkan pola inti: menyelesaikan captcha, mengirim token, memproses hasil. Alur kerja berikut memperluas pola ini ke **kasus penggunaan siap produksi** — masing-masing dengan pemicu ganda (jadwal + webhook), pelacakan status persisten, dan output terstruktur.


| Alur Kerja | Tujuan |
|---|---|
| `reCAPTCHA Scraping — Harga & Detail Produk — CapSolver + Jadwal + Webhook` | Mengambil harga dan nama produk setiap 6 jam, membandingkan dengan nilai sebelumnya yang disimpan di `staticData`, memberi peringatan jika ada perubahan |
| `reCAPTCHA Login Akun — CapSolver + Jadwal + Webhook` | Masuk ke akun Anda sendiri di situs yang dilindungi captcha dengan menyelesaikan captcha terlebih dahulu, lalu mengirimkan kredensial dengan token |

### Contoh 1: Scraping — Harga & Detail Produk

Alur kerja ini mengambil halaman produk setiap 6 jam (jadwal) atau sesuai permintaan (webhook), mengekstrak harga menggunakan node HTML, dan membandingkannya dengan nilai yang disimpan sebelumnya.

**Jalur jadwal:**```
Every 6 Hours → Solve reCAPTCHA v3 → Fetch Product Page → Extract Data
  → Compare Data → Data Changed? → Build Alert / No Change
```> **Penanganan kesalahan:** Jika CapSolver gagal, eksekusi akan berhenti dan ditandai sebagai gagal di n8n. Periksa **Executions** untuk melihat kesalahan, atau konfigurasikan [Error Workflow](https://docs.n8n.io/flow-logic/error-handling/) n8n untuk mendapatkan pemberitahuan secara otomatis.

Perilaku utama:
- Menggunakan **reCAPTCHA v3** dengan parameter `pageAction` (dapat dikonfigurasi)
- Token dikirim sebagai header `x-recaptcha-token` (sesuaikan dengan format yang diharapkan situs Anda)
- **Node HTML** mengekstrak harga dan nama produk melalui CSS selector (`.product-price`, `h1`)
- `$workflow.staticData.lastPrice` menyimpan harga sebelumnya antar eksekusi
- Perbandingan harga mendeteksi baik **penurunan** (tingkat keparahan: `deal`) maupun **kenaikan** (tingkat keparahan: `info`)
- Jenis tugas adalah `ReCaptchaV3TaskProxyLess` (hardcoded) — edit node Solve reCAPTCHA v3 secara langsung untuk mengubah jenis tugas atau proxy

<details>
<summary>Klik untuk memperluas JSON workflow lengkap (17 node)</summary>```json
{
  "nodes": [
    {
      "parameters": {
        "content": "## reCAPTCHA Scraping \u2014 Price & Product Monitor\n\n### How it works\n\n1. Triggers the workflow every 6 hours or via webhook.\n2. Configures target website URL and key for scraping.\n3. Solves reCAPTCHA to access the webpage.\n4. Fetches and extracts product data from the webpage.\n5. Compares current data with previous data to check for changes.\n6. Builds alert or updates status based on data changes.\n\n### Setup steps\n\n- [ ] Configure the 'Every 6 Hours' trigger to set the appropriate time schedule.\n- [ ] Set up the target website URL and key parameters in the 'Set Target Config [Schedule]' node.\n- [ ] Ensure the 'Solve reCAPTCHA' and 'Solve reCAPTCHA [Webhook]' nodes are configured with the correct CAPTCHA services.\n- [ ] Set up webhook endpoint in the 'Webhook Trigger' node.\n- [ ] Configure the 'Respond to Webhook' node for handling webhook responses.\n\n### Customization\n\nAdjust the 'Compare Data' and 'Compare Data [Webhook]' code to fit specific data comparison logic or data formats.",
        "height": 896,
        "width": 480
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1312,
        -352
      ],
      "id": "871c5a60-20b4-4cc0-a357-d5cecb8a322a",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "## Scheduled trigger setup\n\nTriggers every 6 hours and sets the target config for scraping.",
        "height": 304,
        "width": 496,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -752,
        -128
      ],
      "id": "43acb039-cfcd-47c3-892e-e13da011b721",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "## Scheduled CAPTCHA solving and page fetch\n\nSolves the CAPTCHA and fetches the product page based on schedule.",
        "height": 304,
        "width": 496,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -144,
        -128
      ],
      "id": "68fc53a6-181e-4ca8-bf7d-f3f8e9b12f9d",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "## Scheduled data extraction and comparison\n\nExtracts and compares data from the fetched page.",
        "height": 272,
        "width": 784,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        464,
        -112
      ],
      "id": "155fc92b-721a-40bf-80e6-6dd2082b126a",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "content": "## Scheduled alert or status update\n\nHandles response based on data comparison for scheduled runs.",
        "height": 560,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1296,
        -352
      ],
      "id": "ee2c8c8e-d21d-42aa-b261-49a6fffb3d11",
      "name": "Sticky Note4"
    },
    {
      "parameters": {
        "content": "## Webhook trigger setup\n\nInitiates the workflow via a webhook request.",
        "height": 368,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -752,
        304
      ],
      "id": "6957473e-81a0-4afd-a0ea-e6f61c3be715",
      "name": "Sticky Note5"
    },
    {
      "parameters": {
        "content": "## Webhook CAPTCHA solving and page fetch\n\nSolves the CAPTCHA and fetches the product page via webhook.",
        "height": 304,
        "width": 496,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -144,
        304
      ],
      "id": "48990176-a5b5-48db-ac09-bcc207318f0a",
      "name": "Sticky Note6"
    },
    {
      "parameters": {
        "content": "## Webhook data extraction and comparison\n\nProcesses data fetched from the page and checks for changes via webhook.",
        "height": 272,
        "width": 784,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        464,
        320
      ],
      "id": "844166d1-75f7-4192-8bfb-3a1381fb6235",
      "name": "Sticky Note7"
    },
    {
      "parameters": {
        "content": "## Webhook alert or status update\n\nResponds to webhook trigger with alert or status update.",
        "height": 544,
        "width": 384,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1328,
        240
      ],
      "id": "c1926a60-dfb3-4520-a530-82aa40c6341c",
      "name": "Sticky Note8"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 6
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -704,
        0
      ],
      "id": "rc-s-901",
      "name": "Every 6 Hours"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "cfg-001",
              "name": "websiteURL",
              "value": "https://YOUR-TARGET-SITE.com/product-page",
              "type": "string"
            },
            {
              "id": "cfg-002",
              "name": "websiteKey",
              "value": "YOUR_SITE_KEY_HERE",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -400,
        0
      ],
      "id": "rc-s-900",
      "name": "Set Target Config [Schedule]"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.websiteURL }}",
        "websiteKey": "={{ $json.websiteKey }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        0
      ],
      "id": "rc-s-902",
      "name": "Solve reCAPTCHA",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Set Target Config [Schedule]').first().json.websiteURL }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "g-recaptcha-response",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {}
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        0
      ],
      "id": "rc-s-903",
      "name": "Fetch Product Page"
    },
    {
      "parameters": {
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "price",
              "cssSelector": ".product-price, [data-price], .price"
            },
            {
              "key": "productName",
              "cssSelector": "h1, .product-title"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.html",
      "typeVersion": 1.2,
      "position": [
        512,
        0
      ],
      "id": "rc-s-904",
      "name": "Extract Data"
    },
    {
      "parameters": {
        "jsCode": "const staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || 'Product';\nconst parsePrice = (str) => { if (!str) return null; const match = str.match(/[\\d]+\\.?\\d*/); return match ? parseFloat(match[0].replace(',', '')) : null; };\nconst currentNum = parsePrice(currentPrice);\nconst previousNum = parsePrice(previousPrice);\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\nconst changed = previousNum !== null && currentNum !== null && currentNum !== previousNum;\nconst direction = changed ? (currentNum < previousNum ? 'dropped' : 'increased') : 'unchanged';\nconst diff = changed ? Math.abs(currentNum - previousNum).toFixed(2) : '0';\nreturn [{ json: { productName, currentPrice, previousPrice: previousPrice || 'first check', changed, direction, diff: changed ? `$${diff}` : null, checkedAt: new Date().toISOString() } }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        800,
        0
      ],
      "id": "rc-s-905",
      "name": "Compare Data"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "if-1",
              "leftValue": "={{ $json.changed }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1104,
        0
      ],
      "id": "rc-s-906",
      "name": "Data Changed?"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "a1",
              "name": "alert",
              "value": "=Price {{ $json.direction }} for {{ $json.productName }}: {{ $json.previousPrice }} \u2192 {{ $json.currentPrice }}",
              "type": "string"
            },
            {
              "id": "a2",
              "name": "severity",
              "value": "={{ $json.direction === 'dropped' ? 'deal' : 'info' }}",
              "type": "string"
            },
            {
              "id": "a3",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1344,
        -160
      ],
      "id": "rc-s-907",
      "name": "Build Alert"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "n1",
              "name": "status",
              "value": "no_change",
              "type": "string"
            },
            {
              "id": "n2",
              "name": "currentPrice",
              "value": "={{ $json.currentPrice }}",
              "type": "string"
            },
            {
              "id": "n3",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1344,
        48
      ],
      "id": "rc-s-908",
      "name": "No Change"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "price-monitor-recaptcha",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -704,
        480
      ],
      "id": "rc-s-909",
      "name": "Webhook Trigger",
      "webhookId": "rc-s-909-webhook",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.body.websiteURL }}",
        "websiteKey": "={{ $json.body.websiteKey }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -96,
        432
      ],
      "id": "rc-s-910",
      "name": "Solve reCAPTCHA [Webhook]",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Webhook Trigger').item.json.body.websiteURL }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "user-agent",
              "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "g-recaptcha-response",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {}
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        208,
        432
      ],
      "id": "rc-s-911",
      "name": "Fetch Product Page [Webhook]"
    },
    {
      "parameters": {
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "price",
              "cssSelector": ".product-price, [data-price], .price"
            },
            {
              "key": "productName",
              "cssSelector": "h1, .product-title"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.html",
      "typeVersion": 1.2,
      "position": [
        512,
        432
      ],
      "id": "rc-s-912",
      "name": "Extract Data [Webhook]"
    },
    {
      "parameters": {
        "jsCode": "const staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || 'Product';\nconst parsePrice = (str) => { if (!str) return null; const match = str.match(/[\\d]+\\.?\\d*/); return match ? parseFloat(match[0].replace(',', '')) : null; };\nconst currentNum = parsePrice(currentPrice);\nconst previousNum = parsePrice(previousPrice);\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\nconst changed = previousNum !== null && currentNum !== null && currentNum !== previousNum;\nconst direction = changed ? (currentNum < previousNum ? 'dropped' : 'increased') : 'unchanged';\nconst diff = changed ? Math.abs(currentNum - previousNum).toFixed(2) : '0';\nreturn [{ json: { productName, currentPrice, previousPrice: previousPrice || 'first check', changed, direction, diff: changed ? `$${diff}` : null, checkedAt: new Date().toISOString() } }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        800,
        432
      ],
      "id": "rc-s-913",
      "name": "Compare Data [Webhook]"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "if-2",
              "leftValue": "={{ $json.changed }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1104,
        432
      ],
      "id": "rc-s-914",
      "name": "Data Changed? [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "a4",
              "name": "alert",
              "value": "=Price {{ $json.direction }} for {{ $json.productName }}: {{ $json.previousPrice }} \u2192 {{ $json.currentPrice }}",
              "type": "string"
            },
            {
              "id": "a5",
              "name": "severity",
              "value": "={{ $json.direction === 'dropped' ? 'deal' : 'info' }}",
              "type": "string"
            },
            {
              "id": "a6",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1376,
        368
      ],
      "id": "rc-s-915",
      "name": "Build Alert [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "n4",
              "name": "status",
              "value": "no_change",
              "type": "string"
            },
            {
              "id": "n5",
              "name": "currentPrice",
              "value": "={{ $json.currentPrice }}",
              "type": "string"
            },
            {
              "id": "n6",
              "name": "checkedAt",
              "value": "={{ $json.checkedAt }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1392,
        608
      ],
      "id": "rc-s-916",
      "name": "No Change [Webhook]"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        1568,
        512
      ],
      "id": "rc-s-917",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Every 6 Hours": {
      "main": [
        [
          {
            "node": "Set Target Config [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Target Config [Schedule]": {
      "main": [
        [
          {
            "node": "Solve reCAPTCHA",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve reCAPTCHA": {
      "main": [
        [
          {
            "node": "Fetch Product Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Product Page": {
      "main": [
        [
          {
            "node": "Extract Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Data": {
      "main": [
        [
          {
            "node": "Compare Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compare Data": {
      "main": [
        [
          {
            "node": "Data Changed?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Changed?": {
      "main": [
        [
          {
            "node": "Build Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Change",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Solve reCAPTCHA [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve reCAPTCHA [Webhook]": {
      "main": [
        [
          {
            "node": "Fetch Product Page [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Product Page [Webhook]": {
      "main": [
        [
          {
            "node": "Extract Data [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Data [Webhook]": {
      "main": [
        [
          {
            "node": "Compare Data [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compare Data [Webhook]": {
      "main": [
        [
          {
            "node": "Data Changed? [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Data Changed? [Webhook]": {
      "main": [
        [
          {
            "node": "Build Alert [Webhook]",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Change [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Alert [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "No Change [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
  }
}
```</details>

### Contoh 2: Login Akun

Alur kerja ini mengotomatiskan login ke situs yang dilindungi captcha. Node **Set Login Config** memusatkan semua parameter — **[Schedule]** untuk jalur jadwal dan **[Webhook]** untuk jalur webhook sesuai permintaan. Edit node konfigurasi yang sesuai untuk mengonfigurasi setiap jalur.

**Jalur jadwal:**```
Every 24 Hours → Set Login Config → Solve Captcha → Submit Login
  → Login Successful? → Mark Login Success / Mark Login Failed
```> **Penanganan kesalahan:** Jika CapSolver gagal, eksekusi akan berhenti dan ditandai sebagai gagal di n8n. Periksa **Executions** untuk melihat kesalahan, atau konfigurasikan [Error Workflow](https://docs.n8n.io/flow-logic/error-handling/) n8n untuk mendapatkan pemberitahuan secara otomatis.

Perilaku utama:
- Default menggunakan **reCAPTCHA v2** (`ReCaptchaV2TaskProxyLess`) — ubah `taskType` di **Set Login Config [Schedule]** atau **Set Login Config [Webhook]** untuk jalur yang sesuai; ubah `Operation` di node Solve Captcha jika beralih antara v2 dan v3
- Field form dikodekan secara statis sebagai `email`, `password`, dan `g-recaptcha-response` — edit node **Submit Login** secara langsung agar sesuai dengan nama field situs target Anda
- Pemeriksaan **Login Successful?** mengevaluasi baik `statusCode < 400` dan keberadaan `successMarker` yang dapat dikonfigurasi di dalam body respons
- **Jalur Webhook** menggunakan **Set Login Config [Webhook]** dengan nilai placeholder yang sama — edit node tersebut untuk mengonfigurasi jalur webhook sesuai kebutuhan
- Jalur webhook mengembalikan hasil dalam format JSON melalui **Respond to Webhook**

<details>
<summary>Klik untuk memperluas JSON workflow lengkap (15 node)</summary>```json
{
  "nodes": [
    {
      "parameters": {
        "content": "## reCAPTCHA Account Login\n\n### How it works\n\n1. The workflow triggers every 24 hours to initiate a login process.\n2. It solves reCAPTCHA challenges for login attempts.\n3. Submits login credentials via HTTP requests.\n4. Checks if login is successful and records the outcome.\n5. A webhook can trigger the login process manually.\n6. Responds to webhook calls with login status.\n\n### Setup steps\n\n- [ ] Configure the schedule trigger for desired intervals.\n- [ ] Set up the webhook URL for manual login attempts.\n- [ ] Ensure that credentials for solving reCAPTCHA are valid.\n- [ ] Configure the HTTP request nodes with the correct login endpoint.\n- [ ] Confirm that response nodes are set with the correct output format.\n\n### Customization\n\nCustomizable time intervals for automated login attempts and custom webhook endpoints can be configured.",
        "width": 480,
        "height": 896
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1248,
        -352
      ],
      "id": "b76c0299-05e6-4d65-ba90-63a8148242af",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "## Scheduled login initialization\n\nTriggers login attempts every 24 hours and configures necessary parameters.",
        "width": 1408,
        "height": 272,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -688,
        -112
      ],
      "id": "0610b8c8-fce5-4efd-b3d2-1eeeb6eba648",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "## Scheduled login results\n\nDetermines and marks the results of scheduled login attempts.",
        "width": 240,
        "height": 528,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        816,
        -352
      ],
      "id": "73eec9f0-dbe8-43a5-bff7-2308b4cac998",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "## Webhook login initialization\n\nManual login attempts triggered by webhook, solving reCAPTCHA.",
        "width": 1408,
        "height": 272,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -688,
        320
      ],
      "id": "0680f603-0a47-429f-81cb-69ff7741a9bd",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "content": "## Webhook login results and response\n\nRecords results of webhook login attempts and sends response.",
        "width": 512,
        "height": 496,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        816,
        208
      ],
      "id": "4f244d27-03e3-4670-8e6f-67ed6264ac8d",
      "name": "Sticky Note4"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 24
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        -640,
        0
      ],
      "id": "rc-l-921",
      "name": "Every 24 Hours"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "l1",
              "name": "websiteURL",
              "value": "https://YOUR-LOGIN-PAGE.com",
              "type": "string"
            },
            {
              "id": "l2",
              "name": "websiteKey",
              "value": "YOUR_SITE_KEY_HERE",
              "type": "string"
            },
            {
              "id": "l3",
              "name": "successMarker",
              "value": "account-dashboard",
              "type": "string"
            },
            {
              "id": "l4",
              "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": [
        -336,
        0
      ],
      "id": "rc-l-922",
      "name": "Set Login Config [Schedule]"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.websiteURL }}",
        "websiteKey": "={{ $json.websiteKey }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -32,
        0
      ],
      "id": "rc-l-923",
      "name": "Solve Captcha [Schedule]",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Set Login Config [Schedule]').item.json.websiteURL }}/login",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "user-agent",
              "value": "={{ $('Set Login Config [Schedule]').item.json.userAgent }}"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "email",
              "value": "your-email@example.com"
            },
            {
              "name": "password",
              "value": "YOUR_ACCOUNT_PASSWORD"
            },
            {
              "name": "g-recaptcha-response",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": true,
              "neverError": true
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        272,
        0
      ],
      "id": "rc-l-924",
      "name": "Submit Login [Schedule]"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "lif1",
              "leftValue": "={{ $json.statusCode < 400 && String($json.body || $json.data || '').includes($('Set Login Config [Schedule]').item.json.successMarker) }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        576,
        0
      ],
      "id": "rc-l-925",
      "name": "Login Successful? [Schedule]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "s1",
              "name": "action",
              "value": "account_login",
              "type": "string"
            },
            {
              "id": "s2",
              "name": "status",
              "value": "success",
              "type": "string"
            },
            {
              "id": "s3",
              "name": "message",
              "value": "Configured account login flow succeeded",
              "type": "string"
            },
            {
              "id": "s4",
              "name": "checkedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        864,
        -192
      ],
      "id": "rc-l-926",
      "name": "Mark Login Success [Schedule]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "f1",
              "name": "action",
              "value": "account_login",
              "type": "string"
            },
            {
              "id": "f2",
              "name": "status",
              "value": "failed",
              "type": "string"
            },
            {
              "id": "f3",
              "name": "statusCode",
              "value": "={{ $json.statusCode }}",
              "type": "number"
            },
            {
              "id": "f4",
              "name": "message",
              "value": "Login response did not match the configured success marker",
              "type": "string"
            },
            {
              "id": "f5",
              "name": "checkedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        864,
        16
      ],
      "id": "rc-l-927",
      "name": "Mark Login Failed [Schedule]"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "account-login-recaptcha",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -640,
        432
      ],
      "id": "rc-l-928",
      "name": "Webhook Trigger",
      "webhookId": "rc-l-928-webhook",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "websiteURL": "={{ $json.body.websiteURL }}",
        "websiteKey": "={{ $json.body.websiteKey }}",
        "optional": {}
      },
      "type": "n8n-nodes-capsolver.capSolver",
      "typeVersion": 1,
      "position": [
        -32,
        432
      ],
      "id": "rc-l-929",
      "name": "Solve Captcha [Webhook]",
      "credentials": {
        "capSolverApi": {
          "id": "BeBFMAsySMsMGeE9",
          "name": "CapSolver account"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Webhook Trigger').item.json.body.loginActionURL }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "content-type",
              "value": "application/x-www-form-urlencoded"
            },
            {
              "name": "user-agent",
              "value": "={{ $('Webhook Trigger').item.json.body.userAgent || 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36' }}"
            }
          ]
        },
        "sendBody": true,
        "contentType": "form-urlencoded",
        "bodyParameters": {
          "parameters": [
            {
              "name": "={{ $('Webhook Trigger').item.json.body.usernameField || 'email' }}",
              "value": "={{ $('Webhook Trigger').item.json.body.usernameValue }}"
            },
            {
              "name": "={{ $('Webhook Trigger').item.json.body.passwordField || 'password' }}",
              "value": "={{ $('Webhook Trigger').item.json.body.passwordValue }}"
            },
            {
              "name": "g-recaptcha-response",
              "value": "={{ $json.data.solution.gRecaptchaResponse }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "fullResponse": true,
              "neverError": true
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.3,
      "position": [
        272,
        432
      ],
      "id": "rc-l-930",
      "name": "Submit Login [Webhook]"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "lif2",
              "leftValue": "={{ $json.statusCode < 400 && String($json.body || $json.data || '').includes($('Webhook Trigger').item.json.body.successMarker) }}",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        576,
        432
      ],
      "id": "rc-l-931",
      "name": "Login Successful? [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "ws1",
              "name": "action",
              "value": "account_login",
              "type": "string"
            },
            {
              "id": "ws2",
              "name": "status",
              "value": "success",
              "type": "string"
            },
            {
              "id": "ws3",
              "name": "message",
              "value": "Configured account login flow succeeded",
              "type": "string"
            },
            {
              "id": "ws4",
              "name": "checkedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        864,
        336
      ],
      "id": "rc-l-932",
      "name": "Mark Login Success [Webhook]"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "wf1",
              "name": "action",
              "value": "account_login",
              "type": "string"
            },
            {
              "id": "wf2",
              "name": "status",
              "value": "failed",
              "type": "string"
            },
            {
              "id": "wf3",
              "name": "statusCode",
              "value": "={{ $json.statusCode }}",
              "type": "number"
            },
            {
              "id": "wf4",
              "name": "message",
              "value": "Login response did not match the configured success marker",
              "type": "string"
            },
            {
              "id": "wf5",
              "name": "checkedAt",
              "value": "={{ new Date().toISOString() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        880,
        528
      ],
      "id": "rc-l-933",
      "name": "Mark Login Failed [Webhook]"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={{ JSON.stringify($json) }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        1184,
        496
      ],
      "id": "rc-l-934",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Every 24 Hours": {
      "main": [
        [
          {
            "node": "Set Login Config [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Login Config [Schedule]": {
      "main": [
        [
          {
            "node": "Solve Captcha [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve Captcha [Schedule]": {
      "main": [
        [
          {
            "node": "Submit Login [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Submit Login [Schedule]": {
      "main": [
        [
          {
            "node": "Login Successful? [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Login Successful? [Schedule]": {
      "main": [
        [
          {
            "node": "Mark Login Success [Schedule]",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Mark Login Failed [Schedule]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Solve Captcha [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Solve Captcha [Webhook]": {
      "main": [
        [
          {
            "node": "Submit Login [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Submit Login [Webhook]": {
      "main": [
        [
          {
            "node": "Login Successful? [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Login Successful? [Webhook]": {
      "main": [
        [
          {
            "node": "Mark Login Success [Webhook]",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Mark Login Failed [Webhook]",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Login Success [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mark Login Failed [Webhook]": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
  }
}
```</details>

Kesimpulan

Anda telah belajar cara membangun API pemecah reCAPTCHA dan alur kerja scraping siap produksi menggunakan n8n dan CapSolver — tanpa perlu coding tradisional.

Dalam panduan ini, kami membahas:

  • Endpoint solver API untuk reCAPTCHA v2, v2 Invisible, dan v3 menggunakan alur kerja berbasis webhook
  • Contoh kasus penggunaan — scraping dan login akun — yang menunjukkan cara mengirim token yang sudah dipecahkan dan memproses data yang dilindungi
  • Cara mengidentifikasi parameter captcha menggunakan ekstensi browser CapSolver
  • Praktik terbaik untuk penanganan token, manajemen kesalahan, dan penggunaan produksi

Inti dari pembelajaran ini: memecahkan captcha hanyalah setengah pekerjaan — Anda juga perlu mengirim token ke situs web target untuk membuka data yang dilindungi.

Tips: Alur kerja ini menggunakan pemicu Schedule + Webhook, tetapi Anda dapat mengganti node pemicu dengan pemicu n8n lainnya — manual, event aplikasi, pengiriman formulir, dll. Setelah mengambil data, gunakan node bawaan n8n untuk menyimpan hasil ke Google Sheets, database, penyimpanan cloud, atau mengirim notifikasi via Telegram/Slack/Email.


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

Banner kode bonus CapSolver

Pertanyaan yang Sering Diajukan

Berapa biaya untuk memecahkan reCAPTCHA?

Harga bervariasi tergantung jenis captcha. reCAPTCHA v2 biasanya berbiaya sekitar $1-3 per 1.000 pemecahan. Periksa halaman harga CapSolver untuk tarif terkini.

Berapa lama waktu yang dibutuhkan untuk memecahkan reCAPTCHA?

Sebagian besar tantangan reCAPTCHA v2 diselesaikan dalam 5-20 detik. reCAPTCHA v3 biasanya lebih cepat karena tidak melibatkan tantangan gambar.

Bisakah saya menggunakan alur kerja ini dengan n8n Cloud?

Ya! Alur kerja ini dapat digunakan dengan n8n yang dihosting sendiri maupun n8n Cloud. Node CapSolver sudah tersedia sebagai integrasi resmi — cukup tambahkan kredensial API Anda.

Bagaimana cara menemukan site key reCAPTCHA untuk sebuah situs web?

Metode termudah adalah menggunakan ekstensi browser CapSolver — buka DevTools, pergi ke tab "CapSolver Captcha Detector", dan aktifkan captcha. Ekstensi akan menampilkan semua parameter secara otomatis. Alternatifnya, Anda dapat mencari data-sitekey atau render= pada URL skrip reCAPTCHA di sumber halaman.

Apa perbedaan antara reCAPTCHA v2 dan v2 Invisible?

Keduanya menggunakan teknologi dasar yang sama, tetapi v2 menampilkan kotak centang yang terlihat ("I'm not a robot") sedangkan v2 Invisible berjalan di latar belakang tanpa widget yang terlihat. Saat memecahkan, perbedaannya hanya pada pengaturan isInvisible: true.

CapSolver mengembalikan token tapi situs web tetap menolaknya — kenapa?

Beberapa hal bisa menyebabkan ini. Pertama, token cepat kedaluwarsa — pastikan Anda mengirim token segera setelah diterima. Kedua, pastikan Anda mengirim token ke tempat yang benar: periksa permintaan jaringan sebenarnya yang dibuat browser saat mengirim formulir (DevTools → tab Network) dan pastikan nama field, metode permintaan, dan endpoint sesuai dengan konfigurasi di n8n. Ketiga, beberapa situs memerlukan parameter tambahan seperti enterprisePayload atau cookie dan header khusus — gunakan ekstensi CapSolver untuk memeriksa apakah ini berlaku. Jika token masih ditolak, hubungi dukungan CapSolver untuk bantuan spesifik situs.

Lihat Lebih Banyak

Web ScrapingApr 22, 2026

Arsitektur Pengambilan Data Web Rust untuk Ekstraksi Data yang Dapat Diskalakan

Pelajari arsitektur pengambilan data web Rust yang dapat diskalakan dengan reqwest, scraper, pengambilan data asinkron, pengambilan data browser tanpa tampilan, rotasi proxy, dan penanganan CAPTCHA yang sesuai aturan.

Emma Foster
Emma Foster
Web ScrapingFeb 17, 2026

Cara menyelesaikan Captcha di Nanobot dengan CapSolver

Mengotomasi penyelesaian CAPTCHA dengan Nanobot dan CapSolver. Gunakan Playwright untuk menyelesaikan reCAPTCHA dan Cloudflare secara otomatis.

Daftar Isi

Anh Tuan
Anh Tuan
Web ScrapingFeb 10, 2026

Data sebagai Layanan (DaaS): Apa Itu dan Mengapa Penting pada 2026

Pahami Data sebagai Layanan (DaaS) pada 2026. Eksplor manfaatnya, kasus penggunaan, dan bagaimana DaaS mengubah bisnis dengan wawasan real-time dan skalabilitas.

Anh Tuan
Anh Tuan
Web ScrapingFeb 03, 2026

Cara Menyelesaikan Captcha di RoxyBrowser dengan Integrasi CapSolver

Mengintegrasikan CapSolver dengan RoxyBrowser untuk mengotomatisasi tugas browser dan menghindari reCAPTCHA, Turnstile, dan CAPTCHA lainnya.

Ethan Collins
Ethan Collins
Web Scraping