
Rajinder Singh
Deep Learning Researcher

GeeTest V3 वेब पर सबसे व्यापक रूप से तैनात बिहेवियरल CAPTCHA में से एक है। सरल चेकबॉक्स चैलेंज के विपरीत, GeeTest V3 इंटरैक्टिव पहेलियों का उपयोग करता है -- स्लाइड-टू-वेरिफाई, आइकन चयन, और शब्द मिलान -- ताकि इंसानों और बोट्स के बीच फर्क किया जा सके। यह आमतौर पर लॉगिन पेज, रजिस्ट्रेशन फॉर्म, और डेटा-भारी साइटों पर एशिया में और धीरे-धीरे विश्वभर में पाया जाता है।
अगर आप अपने n8n वर्कफ़्लोज़ के अंदर GeeTest V3 को स्वतः सुलझा सकें -- चाहे आप एक पुनः उपयोग योग्य solver API बना रहे हों, कैप्चा-प्रोटेक्टेड साइट को स्क्रैप कर रहे हों, या लॉगिन फॉर्म को ऑटोमेट कर रहे हों -- वह भी बिना पारंपरिक कोड की एक लाइन लिखे?
इस गाइड में, आप सीखेंगे कि कैसे n8n (एक विजुअल वर्कफ़्लो ऑटोमेशन टूल) को CapSolver (एक AI-संचालित कैप्चा सॉल्विंग सेवा) के साथ मिलाकर मांग पर GeeTest V3 की चुनौतियाँ हल की जा सकती हैं -- या तो एक स्टैंडअलोन API एंडपॉइंट के रूप में या किसी भी ऑटोमेशन वर्कफ़्लो के अंदर एक चरण के रूप में।
आप क्या बनाएंगे:
Solver API -- एक पुनः उपयोग योग्य एंडपॉइंट जिसे आपके अन्य टूल कॉल कर सकते हैं:
प्रत्यक्ष-उपयोग वर्कफ़्लोज़ -- CapSolver को बड़े ऑटोमेशन के अंदर एक चरण के रूप में एम्बेड किया गया:
GeeTest V3 एक चैलेंज-रिस्पॉन्स CAPTCHA सिस्टम है जो उपयोगकर्ताओं को इंटरैक्टिव टास्क के माध्यम से सत्यापित करता है। reCAPTCHA (जो एक सिंगल टोकन का उपयोग करता है) या Cloudflare Turnstile (जो अदृश्य रूप से चलता है) के विपरीत, GeeTest V3 दिखाई देने वाली पहेलियाँ प्रस्तुत करता है जिनमें उपयोगकर्ता की सहभागिता आवश्यक होती है:
सॉल्विंग के दृष्टिकोण से, GeeTest V3 के दो महत्वपूर्ण पैरामीटर होते हैं:
gt -- एक प्रति-साइट पहचानकर्ता (जैसे साइट की चाबी). यह स्थैतिक होता है -- सत्रों के बीच नहीं बदलता।challenge -- एक प्रति-सत्र टोकन। यह डायनामिक होता है -- हर बार बदलता है और लगभग 60-120 सेकंड में समाप्त हो जाता है।यह डायनामिक challenge पैरामीटर अन्य CAPTCHA प्रकारों से मुख्य अंतर है। हर वर्कफ़्लो जो GeeTest V3 को सॉल्व करता है, उसे CapSolver को भेजने से पहले एक अतिरिक्त चरण के तहत ताजा चुनौती प्राप्त करने की आवश्यकता होती है।
प्रतिक्रिया प्रारूप: reCAPTCHA या Turnstile के विपरीत जो एक सिंगल टोकन लौटाते हैं, GeeTest V3 तीन अलग-अलग मान लौटाता है:
challenge -- सुलझाई गई चुनौती स्ट्रिंगvalidate -- वैलिडेशन हैशseccode -- सुरक्षा कोडइन्हें तीन फॉर्म फ़ील्ड्स के रूप में सबमिट किया जाता है: geetest_challenge, geetest_validate, और geetest_seccode।

GeeTest V3 बनाम V4: GeeTest V4 एक अलग API संरचना का उपयोग करता है (
captcha_idgtके बजाय, कोई अलगchallengeफेच नहीं)। यह गाइड खासकर V3 के लिए है। अगर आप पेज स्रोत मेंcaptcha_idदेखें, तो आप V4 से निपट रहे हैं।
शुरू करने से पहले, सुनिश्चित करें कि आपके पास निम्नलिखित हैं:
महत्वपूर्ण: सुनिश्चित करें कि आपके CapSolver खाते में पर्याप्त बैलेंस है। GeeTest V3 सॉल्विंग टास्क उपयोग के आधार पर क्रेडिट खपत करते हैं।
CapSolver n8n में एक आधिकारिक इंटीग्रेशन के रूप में उपलब्ध है -- किसी समुदाय नोड की स्थापना आवश्यक नहीं। आप इसे अपने वर्कफ़्लोज़ बनाते समय नोड पैनल में सीधे देख सकते हैं।
चूंकि यह एक आधिकारिक इंटीग्रेशन है, आपको n8n में एक क्रेडेंशियल बनाना होगा ताकि CapSolver नोड आपके खाते के साथ प्रमाणित हो सके।
अपने n8n इंस्टेंस में जाएं और Settings -> Credentials पर जाएं। यहां आप सभी कॉन्फ़िगर किए गए क्रेडेंशियल देखेंगे।

All (डिफ़ॉल्ट) पर ही रहने देंn8n स्वचालित रूप से कनेक्शन का परीक्षण करेगा। आपको एक हरा "Connection tested successfully" बैनर दिखना चाहिए जो यह पुष्टि करता है कि आपका API key मान्य है।

महत्वपूर्ण: आपके वर्कफ़्लोज़ में प्रत्येक CapSolver नोड इसी क्रेडेंशियल को संदर्भित करेगा। आपको इसे केवल एक बार बनाना है -- आपके सभी सॉल्वर वर्कफ़्लोज़ इसी क्रेडेंशियल को साझा करेंगे।
अब आप अपना GeeTest V3 सॉल्वर वर्कफ़्लो बनाने के लिए तैयार हैं!
GeeTest V3 चुनौती को सॉल्व करने के लिए, आपको तीन चीजें खोजनी होंगी: gt पैरामीटर, चुनौती API एंडपॉइंट, और यह समझना कि challenge मान डायनामिक रूप से कैसे लिया जाता है।
F12) -> Network टैबgt= हो या प्रतिक्रिया में "gt" और "challenge" फ़ील्ड्स हों/api/geetest/register/gt/register-slide/captcha?gt=...{
"gt": "81dc9bdb52d04dc20036dbd8313ed055",
"challenge": "4a8a08f09d37b73795649038408b5f33ab",
"success": 1,
"new_captcha": true
}
यह GeeTest V3 ऑटोमेशन के लिए सबसे महत्वपूर्ण अवधारणा है:
gt मान साइट के हिसाब से स्थिर होता है -- यह सेशन्स के बीच समान रहता हैchallenge मान डायनामिक होता है -- यह हर बार बदलता है और लगभग 60-120 सेकंड में समाप्त हो जाता हैchallenge प्राप्त करना होता हैhttps://example.com/api/geetest/register)इसका मतलब है कि हर GeeTest V3 वर्कफ़्लो में CapSolver नोड से पहले एक अतिरिक्त HTTP रिक्वेस्ट नोड होना चाहिए ताकि ताजा चैलेंज प्राप्त किया जा सके। यह reCAPTCHA या Turnstile वर्कफ़्लोज़ से संरचनात्मक रूप से प्रमुख अंतर है।
टिप: कैश-बस्टिंग पैरामीटर के रूप में challenge API URL में
?t={{ Date.now() }}जोड़ें ताकि हमेशा ताजा चैलेंज मिले।
कैप्चा पैरामीटर्स की पहचान करने के लिए विस्तृत मार्गदर्शन के लिए देखें आधिकारिक CapSolver दस्तावेज़।
यह वर्कफ़्लो एक POST एंडपॉइंट बनाता है जो GeeTest V3 पैरामीटर्स स्वीकार करता है और एक सॉल्व्ड चैलेंज लौटाता है। reCAPTCHA या Turnstile सॉल्वर्स के विपरीत, कॉलर को challenge मान (ताजा प्राप्त किया हुआ) gt और websiteURL के साथ प्रदान करना होता है।

वर्कफ़्लो में चार नोड होते हैं:
$json.error खाली नहीं है){ "error": "..." }| सेटिंग | मान |
|---|---|
| HTTP मेथड | POST |
| पाथ | solver-geetest-v3 |
| प्रतिक्रिया दें | Response Node |
यह इस एंडपॉइंट को बनाता है: https://your-n8n-instance.com/webhook/solver-geetest-v3
| पैरामीटर | मान | विवरण |
|---|---|---|
| ऑपरेशन | GeeTest V3 |
इसे GeeTest V3 पर सेट करें |
| टाइप | GeeTestTaskProxyLess |
उपलब्ध विकल्प केवल यही है -- कोई प्रॉक्सी वेरिएंट नहीं |
| वेबसाइट URL | ={{ $json.body.websiteURL }} |
GeeTest चैलेंज वाला पेज URL |
| GT | ={{ $json.body.gt }} |
प्रति-साइट GeeTest पहचानकर्ता |
| चैलेंज | ={{ $json.body.challenge }} |
डायनामिक प्रति-सेशन चैलेंज (ताजा होना जरूरी) |
| GeeTest API सर्वर उपडोमेन | (वैकल्पिक) | अगर साइट कस्टम GeeTest API सर्वर उपयोग करती है तो |
साथ ही अपने CapSolver क्रेडेंशियल्स नोड में चुनें।
| सेटिंग | मान |
|---|---|
| कंडीशन | ={{ $json.error }} खाली नहीं है |
| True शाखा | Error Respond to Webhook नोड पर रूट करता है |
| False शाखा | Success Respond to Webhook नोड पर रूट करता है |
यह कैनवास पर त्रुटि पथ को स्पष्ट करता है। CapSolver नोड त्रुटि पर भी जारी रहता है (onError: continueRegularOutput), इसलिए विफलताएं यहां { "error": "..." } के रूप में आती हैं, न कि वर्कफ़्लो क्रैश करती हैं।
सफलता शाखा (CapSolver Error? के false आउटपुट):
| सेटिंग | मान |
|---|---|
| प्रतिक्रिया के साथ | JSON |
| प्रतिक्रिया बॉडी | ={{ JSON.stringify($json.data) }} |
अपना POST रिक्वेस्ट इस वेबहुक एंडपॉइंट पर भेजें:
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"
}'
अपेक्षित प्रतिक्रिया:
{
"taskId": "abc123...",
"solution": {
"challenge": "4a8a08f09d37b73795649038408b5f33",
"validate": "68f0c05d0c8a8b2b1e2f3a4b5c6d7e8f",
"seccode": "68f0c05d0c8a8b2b1e2f3a4b5c6d7e8f|jordan"
},
"status": "ready"
}
महत्वपूर्ण: अनुरोध बॉडी में
challengeताजा प्राप्त किया हुआ होना चाहिए। यदि आप एक्सपायर चैलेंज भेजेंगे, तो CapSolver उसे सॉल्व नहीं कर पाएगा। चैलेंज आमतौर पर 60-120 सेकंड में समाप्त हो जाता है।
नीचे दिया गया JSON कॉपी करें और n8n में Menu -> Import from JSON के माध्यम से इम्पोर्ट करें:
{
"nodes": [
{
"parameters": {
"content": "## GeeTest V3 \u2014 Solver API\n\n### How it works\n\n1. Receives a solver request via a webhook.\n2. Solves the GeeTest V3 captcha using capSolver.\n3. Checks if there was an error during the solving process.\n4. Responds to the webhook with an error or success message.\n5. Ends the workflow after sending the response.\n\n### Setup steps\n\n- [ ] Set up the webhook endpoint to receive solver requests.\n- [ ] Configure the capSolver node with the appropriate GeeTest V3 API credentials.\n\n### Customization\n\nAdjust the 'CapSolver Error?' node to handle different types of errors or responses.",
"width": 480,
"height": 608
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-800,
-240
],
"id": "5ca04612-4476-453a-9f1d-a12d2483b7ee",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## Receive request and solve captcha\n\nHandles receiving the request and solving the captcha.",
"width": 496,
"height": 272,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-240,
-112
],
"id": "542ea208-ffa4-4d26-a11a-64e293dcebc5",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## Handle and respond to result\n\nChecks for errors in the solving process and responds appropriately.",
"width": 496,
"height": 496,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
352,
-240
],
"id": "56d6e3a1-3bca-4298-9554-baa040f6b4e6",
"name": "Sticky Note2"
},
{
"parameters": {
"httpMethod": "POST",
"path": "solver-geetest-v3",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-192,
0
],
"id": "88888888-1111-1111-1111-888888880001",
"name": "Receive Solver Request",
"webhookId": "88888888-1111-aaaa-bbbb-888888880001",
"onError": "continueRegularOutput"
},
{
"parameters": {
"operation": "GeeTest V3",
"websiteURL": "={{ $json.body.websiteURL }}",
"gt": "={{ $json.body.gt }}",
"challenge": "={{ $json.body.challenge }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
112,
0
],
"id": "88888888-1111-1111-1111-888888880002",
"name": "GeeTest V3",
"onError": "continueRegularOutput",
"credentials": {
"capSolverApi": {
"id": "BeBFMAsySMsMGeE9",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "capsolver-err-001",
"leftValue": "={{ $json.error }}",
"operator": {
"type": "string",
"operation": "isNotEmpty",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
400,
0
],
"id": "88888888-1111-1111-1111-888888880003",
"name": "CapSolver Error?"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify({ error: $json.error }) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
700,
-100
],
"id": "88888888-1111-1111-1111-888888880004",
"name": "Respond to Webhook (Error)"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json.data) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
700,
100
],
"id": "88888888-1111-1111-1111-888888880005",
"name": "Respond to Webhook"
}
],
"connections": {
"Receive Solver Request": {
"main": [
[
{
"node": "GeeTest V3",
"type": "main",
"index": 0
}
]
]
},
"GeeTest V3": {
"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"
}
}
GeeTest V3 सॉल्वर API एन्डपॉइंट निम्नलिखित पैरामीटर स्वीकार करता है:
| पैरामीटर | आवश्यक | विवरण |
|---|---|---|
websiteURL |
हाँ | पेज का URL जो GeeTest चुनौती होस्ट करता है |
gt |
हाँ | प्रति-साइट GeeTest पहचानकर्ता (स्थैतिक) |
challenge |
हाँ | गतिशील प्रति-सत्र चुनौती टोकन (ताज़ा प्राप्त किया जाना चाहिए) |
geetestApiServerSubdomain |
नहीं | कस्टम GeeTest API सर्वर सबडोमेन |
टिप:
gtपैरामीटर आमतौर पर पेज स्रोत या GeeTest के API के नेटवर्क अनुरोधों में पाया जाता है।challengeको हल करने से ठीक पहले साइट के चैलेंज एन्डपॉइंट से प्राप्त किया जाना चाहिए।
reCAPTCHA या Turnstile की तुलना में, GeeTest V3 में एक अतिरिक्त आवश्यक पैरामीटर (challenge) होता है और यह एक टोकन के बजाय तीन समाधान मान लौटाता है। चुनौती पैरामीटर की गतिशील प्रकृति का अर्थ है कि आप इसे कैश या पुनः उपयोग नहीं कर सकते।
ऊपर दिखाया गया API वर्कफ़्लो दिखाता है कि कैसे हल किया गया GeeTest V3 चुनौती प्राप्त करें। लेकिन आप इससे वास्तव में क्या करते हैं?
वास्तविक दुनिया के ऑटोमेशन में, चुनौती को हल करना केवल आधा काम है। आपको तीन समाधान मानों को लक्षित वेबसाइट पर सबमिट करना होगा -- ठीक वैसे ही जैसे ब्राउज़र करता है -- ताकि GeeTest सुरक्षा के पीछे डेटा या कार्रवाई अनलॉक हो सके।
यहाँ सामान्य पैटर्न है:
gt और challenge मानों के लिए चुनौती API एन्डपॉइंट को GET करेंgt, challenge, और websiteURL को CapSolver को भेजेंgeetest_challenge, geetest_validate, geetest_seccodeमैनुअल ट्रिगर -> चुनौती प्राप्त करें -> CapSolver GeeTest V3 -> HTTP POST अनुरोध (3 फ़ील्ड) -> यदि (सफलता जांचें) -> फ़ील्ड संपादित करें
https://example.com/api/geetest/register?t={{ Date.now() }})। यह gt और challenge लौटाता है।GeeTest V3https://example.com/login={{ $json.gt }}={{ $json.challenge }}geetest_challenge: ={{ $json.data.solution.challenge }}geetest_validate: ={{ $json.data.solution.validate }}geetest_seccode: ={{ $json.data.solution.seccode }}username, password)मुख्य अवधारणा: हर वेबसाइट GeeTest टोकन सबमिशन को अलग तरह से संभालती है। इस उदाहरण में, तीन मान फॉर्म-यूआरएल-एन्कोडेड POST बॉडी फ़ील्ड के रूप में भेजे जाते हैं। अन्य साइटें इन्हें JSON फ़ील्ड, क्वेरी पैरामीटर, या अलग सत्यापन एन्डपॉइंट से अपेक्षित कर सकती हैं। हमेशा साइट के असली फॉर्म सबमिशन का निरीक्षण करें (DevTools नेटवर्क टैब का उपयोग करके) यह देखने के लिए कि मानों को ठीक कैसे भेजना है।
ऊपर दिखाए गए सॉल्वर API और सबमिशन उदाहरण मूल पैटर्न दिखाते हैं: चुनौती प्राप्त करें, समाधान करें, तीन मान सबमिट करें, परिणाम संसाधित करें। निम्नलिखित वर्कफ़्लो इस पैटर्न का विस्तार करते हैं उत्पादन-तैयार उपयोग-परिदृश्यों के लिए -- प्रत्येक के पास डुअल ट्रिगर (अनुसूची + वेबहुक), स्थायी स्थिति ट्रैकिंग, और संरचित आउटपुट होता है।
| वर्कफ़्लो | उद्देश्य |
|---|---|
GeeTest V3 Scraping -- Price & Product Details |
हर 6 घंटे मूल्य और उत्पाद नाम स्क्रैप करता है, पिछले मानों से तुलना करता है जो staticData में सहेजे गए हैं, बदलाव पर अलर्ट करता है |
GeeTest V3 Account Login |
GeeTest संरक्षित साइट पर अपने खाते में लॉगिन करता है, चुनौती प्राप्त करके, इसे हल करके, फिर तीन समाधान मानों के साथ क्रेडेंशियल्स POST करके |
यह वर्कफ़्लो हर 6 घंटे (अनुसूची) या मांग पर (वेबहुक) एक उत्पाद पेज स्क्रैप करता है, एक ताज़ा GeeTest चुनौती प्राप्त करता है, इसे CapSolver के माध्यम से हल करता है, HTML नोड का उपयोग करके मूल्य निकालता है, और इसे पूर्व में संग्रहीत मान से तुलना करता है।
अनुसूची पथ:
हर 6 घंटे -> GeeTest चुनौती प्राप्त करें -> GeeTest V3 हल करें -> उत्पाद पेज प्राप्त करें
-> डेटा निकालें -> डेटा तुलना करें -> डेटा बदला? -> अलर्ट बनाएं / कोई बदलाव नहीं
वेबहुक पथ:
वेबहुक ट्रिगर -> GeeTest V3 [वेबहुक] हल करें -> उत्पाद पेज प्राप्त करें [वेबहुक]
-> डेटा निकालें -> डेटा तुलना करें -> डेटा बदला? -> अलर्ट बनाएं / कोई बदलाव नहीं -> वेबहुक का जवाब दें
प्रमुख व्यवहार:
gt + challenge मान प्राप्त करता है — इस URL को अपने लक्ष्य के अनुसार समायोजित करेंgt, challenge, और websiteURL प्रदान करने की अपेक्षा है — चुनौती प्राप्त करने की जरूरत नहींgeetest_challenge, geetest_validate, geetest_seccode) फॉर्म-यूआरएल-एन्कोडेड POST बॉडी फ़ील्ड के रूप में भेजे जाते हैं.product-price, h1) के माध्यम से मूल्य और उत्पाद नाम निकालता है$workflow.staticData.lastPrice पिछले मूल्य को निष्पादनों के बीच बनाए रखता हैdeal) और बढ़ोतरी (गंभीरता: info) का पता लगाती है{
"nodes": [
{
"parameters": {
"content": "## GeeTest V3 स्क्रैपिंग — मूल्य और उत्पाद मॉनिटर\n\n### यह कैसे काम करता है\n\n1. इसे अनुसूची या वेबहुक के माध्यम से शुरू किया जाता है।\n2. उत्पाद पेज तक पहुँचने के लिए GeeTest V3 चुनौती हल करता है।\n3. वेबसाइट से उत्पाद डेटा प्राप्त करता है और निकालता है।\n4. वर्तमान उत्पाद डेटा की तुलना पिछली जानकारी से करता है।\n5. यदि बदलाव पाए जाते हैं तो अलर्ट भेजता है या यदि नहीं तो स्थिति दर्ज करता है।\n6. वेबहुक ट्रिगर के लिए अलर्ट या स्थिति के साथ प्रतिक्रिया देता है।\n\n### सेटअप चरण\n\n- [ ] हर 6 घंटे जांच के लिए अनुसूचक सेट करें।\n- [ ] मांग पर जांच के लिए वेबहुक URL कॉन्फ़िगर करें।\n- [ ] GeeTest V3 चुनौती के लिए एंडपॉइंट निर्दिष्ट करें।\n- [ ] सभी HTTP अनुरोधों के लिए प्रमाणीकरण सेट करें।\n\n### अनुकूलन\n\nमॉनिटरिंग आवश्यकताओं के अनुसार स्क्रैपिंग आवृत्ति या वेबहुक सेटिंग्स समायोजित करें।",
"width": 480,
"height": 896
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1312,
-272
],
"id": "e0f2ca3b-c82c-4e02-a1f2-0126009ccf41",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## अनुसूचित GeeTest समाधान\n\nहर 6 घंटे ट्रिगर होकर GeeTest चुनौती समाधान शुरू करता है।",
"width": 800,
"height": 272,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-752,
-112
],
"id": "109c0516-db54-4076-b156-731e06998809",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## अनुसूचित उत्पाद प्राप्ति\n\nअनुसूची पर GeeTest चुनौती हल होने के बाद उत्पाद पेज प्राप्त करता है।",
"width": 496,
"height": 304,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
160,
-128
],
"id": "3852071c-406e-46bb-88ce-2f59499bbaa8",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "## डेटा तुलना और अलर्ट\n\nप्राप्त डेटा को प्रोसेस करता है, तुलना करता है और आवश्यक होने पर अलर्ट सेट करता है।",
"width": 704,
"height": 464,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
752,
-272
],
"id": "8d18e6c7-a363-4a33-a444-410878ed0ae2",
"name": "Sticky Note3"
},
{
"parameters": {
"content": "## वेबहुक GeeTest समाधान\n\nवेबहुक ट्रिगर पर GeeTest चुनौती हल करता है।",
"width": 800,
"height": 272,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-752,
320
],
"id": "9e1792c6-358e-4f49-abd8-6b15d33b3271",
"name": "Sticky Note4"
},
{
"parameters": {
"content": "## वेबहुक उत्पाद प्राप्ति\n\nवेबहुक के माध्यम से GeeTest हल होने के बाद उत्पाद पेज प्राप्त करता है।",
"width": 496,
"height": 304,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
160,
304
],
"id": "405f557c-1b5d-4e73-89c6-b22d24f69699",
"name": "Sticky Note5"
},
{
"parameters": {
"content": "## वेबहुक डेटा तुलना और प्रतिक्रिया\n\nवेबहुक ट्रिगर के द्वारा डेटा की तुलना करता है, अलर्ट सेट करता है, और प्रतिक्रिया देता है।",
"width": 720,
"height": 544,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
752,
224
],
"id": "9b45fa4b-2241-4926-ac7c-647733bde20e",
"name": "Sticky Note6"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 6
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
-704,
0
],
"id": "s-801",
"name": "हर 6 घंटे"
},
{
"parameters": {
"url": "=https://YOUR-TARGET-SITE.com/api/geetest/register?t={{ Date.now() }}",
"options": {
"response": {
"response": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
-400,
0
],
"id": "s-802",
"name": "GeeTest चुनौती प्राप्त करें"
},
{
"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": "s-803",
"name": "GeeTest V3 हल करें",
"credentials": {
"capSolverApi": {
"id": "BeBFMAsySMsMGeE9",
"name": "CapSolver खाता"
}
}
},
{
"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, जैसे 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": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
208,
0
],
"id": "s-804",
"name": "उत्पाद पेज प्राप्त करें"
},
{
"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": "s-805",
"name": "डेटा निकालें"
},
{
"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": "s-806",
"name": "डेटा तुलना करें"
},
{
"parameters": {
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"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": "s-807",
"name": "डेटा बदला?"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "a1",
"name": "alert",
"value": "=मूल्य {{ $json.direction }} {{ $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": [
1312,
-160
],
"id": "s-808",
"name": "अलर्ट बनाएं"
},
{
"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": [
1312,
32
],
"id": "s-809",
"name": "कोई बदलाव नहीं"
},
{
"parameters": {
"httpMethod": "POST",
"path": "price-monitor-geetest-v3",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-704,
432
],
"id": "s-810",
"name": "वेबहुक ट्रिगर",
"webhookId": "s-810-webhook",
"onError": "continueRegularOutput"
},
{
"parameters": {
"operation": "GeeTest V3",
"websiteURL": "={{ $json.body.websiteURL }}",
"gt": "={{ $json.body.gt }}",
"challenge": "={{ $json.body.challenge }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-96,
432
],
"id": "s-812",
"name": "GeeTest V3 हल करें [वेबहुक]",
"credentials": {
"capSolverApi": {
"id": "BeBFMAsySMsMGeE9",
"name": "CapSolver खाता"
}
}
},
{
"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, जैसे 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": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
208,
432
],
"id": "s-813",
"name": "उत्पाद पेज प्राप्त करें [वेबहुक]"
},
{
"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": "s-814",
"name": "डेटा निकालें [वेबहुक]"
},
{
"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,
512
],
"id": "s-815",
"name": "डेटा तुलना करें [वेबहुक]"
},
{
"parameters": {
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"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": [
976,
512
],
"id": "s-816",
"name": "डेटा बदला? [वेबहुक]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "a4",
"name": "alert",
"value": "=मूल्य {{ $json.direction }} {{ $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": [
1136,
336
],
"id": "s-817",
"name": "अलर्ट बनाएं [वेबहुक]"
},
{
"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": [
1136,
608
],
"id": "s-818",
"name": "कोई बदलाव नहीं [वेबहुक]"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
1328,
480
],
"id": "s-819",
"name": "वेबहुक को प्रतिक्रिया दें"
}
],
"connections": {
"हर 6 घंटे": {
"main": [
[
{
"node": "GeeTest चुनौती प्राप्त करें",
"type": "main",
"index": 0
}
]
]
},
"GeeTest चुनौती प्राप्त करें": {
"main": [
[
{
"node": "GeeTest V3 हल करें",
"type": "main",
"index": 0
}
]
]
},
"GeeTest V3 हल करें": {
"main": [
[
{
"node": "उत्पाद पेज प्राप्त करें",
"type": "main",
"index": 0
}
]
]
},
"उत्पाद पेज प्राप्त करें": {
"main": [
[
{
"node": "डेटा निकालें",
"type": "main",
"index": 0
}
]
]
},
"डेटा निकालें": {
"main": [
[
{
"node": "डेटा तुलना करें",
"type": "main",
"index": 0
}
]
]
},
"डेटा तुलना करें": {
"main": [
[
{
"node": "डेटा बदला?",
"type": "main",
"index": 0
}
]
]
},
"डेटा बदला?": {
"main": [
[
{
"node": "अलर्ट बनाएं",
"type": "main",
"index": 0
}
],
[
{
"node": "कोई बदलाव नहीं",
"type": "main",
"index": 0
}
]
]
},
"वेबहुक ट्रिगर": {
"main": [
[
{
"node": "GeeTest V3 हल करें [वेबहुक]",
"type": "main",
"index": 0
}
]
]
},
"GeeTest V3 हल करें [वेबहुक]": {
"main": [
[
{
"node": "उत्पाद पेज प्राप्त करें [वेबहुक]",
"type": "main",
"index": 0
}
]
]
},
"उत्पाद पेज प्राप्त करें [वेबहुक]": {
"main": [
[
{
"node": "डेटा निकालें [वेबहुक]",
"type": "main",
"index": 0
}
]
]
},
"डेटा निकालें [वेबहुक]": {
"main": [
[
{
"node": "डेटा तुलना करें [वेबहुक]",
"type": "main",
"index": 0
}
]
]
},
"डेटा तुलना करें [वेबहुक]": {
"main": [
[
{
"node": "डेटा बदला? [वेबहुक]",
"type": "main",
"index": 0
}
]
]
},
"डेटा बदला? [वेबहुक]": {
"main": [
[
{
"node": "अलर्ट बनाएं [वेबहुक]",
"type": "main",
"index": 0
}
],
[
{
"node": "कोई बदलाव नहीं [वेबहुक]",
"type": "main",
"index": 0
}
]
]
},
"अलर्ट बनाएं [वेबहुक]": {
"main": [
[
{
"node": "वेबहुक को प्रतिक्रिया दें",
"type": "main",
"index": 0
}
]
]
},
"कोई बदलाव नहीं [वेबहुक]": {
"main": [
[
{
"node": "वेबहुक को प्रतिक्रिया दें",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"meta": {
"instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
}
}
यह वर्कफ़्लो GeeTest V3-सुरक्षित साइट में लॉगिन को स्वचालित करता है। एक Set Login Config नोड सभी पैरामीटर केंद्रित करता है -- जिसमें गतिशील चुनौती प्राप्त करने के लिए challengeAPIURL शामिल है। प्रत्येक समाधान से पहले Fetch GeeTest Challenge नोड नई चुनौती मान प्राप्त करता है।
कार्यक्रम पथ:
हर 24 घंटे -> Set Login Config -> Fetch GeeTest Challenge -> Solve GeeTest V3
-> Submit Login -> लॉगिन सफल? -> Mark Login Success / Mark Login Failed
Webhook पथ:
Webhook Trigger -> Solve GeeTest V3 [Webhook] -> Submit Login [Webhook]
-> लॉगिन सफल? -> Mark Login Success / Mark Login Failed -> Webhook को उत्तर दें
मुख्य व्यवहार:
challengeAPIURL (ताज़ा gt + challenge मान प्राप्त करने का अंत बिंदु) और gt (प्रति साइट स्थिर) शामिल हैं। प्रत्येक समाधान प्रयास से पहले एक Fetch GeeTest Challenge नोड नई चुनौती प्राप्त करता है।gt, challenge, websiteURL, क्रेडेंशियल्स, और loginActionURL प्रदान करता है -- कोई चुनौती प्राप्त करने की आवश्यकता नहींgeetest_challenge, geetest_validate, geetest_seccodewebsiteKey या tokenFieldName नहीं -- GeeTest V3 gt + challenge का उपयोग करता है और हमेशा तीन निश्चित फ़ील्ड नामों के माध्यम से सबमिट करता हैstatusCode < 400 और प्रतिक्रिया बॉडी में कॉन्फ़िगर किए गए successMarker की उपस्थिति दोनों का मूल्यांकन करती है{
"nodes": [
{
"parameters": {
"content": "## GeeTest V3 खाता लॉगिन\n\n### यह कैसे काम करता है\n\n1. हर 24 घंटे निर्धारित वर्कफ़्लो शुरू करता है और लॉगिन सेटिंग्स कॉन्फ़िगर करता है।\n2. निर्धारित प्रक्रियाओं के लिए GeeTest चुनौती प्राप्त करता है।\n3. निर्धारित और वेबहुक ट्रिगर के लिए GeeTest V3 चुनौती हल करता है।\n4. लॉगिन अनुरोध सबमिट करता है और सफलता या विफलता का मूल्यांकन करता है।\n5. लॉगिन प्रयास को मार्क करता है और यदि वेबहुक द्वारा ट्रिगर किया गया हो तो उपयुक्त प्रतिक्रिया भेजता है।\n\n### सेटअप चरण\n\n- [ ] 'हर 24 घंटे' नोड के लिए अनुसूची ट्रिगर कॉन्फ़िगर करें।\n- [ ] 'Webhook Trigger' नोड के लिए वेबहुक URL सेट करें।\n- [ ] 'Set Login Config [Schedule]' नोड के लिए GeeTest क्रेडेंशियल्स और API विवरण सही से सेट करें।\n- [ ] यह सुनिश्चित करें कि 'Solve GeeTest V3' नोड्स कैपसल्वर विवरण के साथ ठीक से कॉन्फ़िगर हों।\n\n### अनुकूलन\n\nउपयोगकर्ताओं को अपनी लॉगिन कॉन्फ़िगरेशन के अनुसार URLs और फ़ील्ड नामों को कस्टमाइज़ करना पड़ सकता है।",
"width": 480,
"height": 896
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1552,
-208
],
"id": "19c01225-b35f-4476-abfd-dda858428a96",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## निर्धारित ट्रिगर और कॉन्फ़िग\n\nनिर्धारित वर्कफ़्लो प्रारंभ करता है और लॉगिन कॉन्फ़िगरेशन विवरण सेट करता है।",
"width": 496,
"height": 304,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-992,
-128
],
"id": "94d1acf4-bc74-4be4-9f13-802f3d319dee",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## निर्धारित चुनौती समाधान\n\nGeeTest चुनौती प्राप्त करता है और निर्धारित वर्कफ़्लो के लिए हल करता है और लॉगिन सबमिट करता है।",
"width": 800,
"height": 272,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-384,
-112
],
"id": "14b743de-a392-410a-883c-0cb4c121ea08",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "## निर्धारित लॉगिन मूल्यांकन\n\nलॉगिन सफलता या विफलता जांचता है और निर्धारित वर्कफ़्लो के लिए परिणाम चिह्नित करता है।",
"width": 496,
"height": 512,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
528,
-208
],
"id": "1333cc41-cd60-4115-a756-9ad3b275d66e",
"name": "Sticky Note3"
},
{
"parameters": {
"content": "## वेबहुक ट्रिगर लॉगिन\n\nवेबहुक से ट्रिगर हुए GeeTest चुनौती समाधान और लॉगिन सबमिशन को संभालता है।",
"width": 1408,
"height": 272,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-992,
320
],
"id": "844d2b79-b221-424f-bd78-890fdc28bde8",
"name": "Sticky Note4"
},
{
"parameters": {
"content": "## वेबहुक लॉगिन मूल्यांकन\n\nवेबहुक आधारित लॉगिन की सफलता या विफलता का मूल्यांकन करता है और प्रतिक्रिया भेजता है।",
"width": 704,
"height": 464,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
528,
336
],
"id": "33640ec5-758d-47a3-b20c-473c3d125686",
"name": "Sticky Note5"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 24
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
-944,
0
],
"id": "l-821",
"name": "Every 24 Hours"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "l1",
"name": "websiteURL",
"value": "https://YOUR-LOGIN-PAGE.com",
"type": "string"
},
{
"id": "l2",
"name": "gt",
"value": "YOUR_GT_PARAMETER_HERE",
"type": "string"
},
{
"id": "l3",
"name": "challengeAPIURL",
"value": "https://YOUR-LOGIN-PAGE.com/api/geetest/register",
"type": "string"
},
{
"id": "l4",
"name": "usernameField",
"value": "email",
"type": "string"
},
{
"id": "l5",
"name": "passwordField",
"value": "password",
"type": "string"
},
{
"id": "l6",
"name": "usernameValue",
"value": "your-email@example.com",
"type": "string"
},
{
"id": "l7",
"name": "passwordValue",
"value": "YOUR_ACCOUNT_PASSWORD",
"type": "string"
},
{
"id": "l8",
"name": "successMarker",
"value": "account-dashboard",
"type": "string"
},
{
"id": "l9",
"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": [
-640,
0
],
"id": "l-822",
"name": "Set Login Config [Schedule]"
},
{
"parameters": {
"url": "={{ $json.challengeAPIURL }}?t={{ Date.now() }}",
"options": {
"response": {
"response": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
-336,
0
],
"id": "l-823",
"name": "Fetch GeeTest Challenge [Schedule]"
},
{
"parameters": {
"operation": "GeeTest V3",
"websiteURL": "={{ $('Set Login Config [Schedule]').item.json.websiteURL }}",
"gt": "={{ $json.gt }}",
"challenge": "={{ $json.challenge }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-32,
0
],
"id": "l-824",
"name": "Solve GeeTest V3 [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": "={{ $('Set Login Config [Schedule]').item.json.usernameField }}",
"value": "={{ $('Set Login Config [Schedule]').item.json.usernameValue }}"
},
{
"name": "={{ $('Set Login Config [Schedule]').item.json.passwordField }}",
"value": "={{ $('Set Login Config [Schedule]').item.json.passwordValue }}"
},
{
"name": "geetest_challenge",
"value": "={{ $json.data.solution.challenge }}"
},
{
"name": "geetest_validate",
"value": "={{ $json.data.solution.validate }}"
},
{
"name": "geetest_seccode",
"value": "={{ $json.data.solution.seccode }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": true,
"neverError": true
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
272,
0
],
"id": "l-825",
"name": "Submit Login [Schedule]"
},
{
"parameters": {
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": false,
"typeValidation": "strict"
},
"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": "l-826",
"name": "Login Successful? [Schedule]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "ls1",
"name": "action",
"value": "account_login",
"type": "string"
},
{
"id": "ls2",
"name": "status",
"value": "success",
"type": "string"
},
{
"id": "ls3",
"name": "message",
"value": "Configured account login flow succeeded",
"type": "string"
},
{
"id": "ls4",
"name": "checkedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
880,
-80
],
"id": "l-827",
"name": "Mark Login Success [Schedule]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "lf1",
"name": "action",
"value": "account_login",
"type": "string"
},
{
"id": "lf2",
"name": "status",
"value": "failed",
"type": "string"
},
{
"id": "lf3",
"name": "statusCode",
"value": "={{ $json.statusCode }}",
"type": "number"
},
{
"id": "lf4",
"name": "message",
"value": "Login response did not match the configured success marker",
"type": "string"
},
{
"id": "lf5",
"name": "checkedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
880,
128
],
"id": "l-828",
"name": "Mark Login Failed [Schedule]"
},
{
"parameters": {
"httpMethod": "POST",
"path": "account-login-geetest-v3",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-944,
432
],
"id": "l-829",
"name": "Webhook Trigger",
"webhookId": "l-829-webhook",
"onError": "continueRegularOutput"
},
{
"parameters": {
"operation": "GeeTest V3",
"websiteURL": "={{ $json.body.websiteURL }}",
"gt": "={{ $json.body.gt }}",
"challenge": "={{ $json.body.challenge }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-32,
432
],
"id": "l-831",
"name": "Solve GeeTest V3 [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": "geetest_challenge",
"value": "={{ $json.data.solution.challenge }}"
},
{
"name": "geetest_validate",
"value": "={{ $json.data.solution.validate }}"
},
{
"name": "geetest_seccode",
"value": "={{ $json.data.solution.seccode }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": true,
"neverError": true
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
272,
432
],
"id": "l-832",
"name": "Submit Login [Webhook]"
},
{
"parameters": {
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": false,
"typeValidation": "strict"
},
"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,
528
],
"id": "l-833",
"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": [
880,
448
],
"id": "l-834",
"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,
640
],
"id": "l-835",
"name": "Mark Login Failed [Webhook]"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
1088,
496
],
"id": "l-836",
"name": "Respond to Webhook"
}
],
"connections": {
"Every 24 Hours": {
"main": [
[
{
"node": "Set Login Config [Schedule]",
"type": "main",
"index": 0
}
]
]
},
"Set Login Config [Schedule]": {
"main": [
[
{
"node": "Fetch GeeTest Challenge [Schedule]",
"type": "main",
"index": 0
}
]
]
},
"Fetch GeeTest Challenge [Schedule]": {
"main": [
[
{
"node": "Solve GeeTest V3 [Schedule]",
"type": "main",
"index": 0
}
]
]
},
"Solve GeeTest V3 [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 GeeTest V3 [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Solve GeeTest V3 [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"
}
}
आपने सीखा कि कैसे GeeTest V3-सॉल्विंग API और प्रोडक्शन-रेडी स्क्रैपिंग और लॉगिन वर्कफ़्लोज़ को n8n और CapSolver का उपयोग करके बनाया जाता है -- कोई पारंपरिक कोडिंग आवश्यक नहीं है।
इस गाइड में, हमने कवर किया:
gt, challenge, और चैलेंज API एंडपॉइंट)challenge डायनामिक होता है और प्रत्येक सॉल्व से पहले ताज़ा प्राप्त किया जाना चाहिए, और सॉल्यूशन 1 के बजाय 3 मान लौटाता हैमुख्य निष्कर्ष: GeeTest V3 में reCAPTCHA या Turnstile की तुलना में एक अतिरिक्त कदम होता है -- आपको प्रत्येक सॉल्व से पहले ताज़ा challenge मान प्राप्त करना होगा। सॉल्यूशन भी एक टोकन के बजाय 3 फ़ील्ड्स (geetest_challenge, geetest_validate, geetest_seccode) होती हैं।
टिप: ये वर्कफ़्लोज़ Schedule + Webhook ट्रिगर्स का उपयोग करते हैं, लेकिन आप ट्रिगर नोड को किसी भी n8n ट्रिगर से बदल सकते हैं -- मैनुअल, ऐप इवेंट, फॉर्म सबमिशन आदि। डेटा प्राप्त करने के बाद, n8n के बिल्ट-इन नोड्स का उपयोग करके परिणामों को Google Sheets, डेटाबेस, क्लाउड स्टोरेज में सेव करें, या Telegram/Slack/Email के माध्यम से अलर्ट भेजें।
शुरू करने के लिए तैयार हैं? CapSolver के लिए साइन अप करें और बोनस कोड n8n का उपयोग करके अपनी पहली रिचार्ज पर अतिरिक्त 8% बोनस पाएं!

GeeTest V3 एक चैलेंज-रिस्पांस CAPTCHA सिस्टम है जो उपयोगकर्ताओं को इंटरएक्टिव टास्क जैसे स्लाइड पहेली, आइकन क्लिक, और शब्द मेल के माध्यम से सत्यापित करता है। यह दो मुख्य पैरामीटर का उपयोग करता है: gt (प्रत्येक साइट के लिए स्थिर) और challenge (प्रत्येक सत्र के लिए डायनामिक), और एक टोकन के बजाय तीन समाधान मान लौटाता है।
कीमत उपयोग पर निर्भर करती है। वर्तमान GeeTest दरों के लिए CapSolver प्राइसिंग पेज देखें।
GeeTest V3 चैलेंज आमतौर पर 5-15 सेकंड में हल हो जाते हैं, यह चैलेंज के प्रकार और जटिलता पर निर्भर करता है।
हाँ! यह वर्कफ़्लो सेल्फ-होस्टेड n8n और n8n क्लाउड दोनों के साथ काम करता है। CapSolver नोड पहले से ही एक आधिकारिक इंटीग्रेशन के रूप में उपलब्ध है -- बस अपने API क्रेडेंशियल्स जोड़ें।
gt और चैलेंज API एंडपॉइंट कैसे खोजूं?DevTools (F12) खोलें -> नेटवर्क टैब और URL में gt= वाले अनुरोध या "gt" और "challenge" JSON फ़ील्ड वाले रिस्पॉन्स देखें। सामान्य एंडपॉइंट पैटर्न में /api/geetest/register, /gt/register-slide, और /captcha?gt=... शामिल हैं।
GeeTest V3 gt + challenge पैरामीटर का उपयोग करता है और प्रत्येक सॉल्व से पहले ताज़ा challenge प्राप्त करना आवश्यक होता है। GeeTest V4 इसके बजाय captcha_id पैरामीटर का उपयोग करता है और इसकी API संरचना अलग है। यदि आप पेज सोर्स में captcha_id देखते हैं, तो आप V4 से काम कर रहे हैं, V3 से नहीं।
यह कई कारणों से हो सकता है। सबसे पहले, चैलेंज जल्दी समाप्त हो जाता है (60-120 सेकंड) -- सुनिश्चित करें कि आप प्रत्येक सॉल्व से ठीक पहले ताज़ा चैलेंज प्राप्त कर रहे हैं और समाधान तुरंत सबमिट कर रहे हैं। दूसरा, तीन फॉर्म फ़ील्ड नामों की जांच करें कि वे साइट की अपेक्षा के अनुरूप हों: अधिकांश साइटें geetest_challenge, geetest_validate, और geetest_seccode का उपयोग करती हैं, लेकिन कुछ अलग नाम इस्तेमाल कर सकते हैं। DevTools -> नेटवर्क टैब में वास्तविक फॉर्म सबमिशन देखें। तीसरा, कुछ साइटें वैकल्पिक geetestApiServerSubdomain पैरामीटर माँगती हैं। यदि समाधान अभी भी अस्वीकार किया जाता है, तो साइट-विशिष्ट सहायता के लिए CapSolver सपोर्ट से संपर्क करें।
CapSolver और n8n का उपयोग करके eCAPTCHA v2/v3 सॉल्वर API बनाएं। बिना कोडिंग के टोकन को ऑटोमेट करने, वेबसाइट पर सबमिट करने और सुरक्षित डेटा निकालने का तरीका सीखें।

CapSolver और n8n का उपयोग करके Cloudflare Turnstile को हल करने के लिए एक API बनाएं। सीखें कि टोकन सॉल्विंग को कैसे ऑटोमेट करें, उसे वेबसाइट पर सबमिट करें, और बिना कोडिंग के संरक्षित डेटा निकालें।
