
Ethan Collins
Pattern Recognition Specialist

GeeTest V3 adalah salah satu CAPTCHA perilaku yang paling banyak digunakan di web. Tidak seperti tantangan kotak centang sederhana, GeeTest V3 menggunakan teka-teki interaktif — geser untuk memverifikasi, pemilihan ikon, dan pencocokan kata — untuk membedakan manusia dari bot. Ini umumnya ditemukan di halaman login, formulir pendaftaran, dan situs padat data di Asia dan semakin banyak di seluruh dunia.
Bagaimana jika Anda dapat menyelesaikan GeeTest V3 secara otomatis dalam alur kerja n8n Anda — apakah Anda sedang membangun API pemecahan yang dapat digunakan kembali, mengikis data dari situs yang dilindungi captcha, atau mengotomatiskan formulir login — semuanya tanpa menulis satu baris kode tradisional pun?
Dalam panduan ini, Anda akan belajar cara menggabungkan n8n (alat otomatisasi alur kerja visual) dengan CapSolver (layanan pemecahan captcha bertenaga AI) untuk menyelesaikan tantangan GeeTest V3 sesuai permintaan — baik sebagai titik akhir API mandiri atau sebagai langkah dalam alur kerja otomatisasi yang lebih besar.
Apa yang akan Anda bangun:
API Pemecahan — 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 V3 adalah sistem CAPTCHA tantangan-respons yang memverifikasi pengguna melalui tugas interaktif. Tidak seperti reCAPTCHA (yang menggunakan satu token) atau Cloudflare Turnstile (yang berjalan secara tak terlihat), GeeTest V3 menyajikan teka-teki yang terlihat yang memerlukan interaksi pengguna:
Dari perspektif pemecahan, GeeTest V3 memiliki dua parameter penting:
gt — Pengidentifikasi per situs (seperti kunci situs). Ini statis — tidak berubah antar sesi.challenge — Token per sesi. Ini dinamis — berubah setiap kali dan kedaluwarsa dalam waktu sekitar 60-120 detik.Parameter challenge dinamis ini adalah perbedaan utama dari jenis CAPTCHA lainnya. Setiap alur kerja yang memecahkan GeeTest V3 memerlukan langkah tambahan untuk mengambil tantangan baru sebelum mengirimkannya ke CapSolver.
Format Solusi: Tidak seperti reCAPTCHA atau Turnstile yang mengembalikan satu token, GeeTest V3 mengembalikan tiga nilai terpisah:
challenge — String tantangan yang dipecahkanvalidate — Hash validasiseccode — Kode keamananIni dikirim sebagai tiga bidang formulir: geetest_challenge, geetest_validate, dan geetest_seccode.

GeeTest V3 vs V4: GeeTest V4 menggunakan struktur API yang berbeda (
captcha_idalih-alihgt, tanpa pengambilanchallengeterpisah). Panduan ini secara khusus mencakup V3. Jika Anda melihatcaptcha_iddi kode sumber halaman, Anda berurusan dengan V4.
Sebelum Anda mulai, pastikan Anda memiliki yang berikut:
Penting: Pastikan Anda memiliki saldo yang cukup di akun CapSolver Anda. Tugas pemecahan GeeTest V3 mengonsumsi kredit berdasarkan penggunaan.
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.
Buka instans n8n Anda dan navigasikan ke Settings -> Credentials. Anda akan melihat semua kredensial yang dikonfigurasi 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 pemecahan Anda akan berbagi kredensial yang sama.
Sekarang Anda siap untuk membangun alur kerja pemecahan GeeTest V3 Anda!
Sebelum Anda dapat menyelesaikan tantangan GeeTest V3, Anda perlu menemukan tiga hal: parameter gt, titik akhir API tantangan, dan memahami bagaimana nilai challenge diambil secara dinamis.
F12) -> tab Jaringangt= di URL atau respons yang berisi bidang "gt" dan "challenge"/api/geetest/register/gt/register-slide/captcha?gt=...{
"gt": "81dc9bdb52d04dc20036dbd8313ed055",
"challenge": "4a8a08f09d37b73795649038408b5f33ab",
"success": 1,
"new_captcha": true
}
Ini adalah konsep terpenting untuk otomatisasi GeeTest V3:
gt statis per situs — tetap sama di semua sesichallenge dinamis — berubah setiap kali dan kedaluwarsa dalam ~60-120 detikchallenge baru segera sebelum mengirim permintaan pemecahan ke CapSolverhttps://example.com/api/geetest/register)Ini berarti setiap alur kerja GeeTest V3 memerlukan node Permintaan HTTP tambahan sebelum node CapSolver untuk mengambil tantangan baru. Ini adalah perbedaan struktural utama dari alur kerja reCAPTCHA atau Turnstile.
Tip: Tambahkan
?t={{ Date.now() }}ke URL API tantangan sebagai parameter anti-cache untuk memastikan Anda selalu mendapatkan tantangan baru.
Untuk panduan terperinci tentang cara mengidentifikasi parameter captcha, lihat dokumentasi resmi CapSolver.
Alur kerja ini membuat titik akhir POST yang menerima parameter GeeTest V3 dan mengembalikan tantangan yang dipecahkan. Tidak seperti pemecah reCAPTCHA atau Turnstile, pemanggil harus menyediakan nilai challenge (yang baru diambil) bersama dengan gt dan websiteURL.

Alur kerja terdiri dari empat node:
$json.error tidak kosong){"error": "..."} saat gagal| Pengaturan | Nilai |
|---|---|
| Metode HTTP | POST |
| Jalur | solver-geetest-v3 |
| Respons | Response Node |
Ini membuat titik akhir di: https://your-n8n-instance.com/webhook/solver-geetest-v3
| Parameter | Nilai | Deskripsi |
|---|---|---|
| Operasi | GeeTest V3 |
Harus diatur ke GeeTest V3 |
| Tipe | GeeTestTaskProxyLess |
Satu-satunya opsi yang tersedia — varian tanpa proxy |
| URL Situs Web | ={{ $json.body.websiteURL }} |
URL halaman dengan tantangan GeeTest |
| GT | ={{ $json.body.gt }} |
Pengidentifikasi GeeTest per situs |
| Tantangan | ={{ $json.body.challenge }} |
Tantangan dinamis per sesi (harus baru) |
| Subdomain Server API GeeTest | (Opsional) | Server API GeeTest kustom jika situs menggunakannya |
Juga pilih kredensial CapSolver Anda di node.
| Pengaturan | Nilai |
|---|---|
| Kondisi | ={{ $json.error }} tidak kosong |
| Cabang True | Mengarahkan ke node Kesalahan Respons Webhook |
| Cabang False | Mengarahkan ke node Berhasil Respons Webhook |
Ini membuat jalur kesalahan eksplisit di kanvas. Node CapSolver berlanjut saat terjadi kesalahan (onError: continueRegularOutput), sehingga kegagalan tiba di sini sebagai { "error": "..." } alih-alih menghentikan alur kerja.
Cabang Berhasil (output False dari Kesalahan CapSolver?):
| Pengaturan | Nilai |
|---|---|
| Respons dengan | JSON |
| Isi Respons | ={{ JSON.stringify($json.data) }} |
Kirim permintaan POST ke titik akhir webhook Anda:
curl -X POST https://your-n8n-instance.com/webhook/solver-geetest-v3 \
-H "Content-Type: application/json" \
-d '{
"websiteURL": "https://example.com/login",
"gt": "81dc9bdb52d04dc20036dbd8313ed055",
"challenge": "4a8a08f09d37b73795649038408b5f33ab"
}'
Respons yang diharapkan:
{
"taskId": "abc123...",
"solution": {
"challenge": "4a8a08f09d37b73795649038408b5f33",
"validate": "68f0c05d0c8a8b2b1e2f3a4b5c6d7e8f",
"seccode": "68f0c05d0c8a8b2b1e2f3a4b5c6d7e8f|jordan"
},
"status": "ready"
}
Penting:
challengedalam isi permintaan harus baru diambil. Jika Anda mengirim tantangan yang kedaluwarsa, CapSolver tidak akan dapat menyelesaikannya. Tantangan biasanya kedaluwarsa dalam 60-120 detik.
Salin JSON di bawah ini dan impor ke n8n melalui Menu -> Import from JSON:
{
"name": "GeeTest V3 Scraping — Price & Product Details — CapSolver + Schedule + Webhook",
"nodes": [
{
"parameters": {
"content": "## Scraping GeeTest V3 — Pemantau Harga & Produk — CapSolver + Jadwal + Webhook\n\n**Untuk siapa:** Tim yang memantau harga atau data produk di situs yang dilindungi GeeTest V3.\n\n**Apa yang dilakukannya:** Memecahkan GeeTest V3, mengambil halaman produk, mengekstrak harga & nama melalui pemilih CSS, membandingkan dengan nilai yang disimpan, dan memperingatkan tentang perubahan.\n\n**Cara kerjanya:**\n1. Penjadwal (setiap 6 jam) atau Webhook memicu alur\n2. CapSolver memecahkan tantangan GeeTest V3\n3. Permintaan HTTP mengambil halaman produk dengan token yang dipecahkan\n4. Node HTML mengekstrak harga dan nama produk\n5. Node kode membandingkan harga saat ini dengan yang disimpan → memperingatkan tentang perubahan\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 output Build Alert ke saluran notifikasi Anda",
"height": 560,
"width": 460,
"color": 1
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1220,
-380
],
"id": "sticky-blog-main-1773678228108-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": 2200,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-740,
-280
],
"id": "sticky-blog-section-1773678228108-2",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "### Jalur Webhook\nPemicu sesuai permintaan — logika yang sama, mengembalikan hasil sebagai respons JSON.",
"height": 480,
"width": 2200,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-740,
140
],
"id": "sticky-blog-section-1773678228108-3",
"name": "Sticky Note2"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 6
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
-700,
0
],
"id": "88888888-8888-8888-8888-888888888801",
"name": "Every 6 Hours"
},
{
"parameters": {
"url": "https://YOUR-TARGET-SITE.com/api/geetest/register?t={{ Date.now() }}",
"options": {
"response": {
"response": {
"fullResponse": false
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
-400,
0
],
"id": "88888888-8888-8888-8888-888888888802",
"name": "Fetch GeeTest Challenge"
},
{
"parameters": {
"operation": "GeeTest V3",
"websiteURL": "https://YOUR-TARGET-SITE.com/product-page",
"gt": "={{ $json.gt }}",
"challenge": "={{ $json.challenge }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-96,
0
],
"id": "88888888-8888-8888-8888-888888888803",
"name": "Solve GeeTest V3",
"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"
},
{
"name": "content-type",
"value": "application/x-www-form-urlencoded"
}
]
},
"sendBody": true,
"contentType": "form-urlencoded",
"bodyParameters": {
"parameters": [
{
"name": "geetest_challenge",
"value": "={{ $(\'Solve GeeTest V3\').item.json.data.solution.challenge }}"
},
{
"name": "geetest_validate",
"value": "={{ $(\'Solve GeeTest V3\').item.json.data.solution.validate }}"
},
{
"name": "geetest_seccode",
"value": "={{ $(\'Solve GeeTest V3\').item.json.data.solution.seccode }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": false
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
208,
0
],
"id": "88888888-8888-8888-8888-888888888804",
"name": "Fetch Product Page"
},
{
"parameters": {
"operation": "extractHtmlContent",
"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": "88888888-8888-8888-8888-888888888805",
"name": "Extract Data"
},
{
"parameters": {
"jsCode": "// Get current and previous price from workflow static data\nconst staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || \'Product\';\n\n// Parse numeric values for comparison\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// Update stored price\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": "88888888-8888-8888-8888-888888888806",
"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": "88888888-8888-8888-8888-888888888807",
"name": "Data Changed?"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "alert-001",
"name": "alert",
"value": "=Price {{ $json.direction }} for {{ $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": "88888888-8888-8888-8888-888888888808",
"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": "88888888-8888-8888-8888-888888888809",
"name": "No Change"
},
{
"parameters": {
"httpMethod": "POST",
"path": "price-monitor-geetest-v3",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-700,
420
],
"id": "88888888-8888-8888-8888-888888888810",
"name": "Webhook Trigger",
"webhookId": "88888888-aaaa-bbbb-cccc-888888888810",
"onError": "continueRegularOutput"
},
{
"parameters": {
"url": "https://YOUR-TARGET-SITE.com/api/geetest/register?t={{ Date.now() }}",
"options": {
"response": {
"response": {
"fullResponse": false
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
-400,
420
],
"id": "88888888-8888-8888-8888-888888888811",
"name": "Fetch GeeTest Challenge [Webhook]"
},
{
"parameters": {
"operation": "GeeTest V3",
"websiteURL": "https://YOUR-TARGET-SITE.com/product-page",
"gt": "={{ $json.gt }}",
"challenge": "={{ $json.challenge }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-96,
420
],
"id": "88888888-8888-8888-8888-888888888812",
"name": "Solve GeeTest V3 [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"
},
{
"name": "content-type",
"value": "application/x-www-form-urlencoded"
}
]
},
"sendBody": true,
"contentType": "form-urlencoded",
"bodyParameters": {
"parameters": [
{
"name": "geetest_challenge",
"value": "={{ $(\'Solve GeeTest V3 [Webhook]\').item.json.data.solution.challenge }}"
},
{
"name": "geetest_validate",
"value": "={{ $(\'Solve GeeTest V3 [Webhook]\').item.json.data.solution.validate }}"
},
{
"name": "geetest_seccode",
"value": "={{ $(\'Solve GeeTest V3 [Webhook]\').item.json.data.solution.seccode }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": false
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
208,
420
],
"id": "88888888-8888-8888-8888-888888888813",
"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": "88888888-8888-8888-8888-888888888814",
"name": "Extract Data [Webhook]"
},
{
"parameters": {
"jsCode": "// Get current and previous price from workflow static data\nconst staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || \'Product\';\n\n// Parse numeric values for comparison\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// Update stored price\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": "88888888-8888-8888-8888-888888888815",
"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": "88888888-8888-8888-8888-888888888816",
"name": "Data Changed? [Webhook]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "alert-004",
"name": "alert",
"value": "=Price {{ $json.direction }} for {{ $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": "88888888-8888-8888-8888-888888888817",
"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": "88888888-8888-8888-8888-888888888818",
"name": "No Change [Webhook]"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
1712,
420
],
"id": "88888888-8888-8888-8888-888888888819",
"name": "Respond to Webhook [Webhook]"
}
],
"connections": {
"Every 6 Hours": {
"main": [
[
{
"node": "Fetch GeeTest Challenge",
"type": "main",
"index": 0
}
]
]
},
"Fetch GeeTest Challenge": {
"main": [
[
{
"node": "Solve GeeTest V3",
"type": "main",
"index": 0
}
]
]
},
"Solve GeeTest V3": {
"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": "Fetch GeeTest Challenge [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Fetch GeeTest Challenge [Webhook]": {
"main": [
[
{
"node": "Solve GeeTest V3 [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Solve GeeTest V3 [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 V3 dari awal hingga akhir. Ini memecahkan tantangan GeeTest V3 sebelum mengirimkan kredensial.
Alur kerja ini terdiri dari lima node:
challenge barugt, challenge, dan websiteURL ke CapSolver| Pengaturan | Nilai |
|---|---|
| Metode HTTP | POST |
| Jalur | login-geetest-v3 |
| Respons | Response Node |
Ini membuat titik akhir di: https://your-n8n-instance.com/webhook/login-geetest-v3
| Pengaturan | Nilai |
|---|---|
| URL | https://YOUR-TARGET-SITE.com/api/geetest/register?t={{ Date.now() }} |
| Opsi | Full Response = false |
Ini akan mengembalikan respons JSON yang berisi nilai gt dan challenge.
| Parameter | Nilai |
|---|---|
| Operasi | GeeTest V3 |
| URL Situs Web | https://YOUR-TARGET-SITE.com/login |
| GT | ={{ $json.gt }} |
| Tantangan | ={{ $json.challenge }} |
Juga pilih kredensial CapSolver Anda.
| Pengaturan | Nilai |
|---|---|
| Metode | POST |
| URL | https://YOUR-TARGET-SITE.com/login |
| Tipe Konten | form-urlencoded |
| Parameter Isi | username=YOUR_USERNAME, password=YOUR_PASSWORD, geetest_challenge={{ $(\'Solve GeeTest V3\').item.json.data.solution.challenge }}, geetest_validate={{ $(\'Solve GeeTest V3\').item.json.data.solution.validate }}, geetest_seccode={{ $(\'Solve GeeTest V3\').item.json.data.solution.seccode }} |
Penting: Pastikan untuk mengganti
YOUR_USERNAMEdanYOUR_PASSWORDdengan kredensial yang sebenarnya. Selain itu, Anda mungkin perlu menyesuaikan nama bidang formulir agar sesuai dengan HTML situs target.
| Pengaturan | Nilai |
|---|---|
| Respons dengan | JSON |
| Isi Respons | ={{ JSON.stringify($json) }} |
Kirim permintaan POST ke titik akhir webhook Anda:
curl -X POST https://your-n8n-instance.com/webhook/login-geetest-v3 \
-H "Content-Type: application/json" \
-d ''
Respons yang diharapkan (berhasil):
{
"status": "success",
"message": "Login successful",
"solution": {
"challenge": "...",
"validate": "...",
"seccode": "..."
}
}
Respons 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": "Account Login Automation — Solve GeeTest V3 & Submit Credentials",
"nodes": [
{
"parameters": {
"content": "## Otomatisasi Login Akun — Pecahkan GeeTest V3 & Kirim Kredensial\n\n**Untuk siapa:** Tim yang perlu mengotomatiskan login ke akun yang dilindungi GeeTest V3.\n\n**Apa yang dilakukannya:** Mengambil tantangan GeeTest V3, memecahkannya dengan CapSolver, lalu mengirimkan formulir login dengan token yang dipecahkan dan kredensial pengguna.\n\n**Cara kerjanya:**\n1. Webhook memicu alur\n2. Permintaan HTTP mengambil tantangan GeeTest V3 baru\n3. CapSolver memecahkan tantangan\n4. Permintaan HTTP mengirimkan formulir login, yang berisi token GeeTest V3 yang dipecahkan dan kredensial pengguna\n5. Webhook merespons dengan 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": [
-1020,
-280
],
"id": "sticky-login-main-1773678228108-1",
"name": "Sticky Note"
},
{
"parameters": {
"httpMethod": "POST",
"path": "login-geetest-v3",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-700,
0
],
"id": "99999999-9999-9999-9999-999999999901",
"name": "Webhook Trigger",
"webhookId": "99999999-aaaa-bbbb-cccc-999999999901",
"onError": "continueRegularOutput"
},
{
"parameters": {
"url": "https://YOUR-TARGET-SITE.com/api/geetest/register?t={{ Date.now() }}",
"options": {
"response": {
"response": {
"fullResponse": false
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
-400,
0
],
"id": "99999999-9999-9999-9999-999999999902",
"name": "Fetch GeeTest Challenge"
},
{
"parameters": {
"operation": "GeeTest V3",
"websiteURL": "https://YOUR-TARGET-SITE.com/login",
"gt": "={{ $json.gt }}",
"challenge": "={{ $json.challenge }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-96,
0
],
"id": "99999999-9999-9999-9999-999999999903",
"name": "Solve GeeTest V3",
"credentials": {
"capSolverApi": {
"id": "YOUR_CREDENTIAL_ID",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"method": "POST",
"url": "https://YOUR-TARGET-SITE.com/login",
"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": "YOUR_USERNAME"
},
{
"name": "password",
"value": "YOUR_PASSWORD"
},
{
"name": "geetest_challenge",
"value": "={{ $(\'Solve GeeTest V3\').item.json.data.solution.challenge }}"
},
{
"name": "geetest_validate",
"value": "={{ $(\'Solve GeeTest V3\').item.json.data.solution.validate }}"
},
{
"name": "geetest_seccode",
"value": "={{ $(\'Solve GeeTest V3\').item.json.data.solution.seccode }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": false
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
208,
0
],
"id": "99999999-9999-9999-9999-999999999904",
"name": "Submit Login Form"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
512,
0
],
"id": "99999999-9999-9999-9999-999999999905",
"name": "Respond to Webhook"
}
],
"connections": {
"Webhook Trigger": {
"main": [
[
{
"node": "Fetch GeeTest Challenge",
"type": "main",
"index": 0
}
]
]
},
"Fetch GeeTest Challenge": {
"main": [
[
{
"node": "Solve GeeTest V3",
"type": "main",
"index": 0
}
]
]
},
"Solve GeeTest V3": {
"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 berarti akun atau paket CapSolver Anda tidak menyertakan akses GeeTest V3. Harap periksa dasbor CapSolver Anda untuk memverifikasi apakah paket Anda menyertakan layanan ini.
Nilai challenge GeeTest V3 bersifat dinamis dan kedaluwarsa dengan cepat (biasanya dalam 60-120 detik). Anda harus mengambil challenge baru segera sebelum mengirim permintaan pemecahan ke CapSolver. Pastikan alur kerja Anda mengambil challenge terbaru sebelum setiap upaya pemecahan.
Kesalahan ini menunjukkan bahwa parameter websiteURL atau gt yang Anda berikan di node CapSolver salah. Harap periksa kembali tab jaringan alat pengembang situs target untuk memastikan Anda menggunakan nilai yang benar.
Jika GeeTest V3 berhasil dipecahkan, tetapi login masih gagal, mungkin ada masalah dengan:
Kesalahan ini menunjukkan bahwa kunci API CapSolver Anda yang dikonfigurasi di n8n salah atau telah kedaluwarsa. Harap periksa dasbor CapSolver Anda dan perbarui kredensial di n8n.
challenge terbaru. Tantangan kedaluwarsa dengan cepat.gt, websiteURL, dan challenge sudah benar. Ini adalah kunci keberhasilan pemecahan GeeTest V3.Siap untuk memulai? Daftar CapSolver dan gunakan kode bonus n8n untuk mendapatkan bonus tambahan 8% pada pengisian ulang pertama Anda!

Anda telah belajar cara membangun API pemecahan GeeTest V3 dan alur kerja otomatisasi login akun menggunakan n8n dan CapSolver.
Ringkasan:
gt statis dan parameter challenge dinamis.gt dan titik akhir API tantangan.challenge baru harus diambil sebelum setiap upaya pemecahan.Kompleksitas utama GeeTest V3 terletak pada parameter challenge dinamis dan format solusi tiga bagiannya. Dengan menambahkan node permintaan HTTP sebelum node CapSolver untuk mengambil tantangan baru, Anda dapat secara efektif mengotomatiskan pemecahan GeeTest V3. Anda kemudian dapat dengan mulus mengintegrasikan token yang dipecahkan ini ke dalam alur kerja login atau scraping Anda.
Tip: Alur kerja ini menggunakan pemicu Webhook, tetapi Anda dapat menukar node pemicu dengan pemicu n8n lainnya — manual, peristiwa aplikasi, pengiriman formulir, dll. Setelah GeeTest V3 dipecahkan, gunakan node bawaan n8n untuk menyimpan hasil ke Google Sheets, database, penyimpanan cloud, atau mengirim peringatan melalui Telegram/Slack/Email.
GeeTest V3 adalah sistem CAPTCHA perilaku yang memverifikasi pengguna melalui teka-teki interaktif (seperti teka-teki geser, klik ikon, dan pencocokan kata). Ini menggunakan parameter gt statis dan parameter challenge dinamis yang kedaluwarsa dengan cepat.
GeeTest V4 menggunakan struktur API yang berbeda, seperti captcha_id alih-alih gt, dan tidak memerlukan pengambilan challenge terpisah. Panduan ini secara khusus berfokus pada GeeTest V3. Jika Anda melihat captcha_id di kode sumber halaman, Anda berurusan dengan V4.
Harga bervariasi berdasarkan penggunaan. Harap periksa halaman harga CapSolver untuk harga GeeTest V3 saat ini. Tugas pemecahan GeeTest V3 umumnya lebih mahal daripada pengenalan gambar-ke-teks sederhana, tetapi lebih murah daripada beberapa jenis captcha kompleks lainnya.
Tugas pemecahan GeeTest V3 biasanya membutuhkan waktu 10-30 detik, tergantung pada kompleksitas tantangan dan beban server CapSolver. Tidak seperti ImageToTextTask, pemecahan GeeTest V3 melibatkan pembuatan dan polling tugas, jadi tidak instan.
Layanan pemecahan GeeTest V3 CapSolver umumnya tidak mengharuskan Anda untuk menyediakan proxy. CapSolver menangani persyaratan proxy secara internal. Anda hanya perlu menyediakan parameter websiteURL, gt, dan challenge.
challenge saya selalu kedaluwarsa?Nilai challenge GeeTest V3 bersifat dinamis dan kedaluwarsa dengan cepat (biasanya dalam 60-120 detik). Anda harus mengambil challenge baru segera sebelum mengirim permintaan pemecahan ke CapSolver. Pastikan alur kerja Anda menyertakan node permintaan HTTP untuk mengambil challenge terbaru sebelum setiap upaya pemecahan.
Jika GeeTest V3 berhasil dipecahkan tetapi login masih gagal, periksa hal-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.
