
Sora Fujimoto
AI Solutions Architect

GeeTest V4 adalah generasi terbaru dari sistem CAPTCHA perilaku GeeTest, yang digunakan oleh semakin banyak situs web untuk melindungi formulir login, halaman pendaftaran, dan titik akhir data. Tidak seperti sistem CAPTCHA lama yang mengandalkan teka-teki gambar, GeeTest V4 menggunakan tantangan adaptif dan analisis perilaku — menjadikannya salah satu perlindungan yang lebih canggih yang akan Anda temui dalam alur kerja otomatisasi.
Bagaimana jika Anda dapat menyelesaikan GeeTest V4 secara otomatis di dalam alur kerja n8n Anda — baik Anda sedang membangun API solusi yang dapat digunakan kembali, mengikis situs yang dilindungi captcha, atau mengotomatiskan formulir login — semuanya tanpa menulis satu baris kode tradisional pun?
Dalam panduan ini, Anda akan mempelajari cara menggabungkan n8n (alat otomatisasi alur kerja visual) dengan CapSolver (layanan penyelesaian captcha yang didukung AI) untuk menyelesaikan tantangan GeeTest V4 sesuai permintaan — baik sebagai titik akhir API mandiri atau sebagai langkah dalam alur kerja otomatisasi apa pun.
Apa yang akan Anda bangun:
API Solusi — titik akhir yang dapat digunakan kembali yang dapat dipanggil oleh alat Anda yang lain:
Alur Kerja Penggunaan Langsung — CapSolver disematkan sebagai langkah dalam otomatisasi yang lebih besar:
GeeTest V4 adalah versi terbaru dari platform CAPTCHA GeeTest. Ini menggantikan sistem V3 yang lebih lama dengan model integrasi yang disederhanakan dan deteksi perilaku yang ditingkatkan. Dari perspektif penyelesaian, V4 secara struktural lebih sederhana daripada V3 — ini hanya memerlukan parameter statis (captchaId) daripada aliran tantangan dinamis yang dibutuhkan V3.

Perbedaan Utama dari GeeTest V3:
| Fitur | GeeTest V3 | GeeTest V4 |
|---|---|---|
| Parameter Utama | gt + challenge dinamis |
captchaId (statis) |
| Pengambilan Tantangan | Diperlukan — harus memanggil API GeeTest terlebih dahulu | Tidak diperlukan — captchaId bersifat statis |
| Bidang Solusi | 3 (challenge, validate, seccode) |
5 (captcha_id, lot_number, pass_token, gen_time, captcha_output) |
| Skrip Widget | gt.js |
gcaptcha4.js |
| Jenis Tugas | GeeTestTask / GeeTestTaskProxyLess |
Hanya GeeTestTaskProxyLess |
Keuntungan Utama V4:
captchaIddisematkan dalam kode sumber halaman dan tidak pernah berubah — temukan sekali, gunakan selamanya. Tidak ada pengambilan tantangan dinamis berarti lebih sedikit node dalam alur kerja Anda.
Sebelum kita mulai, pastikan Anda memiliki yang berikut ini:
Penting: Pastikan Anda memiliki saldo yang cukup di akun CapSolver Anda. Tugas penyelesaian GeeTest V4 menghabiskan kredit berdasarkan penggunaan.
CapSolver tersedia sebagai integrasi resmi di n8n — tidak diperlukan 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.
Navigasikan ke instans n8n Anda dan buka Settings > Credentials. Anda akan melihat semua kredensial yang Anda konfigurasikan di sini.

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

Penting: Setiap node CapSolver dalam alur kerja Anda akan merujuk kredensial ini. Anda hanya perlu membuatnya sekali — semua alur kerja solusi Anda akan berbagi kredensial yang sama.
Sekarang Anda siap untuk membangun alur kerja solusi GeeTest V4 Anda!
Sebelum Anda dapat menyelesaikan CAPTCHA GeeTest V4, Anda perlu menemukan captchaId-nya — satu-satunya parameter yang diperlukan. Tidak seperti GeeTest V3 (yang memerlukan pengambilan challenge dinamis), captchaId V4 bersifat statis dan disematkan langsung ke dalam kode sumber halaman.
captcha_id atau captchaId di kode sumber halamangcaptcha4.js — skrip widget GeeTest V4captchaId biasanya diteruskan sebagai parameter konfigurasi saat menginisialisasi widget<!-- Contoh: Inisialisasi GeeTest V4 dalam kode sumber halaman -->
<script>
initGeetest4({
captchaId: 'e392e1d7fd421dc63325744d5a2b9c73',
product: 'bind'
});
</script>
gcaptcha4 atau geetestgcaptcha4.geetest.com — parameter captcha_id akan berada dalam string kueriKeuntungan Utama V4:
captchaIdbersifat statis — setelah Anda menemukannya, Anda dapat menggunakannya tanpa batas waktu tanpa perlu mengambil tantangan baru setiap saat. Ini membuat alur kerja V4 secara struktural identik dengan alur kerja Turnstile.
Alur kerja ini membuat titik akhir API POST yang menerima parameter GeeTest V4 dan mengembalikan sekumpulan token yang diselesaikan.

Alur kerja terdiri dari empat node:
$json.error tidak kosong){"error": "..."} jika gagal| Pengaturan | Nilai |
|---|---|
| Metode HTTP | POST |
| Jalur | solver-geetest-v4 |
| Tanggapi | Response Node |
Ini membuat titik akhir di: https://your-n8n-instance.com/webhook/solver-geetest-v4
| Parameter | Nilai | Deskripsi |
|---|---|---|
| Operasi | GeeTest V4 |
Harus diatur ke GeeTest V4 |
| Jenis | GeeTestTaskProxyLess |
Ini adalah satu-satunya jenis tugas yang tersedia (tidak ada varian proxy) |
| URL Situs Web | {{ $json.body.websiteURL }} |
URL halaman dengan widget GeeTest V4 |
| ID Captcha | {{ $json.body.captchaId }} |
ID captcha GeeTest V4 statis |
| Subdomain Server API GeeTest | (Opsional) | Server API GeeTest kustom jika situs menggunakannya |
Pilih kredensial CapSolver Anda di node ini. Parameter
geetestApiServerSubdomainopsional jarang diperlukan — hanya tambahkan jika server GeeTest default tidak berfungsi untuk situs target Anda.
| Pengaturan | Nilai |
|---|---|
| Kondisi | ={{ $json.error }} tidak kosong |
| Cabang Benar | Merutekan ke node Webhook Tanggapan Kesalahan |
| Cabang Salah | Merutekan ke node Webhook Tanggapan Berhasil |
Cabang Berhasil (Keluaran salah dari Kesalahan CapSolver?):
| Pengaturan | Nilai |
|---|---|
| Tanggapi Dengan | JSON |
| Badan Tanggapan | ={{ JSON.stringify($json.data) }} |
Kirim permintaan POST ke titik akhir Webhook Anda:
curl -X POST https://your-n8n-instance.com/webhook/solver-geetest-v4 \
-H "Content-Type: application/json" \
-d '{
"websiteURL": "https://example.com/login",
"captchaId": "e392e1d7fd421dc63325744d5a2b9c73"
}'
Tanggapan yang Diharapkan:
{
"taskId": "abc123...",
"solution": {
"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73",
"lot_number": "7c18c041a6ed4e...",
"pass_token": "d88ce40c0a5c5a18...",
"gen_time": "1709123456",
"captcha_output": "dGVzdF9jYXB0Y2hh..."
},
"status": "ready"
}
Salin JSON di bawah ini dan impor ke n8n melalui Menu > Import from JSON:
{
"name": "GeeTest V4 — Solver API",
"nodes": [
{
"parameters": {
"content": "## GeeTest V4 — API Solusi\n\n**Untuk siapa ini:** Pengembang yang perlu menyelesaikan tantangan GeeTest V4 melalui titik akhir POST sederhana.\n\n**Apa yang dilakukannya:** Mengekspos webhook yang menerima parameter captcha, menyelesaikan tantangan dengan CapSolver, dan mengembalikan token atau kesalahan sebagai JSON.\n\n**Cara kerjanya:**\n1. Webhook menerima POST dengan URL target, kunci situs, dan parameter opsional\n2. Node CapSolver menyelesaikan tantangan GeeTest V4\n3. Node IF memeriksa kesalahan → mengembalikan token keberhasilan atau JSON kesalahan\n\n**Pengaturan:**\n1. Tambahkan kunci API CapSolver Anda di **Settings → Credentials → CapSolver API**\n2. Aktifkan alur kerja\n3. POST ke URL webhook dengan parameter captcha Anda",
"height": 494,
"width": 460,
"color": 1
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-712,
-400
],
"id": "sticky-blog-main-1773678228112-1",
"name": "Sticky Note"
},
{
"parameters": {
"httpMethod": "POST",
"path": "solver-geetest-v4",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
-192,
0
],
"id": "a1b2c3d4-0001-0001-0001-a1b2c3d40001",
"name": "Webhook Trigger",
"webhookId": "a1b2c3d4-aaaa-bbbb-cccc-a1b2c3d40001",
"onError": "continueRegularOutput"
},
{
"parameters": {
"operation": "GeeTest V4",
"websiteURL": "={{ $json.body.websiteURL }}",
"captchaId": "={{ $json.body.captchaId }}",
"geetestApiServerSubdomain": "={{ $json.body.geetestApiServerSubdomain }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
104,
0
],
"id": "a1b2c3d4-0001-0001-0001-a1b2c3d40002",
"name": "Solve GeeTest V4",
"credentials": {
"capSolverApi": {
"id": "YOUR_CREDENTIAL_ID",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "geetest-if-001",
"leftValue": "={{ $json.error }}",
"operator": {
"type": "string",
"operation": "isEmpty",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
408,
0
],
"id": "a1b2c3d4-0001-0001-0001-a1b2c3d40003",
"name": "CapSolver Error?"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json.data) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
712,
-80
],
"id": "a1b2c3d4-0001-0001-0001-a1b2c3d40004",
"name": "Respond to Webhook (Success)"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify({ error: $json.error }) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
712,
128
],
"id": "a1b2c3d4-0001-0001-0001-a1b2c3d40005",
"name": "Respond to Webhook (Error)"
}
],
"connections": {
"Webhook Trigger": {
"main": [
[
{
"node": "Solve GeeTest V4",
"type": "main",
"index": 0
}
]
]
},
"Solve GeeTest V4": {
"main": [
[
{
"node": "CapSolver Error?",
"type": "main",
"index": 0
}
]
]
},
"CapSolver Error?": {
"main": [
[
{
"node": "Respond to Webhook (Success)",
"type": "main",
"index": 0
}
],
[
{
"node": "Respond to Webhook (Error)",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
}
}
Alur kerja ini mengikis halaman produk setiap 6 jam (jadwal) atau sesuai permintaan (webhook), mengekstrak harga menggunakan node HTML, dan membandingkannya dengan nilai yang disimpan sebelumnya.
Jalur Jadwal:
Setiap 6 Jam -> Selesaikan GeeTest V4 -> Ambil Halaman Produk -> Ekstrak Data
-> Bandingkan Data -> Data Berubah? -> Bangun Peringatan / Tidak Ada Perubahan
Perilaku Utama:
.product-price, h1)$workflow.staticData.lastPrice mempertahankan harga sebelumnya di antara eksekusideal) dan kenaikan (keparahan: info){
"name": "GeeTest V4 Scraping — Price & Product Details — CapSolver + Schedule + Webhook",
"nodes": [
{
"parameters": {
"content": "## Pengikisan GeeTest V4 — Monitor Harga & Produk\n\n**Untuk siapa ini:** Tim yang perlu memantau harga atau data produk di situs yang dilindungi GeeTest V4.\n\n**Apa yang dilakukannya:** Menyelesaikan GeeTest V4, mengambil halaman produk, mengekstrak harga dan nama melalui pemilih CSS, membandingkan dengan nilai yang disimpan, dan memperingatkan tentang perubahan jika ada.\n\n**Cara kerjanya:**\n1. Jadwal (setiap 6 jam) atau Webhook memicu aliran.\n2. CapSolver menyelesaikan tantangan GeeTest V4.\n3. Permintaan HTTP mengambil halaman produk dengan token yang diselesaikan.\n4. Node HTML mengekstrak harga dan nama produk.\n5. Node kode membandingkan harga saat ini dengan harga yang disimpan → memperingatkan tentang perubahan jika ada.\n\n**Pengaturan:**\n1. Tambahkan kunci API CapSolver Anda di **Settings → Credentials**.\n2. Ganti URL placeholder dan kunci situs.\n3. Perbarui pemilih CSS di \"Ekstrak Data\" agar sesuai dengan halaman target Anda.\n4. Hubungkan keluaran \"Bangun Peringatan\" ke saluran pemberitahuan Anda.",
"height": 560,
"width": 460,
"color": 1
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-920,
-380
],
"id": "sticky-blog-main-1773678228112-1",
"name": "Sticky Note"
},
{
"parameters": {
"content": "### Jalur Jadwal\nBerjalan secara otomatis setiap 6 jam.\nHasil disimpan dalam data statis alur kerja untuk perbandingan antar eksekusi.",
"height": 480,
"width": 1900,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-440,
-280
],
"id": "sticky-blog-section-1773678228112-2",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "### Jalur Webhook\nPemicu sesuai permintaan — logika yang sama, mengembalikan hasil sebagai respons JSON.",
"height": 480,
"width": 1900,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-440,
140
],
"id": "sticky-blog-section-1773678228112-3",
"name": "Sticky Note2"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 6
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
-400,
0
],
"id": "99999999-9999-9999-9999-999999999901",
"name": "Every 6 Hours"
},
{
"parameters": {
"operation": "GeeTest V4",
"websiteURL": "https://YOUR-TARGET-SITE.com/product-page",
"captchaId": "YOUR_CAPTCHA_ID_HERE",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-96,
0
],
"id": "99999999-9999-9999-9999-999999999902",
"name": "Solve GeeTest V4",
"credentials": {
"capSolverApi": {
"id": "YOUR_CREDENTIAL_ID",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"method": "POST",
"url": "https://YOUR-TARGET-SITE.com/product-page",
"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": "captcha_id",
"value": "={{ $json.data.solution.captcha_id }}"
},
{
"name": "lot_number",
"value": "={{ $json.data.solution.lot_number }}"
},
{
"name": "pass_token",
"value": "={{ $json.data.solution.pass_token }}"
},
{
"name": "gen_time",
"value": "={{ $json.data.solution.gen_time }}"
},
{
"name": "captcha_output",
"value": "={{ $json.data.solution.captcha_output }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": false
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
208,
0
],
"id": "99999999-9999-9999-9999-999999999903",
"name": "Fetch Product Page"
},
{
"parameters": {
"operation": "extractHtmlContent",
"sourceData": "json",
"dataPropertyName": "data",
"extractionValues": {
"values": [
{
"key": "price",
"cssSelector": ".product-price, [data-price], .price",
"returnValue": "text",
"returnArray": false
},
{
"key": "productName",
"cssSelector": "h1, .product-title",
"returnValue": "text",
"returnArray": false
}
]
},
"options": {}
},
"type": "n8n-nodes-base.html",
"typeVersion": 1.2,
"position": [
512,
0
],
"id": "99999999-9999-9999-9999-999999999904",
"name": "Extract Data"
},
{
"parameters": {
"jsCode": "// Dapatkan harga saat ini dan sebelumnya dari data statis alur kerja\nconst staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || 'Product';\n\n// Uraikan nilai numerik untuk perbandingan\nconst parsePrice = (str) => {\n if (!str) return null;\n const match = str.match(/[\\d,]+\\.?\\d*/);\n return match ? parseFloat(match[0].replace(',', '')) : null;\n};\n\nconst currentNum = parsePrice(currentPrice);\nconst previousNum = parsePrice(previousPrice);\n\n// Perbarui harga yang disimpan\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\n\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';\n\nreturn [{\n json: {\n productName,\n currentPrice,\n previousPrice: previousPrice || 'first check',\n changed,\n direction,\n diff: changed ? `$${diff}` : null,\n checkedAt: new Date().toISOString()\n }\n}];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
800,
0
],
"id": "99999999-9999-9999-9999-999999999905",
"name": "Compare Data"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "price-if-001",
"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": "99999999-9999-9999-9999-999999999906",
"name": "Data Changed?"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "alert-001",
"name": "alert",
"value": "=Harga {{ $json.direction }} untuk {{ $json.productName }}: {{ $json.previousPrice }} → {{ $json.currentPrice }} ({{ $json.direction === 'dropped' ? '-' : '+' }}{{ $json.diff }})",
"type": "string"
},
{
"id": "alert-002",
"name": "severity",
"value": "={{ $json.direction === 'dropped' ? 'deal' : 'info' }}",
"type": "string"
},
{
"id": "alert-003",
"name": "checkedAt",
"value": "={{ $json.checkedAt }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1408,
-80
],
"id": "99999999-9999-9999-9999-999999999907",
"name": "Build Alert"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "nc-001",
"name": "status",
"value": "no_change",
"type": "string"
},
{
"id": "nc-002",
"name": "currentPrice",
"value": "={{ $json.currentPrice }}",
"type": "string"
},
{
"id": "nc-003",
"name": "checkedAt",
"value": "={{ $json.checkedAt }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1408,
128
],
"id": "99999999-9999-9999-9999-999999999908",
"name": "No Change"
},
{
"parameters": {
"httpMethod": "POST",
"path": "price-monitor-geetest-v4",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-400,
420
],
"id": "99999999-9999-9999-9999-999999999909",
"name": "Webhook Trigger",
"webhookId": "99999999-aaaa-bbbb-cccc-999999999909",
"onError": "continueRegularOutput"
},
{
"parameters": {
"operation": "GeeTest V4",
"websiteURL": "https://YOUR-TARGET-SITE.com/product-page",
"captchaId": "YOUR_CAPTCHA_ID_HERE",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-96,
420
],
"id": "99999999-9999-9999-9999-999999999910",
"name": "Solve GeeTest V4 [Webhook]",
"credentials": {
"capSolverApi": {
"id": "YOUR_CREDENTIAL_ID",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"method": "POST",
"url": "https://YOUR-TARGET-SITE.com/product-page",
"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": "captcha_id",
"value": "={{ $json.data.solution.captcha_id }}"
},
{
"name": "lot_number",
"value": "={{ $json.data.solution.lot_number }}"
},
{
"name": "pass_token",
"value": "={{ $json.data.solution.pass_token }}"
},
{
"name": "gen_time",
"value": "={{ $json.data.solution.gen_time }}"
},
{
"name": "captcha_output",
"value": "={{ $json.data.solution.captcha_output }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": false
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
208,
420
],
"id": "99999999-9999-9999-9999-999999999911",
"name": "Fetch Product Page [Webhook]"
},
{
"parameters": {
"operation": "extractHtmlContent",
"sourceData": "json",
"dataPropertyName": "data",
"extractionValues": {
"values": [
{
"key": "price",
"cssSelector": ".product-price, [data-price], .price",
"returnValue": "text",
"returnArray": false
},
{
"key": "productName",
"cssSelector": "h1, .product-title",
"returnValue": "text",
"returnArray": false
}
]
},
"options": {}
},
"type": "n8n-nodes-base.html",
"typeVersion": 1.2,
"position": [
512,
420
],
"id": "99999999-9999-9999-9999-999999999912",
"name": "Extract Data [Webhook]"
},
{
"parameters": {
"jsCode": "// Dapatkan harga saat ini dan sebelumnya dari data statis alur kerja\nconst staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || 'Product';\n\n// Uraikan nilai numerik untuk perbandingan\nconst parsePrice = (str) => {\n if (!str) return null;\n const match = str.match(/[\\d,]+\\.?\\d*/);\n return match ? parseFloat(match[0].replace(',', '')) : null;\n};\n\nconst currentNum = parsePrice(currentPrice);\nconst previousNum = parsePrice(previousPrice);\n\n// Perbarui harga yang disimpan\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\n\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';\n\nreturn [{\n json: {\n productName,\n currentPrice,\n previousPrice: previousPrice || 'first check',\n changed,\n direction,\n diff: changed ? `$${diff}` : null,\n checkedAt: new Date().toISOString()\n }\n}];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
800,
420
],
"id": "99999999-9999-9999-9999-999999999913",
"name": "Compare Data [Webhook]"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "price-if-002",
"leftValue": "={{ $json.changed }}",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
1104,
420
],
"id": "99999999-9999-9999-9999-999999999914",
"name": "Data Changed? [Webhook]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "alert-004",
"name": "alert",
"value": "=Harga {{ $json.direction }} untuk {{ $json.productName }}: {{ $json.previousPrice }} → {{ $json.currentPrice }} ({{ $json.direction === 'dropped' ? '-' : '+' }}{{ $json.diff }})",
"type": "string"
},
{
"id": "alert-005",
"name": "severity",
"value": "={{ $json.direction === 'dropped' ? 'deal' : 'info' }}",
"type": "string"
},
{
"id": "alert-006",
"name": "checkedAt",
"value": "={{ $json.checkedAt }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1408,
340
],
"id": "99999999-9999-9999-9999-999999999915",
"name": "Build Alert [Webhook]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "nc-004",
"name": "status",
"value": "no_change",
"type": "string"
},
{
"id": "nc-005",
"name": "currentPrice",
"value": "={{ $json.currentPrice }}",
"type": "string"
},
{
"id": "nc-006",
"name": "checkedAt",
"value": "={{ $json.checkedAt }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1408,
548
],
"id": "99999999-9999-9999-9999-999999999916",
"name": "No Change [Webhook]"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
1712,
420
],
"id": "99999999-9999-9999-9999-999999999917",
"name": "Respond to Webhook [Webhook]"
}
],
"connections": {
"Every 6 Hours": {
"main": [
[
{
"node": "Solve GeeTest V4",
"type": "main",
"index": 0
}
]
]
},
"Solve GeeTest V4": {
"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 GeeTest V4 [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Solve GeeTest V4 [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 [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"No Change [Webhook]": {
"main": [
[
{
"node": "Respond to Webhook [Webhook]",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
}
}
Alur kerja ini mengotomatiskan pengiriman formulir login yang dilindungi GeeTest V4 dari awal hingga akhir. Ini menyelesaikan tantangan GeeTest V4 sebelum mengirimkan kredensial.
Alur kerja ini terdiri dari lima node:
| Pengaturan | Nilai |
|---|---|
| Metode HTTP | POST |
| Jalur | login-geetest-v4 |
| Tanggapi | Response Node |
Ini membuat titik akhir di: https://your-n8n-instance.com/webhook/login-geetest-v4
| Parameter | Nilai |
|---|---|
| Operasi | GeeTest V4 |
| URL Situs Web | https://YOUR-TARGET-SITE.com/login |
| ID Captcha | YOUR_CAPTCHA_ID_HERE |
Pastikan Anda juga memilih kredensial CapSolver Anda.
| Pengaturan | Nilai |
|---|---|
| Metode | POST |
| URL | https://YOUR-TARGET-SITE.com/login |
| Jenis Konten | form-urlencoded |
| Parameter Badan | username=YOUR_USERNAME, password=YOUR_PASSWORD, captcha_id={{ $('Solve GeeTest V4').item.json.data.solution.captcha_id }}, lot_number={{ $('Solve GeeTest V4').item.json.data.solution.lot_number }}, pass_token={{ $('Solve GeeTest V4').item.json.data.solution.pass_token }}, gen_time={{ $('Solve GeeTest V4').item.json.data.solution.gen_time }}, captcha_output={{ $('Solve GeeTest V4').item.json.data.solution.captcha_output }} |
Penting: Ganti
YOUR_USERNAMEdanYOUR_PASSWORDdengan kredensial Anda yang sebenarnya. Selain itu, Anda mungkin perlu menyesuaikan nama bidang formulir agar sesuai dengan HTML situs target Anda.
| Pengaturan | Nilai |
|---|---|
| Tanggapi Dengan | JSON |
| Badan Tanggapan | ={{ JSON.stringify($json) }} |
Kirim permintaan POST ke titik akhir Webhook Anda:
curl -X POST https://your-n8n-instance.com/webhook/login-geetest-v4 \
-H "Content-Type: application/json" \
-d '{
"websiteURL": "https://example.com/login",
"captchaId": "e392e1d7fd421dc63325744d5a2b9c73",
"username": "testuser",
"password": "testpass"
}'
Tanggapan yang Diharapkan (Berhasil):
{
"status": "success",
"message": "Login successful",
"solution": {
"captcha_id": "e392e1d7fd421dc63325744d5a2b9c73",
"lot_number": "7c18c041a6ed4e...",
"pass_token": "d88ce40c0a5c5a18...",
"gen_time": "1709123456",
"captcha_output": "dGVzdF9jYXB0Y2hh..."
}
}
Tanggapan yang Diharapkan (Gagal):
{
"status": "failed",
"message": "Login failed: Invalid credentials or captcha",
"error": "..."
}
Salin JSON di bawah ini dan impor ke n8n melalui Menu > Import from JSON:
{
"name": "GeeTest V4 Account Login — CapSolver + Schedule + Webhook",
"nodes": [
{
"parameters": {
"content": "## Otomatisasi Login Akun GeeTest V4 — CapSolver + Jadwal + Webhook\n\n**Untuk siapa ini:** Tim yang perlu mengotomatiskan login ke akun yang dilindungi GeeTest V4.\n\n**Apa yang dilakukannya:** Menyelesaikan tantangan GeeTest V4 dan mengirimkan formulir login dengan token yang diselesaikan dan kredensial pengguna.\n\n**Cara kerjanya:**\n1. Webhook memicu aliran.\n2. CapSolver menyelesaikan tantangan GeeTest V4.\n3. Permintaan HTTP mengirimkan formulir login dengan token yang diselesaikan dan kredensial pengguna.\n4. Webhook mengembalikan hasil login.\n\n**Pengaturan:**\n1. Tambahkan kunci API CapSolver Anda di **Settings → Credentials**.\n2. Ganti URL placeholder dan kredensial.\n3. Sesuaikan nama bidang formulir agar sesuai dengan situs target Anda.\n4. Aktifkan alur kerja.",
"height": 480,
"width": 460,
"color": 1
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-728,
-400
],
"id": "sticky-blog-main-1773678228112-1",
"name": "Sticky Note"
},
{
"parameters": {
"httpMethod": "POST",
"path": "login-geetest-v4",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-400,
0
],
"id": "a2b3c4d5-0001-0001-0001-a2b3c4d50001",
"name": "Webhook Trigger",
"webhookId": "a2b3c4d5-aaaa-bbbb-cccc-a2b3c4d50001",
"onError": "continueRegularOutput"
},
{
"parameters": {
"operation": "GeeTest V4",
"websiteURL": "={{ $json.body.websiteURL }}",
"captchaId": "={{ $json.body.captchaId }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-96,
0
],
"id": "a2b3c4d5-0001-0001-0001-a2b3c4d50002",
"name": "Solve GeeTest V4",
"credentials": {
"capSolverApi": {
"id": "YOUR_CREDENTIAL_ID",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"method": "POST",
"url": "={{ $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"
},
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded"
}
]
},
"sendBody": true,
"contentType": "form-urlencoded",
"bodyParameters": {
"parameters": [
{
"name": "username",
"value": "={{ $json.body.username }}"
},
{
"name": "password",
"value": "={{ $json.body.password }}"
},
{
"name": "captcha_id",
"value": "={{ $('Solve GeeTest V4').item.json.data.solution.captcha_id }}"
},
{
"name": "lot_number",
"value": "={{ $('Solve GeeTest V4').item.json.data.solution.lot_number }}"
},
{
"name": "pass_token",
"value": "={{ $('Solve GeeTest V4').item.json.data.solution.pass_token }}"
},
{
"name": "gen_time",
"value": "={{ $('Solve GeeTest V4').item.json.data.solution.gen_time }}"
},
{
"name": "captcha_output",
"value": "={{ $('Solve GeeTest V4').item.json.data.solution.captcha_output }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": false
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
208,
0
],
"id": "a2b3c4d5-0001-0001-0001-a2b3c4d50003",
"name": "Submit Login Form"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
512,
0
],
"id": "a2b3c4d5-0001-0001-0001-a2b3c4d50004",
"name": "Respond to Webhook"
}
],
"connections": {
"Webhook Trigger": {
"main": [
[
{
"node": "Solve GeeTest V4",
"type": "main",
"index": 0
}
]
]
},
"Solve GeeTest V4": {
"main": [
[
{
"node": "Submit Login Form",
"type": "main",
"index": 0
}
]
]
},
"Submit Login Form": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
}
}
Kesalahan ini menunjukkan bahwa akun atau paket CapSolver Anda tidak menyertakan akses ke GeeTest V4. Periksa Dasbor CapSolver Anda untuk mengonfirmasi apakah layanan ini disertakan dalam paket Anda.
Kesalahan ini menunjukkan bahwa parameter websiteURL yang Anda berikan di node CapSolver salah. Periksa kembali tab jaringan alat pengembang situs target Anda untuk memastikan Anda menggunakan nilai yang benar.
Jika login gagal meskipun GeeTest V4 berhasil diselesaikan, masalahnya mungkin terletak pada poin-titik berikut:
Kesalahan ini menunjukkan bahwa kunci API CapSolver yang Anda konfigurasikan di n8n salah atau telah kedaluwarsa. Periksa Dasbor CapSolver Anda dan perbarui kredensial di n8n.
websiteURL dan parameter opsional apa pun seperti captchaId dan geetestApiServerSubdomain sudah benar. Ini sangat penting untuk keberhasilan penyelesaian GeeTest V4.Siap untuk memulai? Daftar ke CapSolver dan gunakan kode bonus n8n untuk mendapatkan bonus tambahan 8% pada pengisian ulang pertama Anda!

GeeTest V4 adalah generasi terbaru dari sistem CAPTCHA perilaku GeeTest, yang menggunakan tantangan adaptif dan analisis perilaku untuk melindungi situs web.
GeeTest V4 secara struktural lebih sederhana daripada V3, hanya memerlukan parameter captchaId statis daripada aliran tantangan dinamis yang dibutuhkan V3. Ini juga menggunakan skrip gcaptcha4.js dan mengembalikan 5 bidang solusi.
Harga bervariasi berdasarkan penggunaan. Periksa halaman harga CapSolver untuk harga GeeTest V4 saat ini. Tugas penyelesaian GeeTest V4 lebih mahal daripada pengenalan gambar-ke-teks sederhana, tetapi lebih murah daripada jenis CAPTCHA kompleks lainnya.
Tugas penyelesaian GeeTest V4 biasanya memakan waktu antara 10 hingga 30 detik, tergantung pada kompleksitas tantangan dan beban server CapSolver. Tidak seperti ImageToTextTask, penyelesaian GeeTest V4 melibatkan pembuatan dan polling tugas, sehingga tidak instan.
Layanan penyelesaian GeeTest V4 CapSolver umumnya tidak mengharuskan Anda menyediakan proxy. CapSolver menangani persyaratan proxy secara internal. Anda hanya perlu memberikan websiteURL dan captchaId.
Jika token GeeTest V4 Anda tidak diterima, periksa hal berikut:
websiteURL dan captchaId sudah benar.Jika login gagal meskipun GeeTest V4 berhasil diselesaikan, periksa hal berikut:
Ya. Alur kerja ini berfungsi dengan n8n yang dihosting sendiri dan n8n Cloud. Node CapSolver sudah tersedia sebagai integrasi resmi. Anda hanya perlu menambahkan kredensial API Anda.
Bangun API solver eCAPTCHA v2/v3 menggunakan CapSolver dan n8n. Pelajari cara mengotomatisasi penyelesaian token, mengirimkannya ke website, dan mengekstrak data yang dilindungi tanpa coding.

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