
Rajinder Singh
Deep Learning Researcher

Cloudflare Turnstile आधुनिक वेबसाइटों के लिए तेजी से पसंदीदा CAPTCHA विकल्प बनता जा रहा है। पारंपरिक CAPTCHA के विपरीत जो उपयोगकर्ताओं को छवि पहेलियाँ हल करने के लिए मजबूर करते हैं, Turnstile पृष्ठभूमि में चुपचाप चलता है — जिससे मानक स्वचालन उपकरणों के साथ इसका पता लगाना और इसे बायपास करना कठिन हो जाता है।
क्या होगा यदि आप अपने n8n वर्कफ़्लो के भीतर Turnstile को स्वचालित रूप से हल कर सकें — चाहे आप एक पुन: प्रयोज्य सॉल्वर एपीआई बना रहे हों, एक कैप्चा-संरक्षित साइट को स्क्रैप कर रहे हों, या एक लॉगिन फ़ॉर्म को स्वचालित कर रहे हों — यह सब पारंपरिक कोड की एक भी पंक्ति लिखे बिना?
इस गाइड में, आप सीखेंगे कि Cloudflare Turnstile चुनौतियों को मांग पर हल करने के लिए n8n (एक विज़ुअल वर्कफ़्लो ऑटोमेशन टूल) को CapSolver (एक AI-संचालित कैप्चा समाधान सेवा) के साथ कैसे संयोजित करें — या तो एक स्टैंडअलोन एपीआई एंडपॉइंट के रूप में या किसी भी स्वचालन वर्कफ़्लो के भीतर एक कदम के रूप में।
आप क्या बनाएंगे:
सॉल्वर एपीआई — पुन: प्रयोज्य एंडपॉइंट जिन्हें आपके अन्य टूल कॉल कर सकते हैं:
प्रत्यक्ष-उपयोग वर्कफ़्लो — CapSolver को बड़े स्वचालन के भीतर एक कदम के रूप में एम्बेड किया गया है:
Cloudflare Turnstile एक CAPTCHA विकल्प है जो ब्राउज़र संकेतों का उपयोग करके आगंतुकों को स्वचालित रूप से सत्यापित करता है — कोई पहेली नहीं, कोई चेकबॉक्स नहीं। यह फ़ॉर्म (लॉगिन, साइनअप, चेकआउट) में एम्बेडेड एक छोटे विजेट के रूप में दिखाई देता है और तीन मोड में आता है: प्रबंधित (Managed), गैर-इंटरैक्टिव (Non-Interactive), और अदृश्य (Invisible)। समाधान के दृष्टिकोण से, मोड मायने नहीं रखता — आपको हमेशा समान दो पैरामीटर की आवश्यकता होती है: websiteURL और websiteKey।

Cloudflare Challenge के समान नहीं। यदि आपको एक पूर्ण-पृष्ठ "सुरक्षा सत्यापन कर रहा है..." स्क्रीन दिखाई देती है, तो वह एक Cloudflare Challenge है, Turnstile नहीं — इसके लिए एक अलग सॉल्वर की आवश्यकता होती है।
शुरू करने से पहले, सुनिश्चित करें कि आपके पास निम्नलिखित हैं:
महत्वपूर्ण: सुनिश्चित करें कि आपके CapSolver खाते में पर्याप्त शेष राशि है। Turnstile समाधान कार्य उपयोग के आधार पर क्रेडिट का उपभोग करते हैं।
CapSolver n8n में एक आधिकारिक एकीकरण के रूप में उपलब्ध है — किसी सामुदायिक नोड स्थापना की आवश्यकता नहीं है। आप अपने वर्कफ़्लो का निर्माण करते समय इसे सीधे नोड पैनल में पा सकते हैं।
चूंकि यह एक आधिकारिक एकीकरण है, आपको n8n में एक क्रेडेंशियल बनाना होगा ताकि CapSolver नोड आपके खाते के साथ प्रमाणित हो सके।
अपने n8n इंस्टेंस पर जाएं और सेटिंग्स (Settings) → क्रेडेंशियल (Credentials) पर नेविगेट करें। आपको यहां अपने सभी कॉन्फ़िगर किए गए क्रेडेंशियल दिखाई देंगे।

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

महत्वपूर्ण: आपके वर्कफ़्लो में प्रत्येक CapSolver नोड इस क्रेडेंशियल को संदर्भित करेगा। आपको इसे केवल एक बार बनाने की आवश्यकता है — आपके सभी सॉल्वर वर्कफ़्लो समान क्रेडेंशियल साझा करेंगे।
अब आप अपना Turnstile सॉल्वर वर्कफ़्लो बनाने के लिए तैयार हैं!
यह वर्कफ़्लो एक POST एपीआई एंडपॉइंट बनाता है जो Turnstile पैरामीटर स्वीकार करता है और एक हल किया गया टोकन लौटाता है।

वर्कफ़्लो में चार नोड होते हैं:
$json.error खाली नहीं है){"error": "..."}| सेटिंग | मान |
|---|---|
| HTTP विधि | POST |
| पथ | solver-turnstile |
| जवाब दें | रिस्पांस नोड (Response Node) |
यह एक एंडपॉइंट बनाता है: https://your-n8n-instance.com/webhook/solver-turnstile
| पैरामीटर | मान | विवरण |
|---|---|---|
| ऑपरेशन | Cloudflare Turnstile |
Cloudflare Turnstile पर सेट होना चाहिए |
| प्रकार | AntiTurnstileTaskProxyLess |
इस कार्य प्रकार को प्रॉक्सी की आवश्यकता नहीं है |
| वेबसाइट URL | {{ $json.body.websiteURL }} |
Turnstile विजेट वाले पृष्ठ का URL |
| वेबसाइट कुंजी | {{ $json.body.websiteKey }} |
Turnstile साइट कुंजी |
| metadata.action | (वैकल्पिक) | कुछ साइटों को Turnstile चुनौती के लिए एक विशिष्ट एक्शन स्ट्रिंग की आवश्यकता होती है |
| metadata.cdata | (वैकल्पिक) | कस्टम डेटा जो कुछ साइटें सत्यापन के लिए Turnstile विजेट को पास करती हैं |
कुछ साइटों को metadata.action और/या metadata.cdata की भी आवश्यकता होती है — आप इन्हें नोड के वैकल्पिक (Optional) अनुभाग के तहत जोड़ सकते हैं। इस नोड में अपने CapSolver क्रेडेंशियल (CapSolver credentials) का भी चयन करें।
| सेटिंग | मान |
|---|---|
| शर्त | ={{ $json.error }} खाली नहीं है |
| सही शाखा | त्रुटि (Error) वेबहुक को जवाब दें नोड पर रूट करता है |
| गलत शाखा | सफलता (Success) वेबहुक को जवाब दें नोड पर रूट करता है |
यह कैनवास पर त्रुटि पथ को स्पष्ट करता है। CapSolver नोड त्रुटि पर जारी रहता है (onError: continueRegularOutput), इसलिए विफलताएं वर्कफ़्लो को क्रैश करने के बजाय { "error": "..." } के रूप में यहां आती हैं।
सफलता शाखा (Success branch) (CapSolver त्रुटि? का गलत आउटपुट):
| सेटिंग | मान |
|---|---|
| के साथ जवाब दें | JSON |
| प्रतिक्रिया निकाय | ={{ JSON.stringify($json.data) }} |
अपने वेबहुक एंडपॉइंट पर एक POST अनुरोध भेजें:
curl -X POST https://your-n8n-instance.com/webhook/solver-turnstile \
-H "Content-Type: application/json" \
-d '{
"websiteURL": "https://example.com/login",
"websiteKey": "0x4AAAAAAADV8V8V8V8V8V8V"
}'
अपेक्षित प्रतिक्रिया:
{
"taskId": "abc123...",
"solution": {
"token": "0.XXXXXXXXXXXXXXXX..."
},
"status": "ready"
}
नीचे दिए गए JSON को कॉपी करें और इसे n8n में मेनू (Menu) → JSON से आयात करें (Import from JSON) के माध्यम से आयात करें:
{
"nodes": [
{
"parameters": {
"content": "## Turnstile — सॉल्वर एपीआई\n\n### यह कैसे काम करता है\n- वेबहुक द्वारा ट्रिगर किया गया\n- CapSolver: Cloudflare Turnstile\n- सशर्त शाखा\n- वेबहुक को जवाब दें\n- वेबहुक को जवाब दें\n\n### सेटअप\n- सेटिंग्स → क्रेडेंशियल के तहत अपनी **CapSolver** एपीआई कुंजी जोड़ें\n- प्लेसहोल्डर मान कॉन्फ़िगर करें\n- वर्कफ़्लो को सक्रिय करें",
"height": 448,
"width": 480
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-800,
-176
],
"id": "5ffd9cef-8202-4382-b878-6c99193e85c9",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## सॉल्वर अनुरोध प्राप्त करें और संसाधित करें\n\nआने वाले सॉल्वर अनुरोधों को संभालता है और उन्हें Cloudflare Turnstile के माध्यम से संसाधित करता है।",
"height": 336,
"width": 496,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-240,
-176
],
"id": "6ad0812b-7141-41e4-96d6-e72e08a24405",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## सॉल्वर प्रतिक्रिया का मूल्यांकन करें\n\nसॉल्वर प्रतिक्रिया में त्रुटियों की जाँच करता है और तदनुसार प्रवाह को निर्देशित करता है।",
"height": 336,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
352,
-176
],
"id": "8839e65a-8735-4135-9b0f-07ac081ebd70",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "## वेबहुक को जवाब दें\n\nसॉल्वर की सफलता या विफलता के आधार पर वेबहुक को एक प्रतिक्रिया भेजता है।",
"height": 528,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
656,
-256
],
"id": "2fec67ea-a216-4717-8336-2aa060c352ab",
"name": "Sticky Note3"
},
{
"parameters": {
"httpMethod": "POST",
"path": "solver-turnstile",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-192,
0
],
"id": "137be4f0-1762-4f0c-b993-c512d27e35de",
"name": "Receive Solver Request",
"webhookId": "901bdfa1-308c-4145-87fb-9c1958914751"
},
{
"parameters": {
"operation": "Cloudflare Turnstile",
"websiteURL": "={{ $json.body.websiteURL }}",
"websiteKey": "={{ $json.body.websiteKey }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
112,
0
],
"id": "954ff1f0-d5de-4468-b0d1-fbce03676676",
"name": "Cloudflare Turnstile",
"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": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "CapSolver Error?"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify({ error: $json.error }) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
704,
-64
],
"id": "e1f2a3b4-c5d6-7890-abcd-123456789012",
"name": "Respond to Webhook (Error)"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json.data) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
704,
112
],
"id": "db264e2b-48ce-4887-9b2b-2b8077993c30",
"name": "Respond to Webhook"
}
],
"connections": {
"Receive Solver Request": {
"main": [
[
{
"node": "Cloudflare Turnstile",
"type": "main",
"index": 0
}
]
]
},
"Cloudflare Turnstile": {
"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
}
]
]
}
},
"meta": {
"instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
}
}
Turnstile सॉल्वर एपीआई एंडपॉइंट निम्नलिखित पैरामीटर स्वीकार करता है:
| पैरामीटर | आवश्यक | विवरण |
|---|---|---|
websiteURL |
हाँ | Turnstile विजेट होस्ट करने वाले पृष्ठ का URL |
websiteKey |
हाँ | Turnstile साइट कुंजी |
metadata.action |
नहीं | कुछ साइटों द्वारा Turnstile चुनौती के लिए आवश्यक एक्शन स्ट्रिंग |
metadata.cdata |
नहीं | कस्टम डेटा जो कुछ साइटें सत्यापन के लिए Turnstile विजेट को पास करती हैं |
टिप: आप पृष्ठ स्रोत का निरीक्षण करके या CapSolver ब्राउज़र एक्सटेंशन का उपयोग करके
websiteURLऔरwebsiteKeyकी पहचान कर सकते हैं।
reCAPTCHA की तुलना में, Turnstile सरल है — आपको केवल दो आवश्यक पैरामीटर की आवश्यकता है। कुछ साइटों को वैकल्पिक metadata.action या metadata.cdata फ़ील्ड की भी आवश्यकता हो सकती है — यदि टोकन स्वीकार नहीं किया जा रहा है तो इन्हें नोड के वैकल्पिक (Optional) अनुभाग में जोड़ें।
ऊपर दिया गया एपीआई वर्कफ़्लो दिखाता है कि एक हल किया गया Turnstile टोकन कैसे प्राप्त करें। लेकिन आप वास्तव में इसके साथ क्या करते हैं?
वास्तविक दुनिया के स्वचालन में, चुनौती को हल करना केवल आधा काम है। आपको लक्ष्य वेबसाइट पर टोकन सबमिट करना होगा — ठीक वैसे ही जैसे एक ब्राउज़र करेगा — Turnstile सुरक्षा के पीछे के डेटा या कार्रवाई को अनलॉक करने के लिए।
यहां सामान्य पैटर्न है:
cf-turnstile-response फ़ॉर्म फ़ील्ड के रूप में)उदाहरण: https://example.com/ — एक Turnstile-संरक्षित वेबसाइट
मैनुअल ट्रिगर → CapSolver Turnstile → HTTP POST अनुरोध → IF (सफलता की जाँच करें) → फ़ील्ड संपादित करें (डेटा निकालें)
Cloudflare Turnstilehttps://example.com/login0x4AAAAAAA... (पृष्ठ स्रोत का निरीक्षण करके इसे ढूंढें — देखें Turnstile पैरामीटर की पहचान कैसे करें)cf-turnstile-response फ़ॉर्म फ़ील्ड में भेजा जाता हैusername, password)मुख्य अवधारणा: प्रत्येक वेबसाइट टोकन सबमिशन को अलग तरह से संभालती है। इस उदाहरण में, टोकन एक
cf-turnstile-responseफ़ील्ड में जाता है।
ऊपर दिया गया सॉल्वर एपीआई और स्क्रैपिंग उदाहरण मुख्य पैटर्न दिखाते हैं: Turnstile को हल करें, टोकन सबमिट करें, परिणाम संसाधित करें। निम्नलिखित वर्कफ़्लो इस पैटर्न को उत्पादन-तैयार उपयोग मामलों तक विस्तारित करते हैं — प्रत्येक दोहरे ट्रिगर (शेड्यूल + वेबहुक), लगातार स्थिति ट्रैकिंग, और संरचित आउटपुट के साथ।
| वर्कफ़्लो | उद्देश्य |
|---|---|
Turnstile स्क्रैपिंग — मूल्य और उत्पाद विवरण — CapSolver + शेड्यूल + वेबहुक |
हर 6 घंटे में मूल्य और उत्पाद नाम को स्क्रैप करता है, staticData में संग्रहीत पिछले मानों के खिलाफ तुलना करता है, परिवर्तनों पर अलर्ट करता है |
Turnstile खाता लॉगिन — CapSolver + शेड्यूल + वेबहुक |
पहले हल करके, फिर टोकन के साथ क्रेडेंशियल POST करके कैप्चा-संरक्षित साइट पर अपने खाते में लॉग इन करता है |
यह वर्कफ़्लो हर 6 घंटे (शेड्यूल) या मांग पर (वेबहुक) एक उत्पाद पृष्ठ को स्क्रैप करता है, HTML नोड का उपयोग करके मूल्य निकालता है, और इसे पहले से संग्रहीत मान के खिलाफ तुलना करता है।
शेड्यूल पथ:
हर 6 घंटे → कैप्चा हल करें → उत्पाद पृष्ठ प्राप्त करें → डेटा निकालें
→ डेटा की तुलना करें → डेटा बदला? → अलर्ट बनाएं / कोई बदलाव नहीं
मुख्य व्यवहार:
cf-turnstile-response हेडर के रूप में भेजा जाता है (अपनी साइट के अपेक्षित प्रारूप के अनुकूल — कुछ साइटें एक अलग फ़ील्ड नाम का उपयोग कर सकती हैं).product-price, h1) के माध्यम से मूल्य और उत्पाद नाम निकालता है$workflow.staticData.lastPrice पिछले मूल्य को निष्पादन के दौरान बनाए रखता हैdeal) और वृद्धि (increased) (गंभीरता: info) दोनों का पता लगाती है{
"nodes": [
{
"parameters": {
"content": "## Turnstile स्क्रैपिंग — मूल्य और उत्पाद विवरण — CapSolver + शेड्यूल + वेबहुक\n\n### यह कैसे काम करता है\n- scheduleTrigger द्वारा ट्रिगर किया गया\n- वेबहुक द्वारा ट्रिगर किया गया\n- सेट करता है: websiteURL, websiteKey\n- CapSolver: Cloudflare Turnstile\n- GET अनुरोध\n- HTML निकालें\n- कस्टम कोड\n\n### सेटअप\n- सेटिंग्स → क्रेडेंशियल के तहत अपनी **CapSolver** एपीआई कुंजी जोड़ें\n- प्लेसहोल्डर मान कॉन्फ़िगर करें\n- वर्कफ़्लो को सक्रिय करें",
"height": 928,
"width": 480
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1312,
-272
],
"id": "e7600f37-30e2-414c-8482-136e850c7767",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## अनुसूचित स्क्रैपिंग सेटअप\n\nहर 6 घंटे में स्क्रैपिंग प्रक्रिया को ट्रिगर करता है और लक्ष्य सेटिंग्स को कॉन्फ़िगर करता है।",
"height": 288,
"width": 496,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-752,
-160
],
"id": "b5976b58-4e25-4db2-8968-b918d51ae3db",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## अनुसूचित स्क्रैपिंग निष्पादन\n\nTurnstile को हल करता है, उत्पाद पृष्ठ प्राप्त करता है, और अनुसूचित ट्रिगर के लिए डेटा निकालता और तुलना करता है।",
"height": 464,
"width": 1456,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-144,
-272
],
"id": "81ae9453-8fac-49c8-906e-f6054a1d5311",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "## वेबहुक स्क्रैपिंग सेटअप\n\nवेबहुक ट्रिगर के माध्यम से स्क्रैपिंग प्रक्रिया शुरू करता है और Turnstile को हल करता है।",
"height": 304,
"width": 528,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-752,
304
],
"id": "5b9d6820-6036-43d4-8d47-1c207864256e",
"name": "Sticky Note3"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 6
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
-704,
-32
],
"id": "ts-s-901",
"name": "Every 6 Hours"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "cfg-001",
"name": "websiteURL",
"value": "https://YOUR-TARGET-SITE.com/product-page",
"type": "string"
},
{
"id": "cfg-002",
"name": "websiteKey",
"value": "YOUR_SITE_KEY_HERE",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-400,
-32
],
"id": "ts-s-900",
"name": "Set Target Config [Schedule]"
},
{
"parameters": {
"operation": "Cloudflare Turnstile",
"websiteURL": "={{ $json.websiteURL }}",
"websiteKey": "={{ $json.websiteKey }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-96,
0
],
"id": "ts-s-902",
"name": "Solve Turnstile",
"credentials": {
"capSolverApi": {
"id": "BeBFMAsySMsMGeE9",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"url": "={{ $(\'Set Target Config [Schedule]\').first().json.websiteURL }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "user-agent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
},
{
"name": "cf-turnstile-response",
"value": "={{ $json.data.solution.token }}"
}
]
},
"options": {
"response": {
"response": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
208,
0
],
"id": "ts-s-903",
"name": "Fetch Product Page"
},
{
"parameters": {
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "price",
"cssSelector": ".product-price, [data-price], .price"
},
{
"key": "productName",
"cssSelector": "h1, .product-title"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.html",
"typeVersion": 1.2,
"position": [
512,
0
],
"id": "ts-s-904",
"name": "Extract Data"
},
{
"parameters": {
"jsCode": "const staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || \'Product\';\nconst parsePrice = (str) => { if (!str) return null; const match = str.match(/[\\d,]+\\.?\\d*/); return match ? parseFloat(match[0].replace(\'\', \'\')) : null; };\nconst currentNum = parsePrice(currentPrice);\nconst previousNum = parsePrice(previousPrice);\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\nconst changed = previousNum !== null && currentNum !== null && currentNum !== previousNum;\nconst direction = changed ? (currentNum < previousNum ? \'dropped\' : \'increased\') : \'unchanged\';\nconst diff = changed ? Math.abs(currentNum - previousNum).toFixed(2) : \'0\';\nreturn [{ json: { productName, currentPrice, previousPrice: previousPrice || \'first check\', changed, direction, diff: changed ? `\$\${diff}` : null, checkedAt: new Date().toISOString() } }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
688,
0
],
"id": "ts-s-905",
"name": "Compare Data"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "if-1",
"leftValue": "={{ $json.changed }}",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
864,
0
],
"id": "ts-s-906",
"name": "Data Changed?"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "a1",
"name": "alert",
"value": "=Price {{ $json.direction }} for {{ $json.productName }}: {{ $json.previousPrice }} → {{ $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": [
1152,
-192
],
"id": "ts-s-907",
"name": "Build Alert"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "n1",
"name": "status",
"value": "no_change",
"type": "string"
},
{
"id": "n2",
"name": "currentPrice",
"value": "={{ $json.currentPrice }}",
"type": "string"
},
{
"id": "n3",
"name": "checkedAt",
"value": "={{ $json.checkedAt }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1168,
32
],
"id": "ts-s-908",
"name": "No Change"
},
{
"parameters": {
"httpMethod": "POST",
"path": "price-monitor-turnstile",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-704,
432
],
"id": "ts-s-909",
"name": "Webhook Trigger",
"webhookId": "28b7ba21-7608-45c2-8552-ec91b8ce7c9b"
},
{
"parameters": {
"operation": "Cloudflare Turnstile",
"websiteURL": "={{ $json.body.websiteURL }}",
"websiteKey": "={{ $json.body.websiteKey }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-368,
432
],
"id": "ts-s-910",
"name": "Solve Turnstile [Webhook]",
"credentials": {
"capSolverApi": {
"id": "BeBFMAsySMsMGeE9",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"url": "={{ $(\'Webhook Trigger\').item.json.body.websiteURL }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "user-agent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
},
{
"name": "cf-turnstile-response",
"value": "={{ $json.data.solution.token }}"
}
]
},
"options": {
"response": {
"response": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
-80,
432
],
"id": "ts-s-911",
"name": "Fetch Product Page [Webhook]"
},
{
"parameters": {
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "price",
"cssSelector": ".product-price, [data-price], .price"
},
{
"key": "productName",
"cssSelector": "h1, .product-title"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.html",
"typeVersion": 1.2,
"position": [
208,
432
],
"id": "ts-s-912",
"name": "Extract Data [Webhook]"
},
{
"parameters": {
"jsCode": "const staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || \'Product\';\nconst parsePrice = (str) => { if (!str) return null; const match = str.match(/[\\d,]+\\.?\\d*/); return match ? parseFloat(match[0].replace(\'\', \'\')) : null; };\nconst currentNum = parsePrice(currentPrice);\nconst previousNum = parsePrice(previousPrice);\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\nconst changed = previousNum !== null && currentNum !== null && currentNum !== previousNum;\nconst direction = changed ? (currentNum < previousNum ? \'dropped\' : \'increased\') : \'unchanged\';\nconst diff = changed ? Math.abs(currentNum - previousNum).toFixed(2) : \'0\';\nreturn [{ json: { productName, currentPrice, previousPrice: previousPrice || \'first check\', changed, direction, diff: changed ? `\$\${diff}` : null, checkedAt: new Date().toISOString() } }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
512,
432
],
"id": "ts-s-913",
"name": "Compare Data [Webhook]"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "if-2",
"leftValue": "={{ $json.changed }}",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
704,
432
],
"id": "ts-s-914",
"name": "Data Changed? [Webhook]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "a4",
"name": "alert",
"value": "=Price {{ $json.direction }} for {{ $json.productName }}: {{ $json.previousPrice }} → {{ $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": [
960,
240
],
"id": "ts-s-915",
"name": "Build Alert [Webhook]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "n4",
"name": "status",
"value": "no_change",
"type": "string"
},
{
"id": "n5",
"name": "currentPrice",
"value": "={{ $json.currentPrice }}",
"type": "string"
},
{
"id": "n6",
"name": "checkedAt",
"value": "={{ $json.checkedAt }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
992,
496
],
"id": "ts-s-916",
"name": "No Change [Webhook]"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
1248,
384
],
"id": "ts-s-917",
"name": "Respond to Webhook"
}
],
"connections": {
"Every 6 Hours": {
"main": [
[
{
"node": "Set Target Config [Schedule]",
"type": "main",
"index": 0
}
]
]
},
"Set Target Config [Schedule]": {
"main": [
[
{
"node": "Solve Turnstile",
"type": "main",
"index": 0
}
]
]
},
"Solve Turnstile": {
"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 Turnstile [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Solve Turnstile [Webhook]": {
"main": [
[
{
"node": "Fetch Product Page [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Fetch Product Page [Webhook]": {
"main": [
[
{
"node": "Extract Data [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Extract Data [Webhook]": {
"main": [
[
{
"node": "Compare Data [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Compare Data [Webhook]": {
"main": [
[
{
"node": "Data Changed? [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Data Changed? [Webhook]": {
"main": [
[
{
"node": "Build Alert [Webhook]",
"type": "main",
"index": 0
}
],
[
{
"node": "No Change [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Build Alert [Webhook]": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"No Change [Webhook]": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
}
},
"meta": {
"instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
}
}
यह वर्कफ़्लो कैप्चा-संरक्षित साइट पर लॉगिन को स्वचालित करता है। एक लॉगिन कॉन्फ़िग सेट करें (Set Login Config) नोड सभी पैरामीटर को केंद्रीकृत करता है — शेड्यूल पथ के लिए [शेड्यूल (Schedule)] और ऑन-डिमांड वेबहुक पथ के लिए [वेबहुक (Webhook)]। प्रत्येक पथ को कॉन्फ़िगर करने के लिए उपयुक्त कॉन्फ़िग नोड को संपादित करें।
शेड्यूल पथ:
हर 24 घंटे → लॉगिन कॉन्फ़िग सेट करें → कैप्चा हल करें → लॉगिन सबमिट करें
→ लॉगिन सफल? → लॉगिन सफलता चिह्नित करें / लॉगिन विफल चिह्नित करें
मुख्य व्यवहार:
ऑपरेशन (Operation) बदलें।email, password, और cf-turnstile-response (अपनी साइट के फ़ील्ड नामों से मेल खाने के लिए सबमिट लॉगिन नोड को सीधे संपादित करें)।statusCode < 400 और प्रतिक्रिया बॉडी में एक कॉन्फ़िगर करने योग्य successMarker दोनों का मूल्यांकन करती है।{
"nodes": [
{
"parameters": {
"content": "## Turnstile खाता लॉगिन — CapSolver + शेड्यूल + वेबहुक\n\n### यह कैसे काम करता है\n- scheduleTrigger द्वारा ट्रिगर किया गया\n- वेबहुक द्वारा ट्रिगर किया गया\n- सेट करता है: websiteURL, websiteKey, successMarker\n- CapSolver: Cloudflare Turnstile\n- POST अनुरोध\n- सशर्त शाखा\n- सेट करता है: status, checkedAt\n\n### सेटअप\n- सेटिंग्स → क्रेडेंशियल के तहत अपनी **CapSolver** एपीआई कुंजी जोड़ें\n- प्लेसहोल्डर मान कॉन्फ़िगर करें\n- वर्कफ़्लो को सक्रिय करें",
"height": 768,
"width": 480
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1168,
-128
],
"id": "887d0c97-af49-4830-99a3-8dd04a78ec10",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## अनुसूचित लॉगिन प्रक्रिया\n\nहर 24 घंटे में ट्रिगर होने वाली लॉगिन प्रक्रिया को संभालता है",
"height": 416,
"width": 1920,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-608,
-128
],
"id": "3fac5b95-ad9c-4029-ac4b-c99952659970",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## वेबहुक ट्रिगर लॉगिन प्रक्रिया\n\nवेबहुक द्वारा ट्रिगर होने वाली लॉगिन प्रक्रिया को संभालता है",
"height": 384,
"width": 2288,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-624,
336
],
"id": "08fa3f86-8373-44ab-abb1-1358cbb3f963",
"name": "Sticky Note2"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 24
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
-560,
48
],
"id": "ts-l-01",
"name": "Every 24 Hours"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "l1",
"name": "websiteURL",
"value": "https://YOUR-LOGIN-PAGE.com",
"type": "string"
},
{
"id": "l2",
"name": "websiteKey",
"value": "YOUR_SITE_KEY_HERE",
"type": "string"
},
{
"id": "l3",
"name": "successMarker",
"value": "account-dashboard",
"type": "string"
},
{
"id": "l4",
"name": "userAgent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-240,
48
],
"id": "ts-l-02",
"name": "Set Login Config [Schedule]"
},
{
"parameters": {
"operation": "Cloudflare Turnstile",
"websiteURL": "={{ $json.websiteURL }}",
"websiteKey": "={{ $json.websiteKey }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
256,
48
],
"id": "ts-l-03",
"name": "Solve Turnstile [Schedule]",
"credentials": {
"capSolverApi": {
"id": "BeBFMAsySMsMGeE9",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"method": "POST",
"url": "={{ $(\'Set Login Config [Schedule]\').item.json.websiteURL }}/login",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "content-type",
"value": "application/x-www-form-urlencoded"
},
{
"name": "user-agent",
"value": "={{ $(\'Set Login Config [Schedule]\').item.json.userAgent }}"
}
]
},
"sendBody": true,
"contentType": "form-urlencoded",
"bodyParameters": {
"parameters": [
{
"name": "email",
"value": "your-email@example.com"
},
{
"name": "password",
"value": "YOUR_ACCOUNT_PASSWORD"
},
{
"name": "cf-turnstile-response",
"value": "={{ $json.data.solution.token }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": true,
"neverError": true
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
576,
48
],
"id": "ts-l-04",
"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": [
896,
48
],
"id": "ts-l-05",
"name": "Login OK? [Schedule]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "s1",
"name": "status",
"value": "success",
"type": "string"
},
{
"id": "s2",
"name": "checkedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1168,
-48
],
"id": "ts-l-06",
"name": "Mark Success"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "f1",
"name": "status",
"value": "failed",
"type": "string"
},
{
"id": "f2",
"name": "statusCode",
"value": "={{ $json.statusCode }}",
"type": "number"
},
{
"id": "f3",
"name": "checkedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1168,
128
],
"id": "ts-l-07",
"name": "Mark Failed"
},
{
"parameters": {
"httpMethod": "POST",
"path": "account-login-turnstile",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-560,
448
],
"id": "ts-l-08",
"name": "Webhook Trigger",
"webhookId": "9c7a53a4-d3ee-495b-9381-3a9425bb1b36"
},
{
"parameters": {
"operation": "Cloudflare Turnstile",
"websiteURL": "={{ $json.body.websiteURL }}",
"websiteKey": "={{ $json.body.websiteKey }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
256,
448
],
"id": "ts-l-09",
"name": "Solve Turnstile [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": "cf-turnstile-response",
"value": "={{ $json.data.solution.token }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": true,
"neverError": true
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
576,
448
],
"id": "ts-l-10",
"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": [
896,
448
],
"id": "ts-l-11",
"name": "Login OK? [Webhook]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "ws1",
"name": "status",
"value": "success",
"type": "string"
},
{
"id": "ws2",
"name": "checkedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1168,
352
],
"id": "ts-l-12",
"name": "Mark Success [W]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "wf1",
"name": "status",
"value": "failed",
"type": "string"
},
{
"id": "wf2",
"name": "statusCode",
"value": "={{ $json.statusCode }}",
"type": "number"
},
{
"id": "wf3",
"name": "checkedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1168,
544
],
"id": "ts-l-13",
"name": "Mark Failed [W]"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
1504,
448
],
"id": "ts-l-14",
"name": "Respond to Webhook"
}
],
"connections": {
"Every 24 Hours": {
"main": [
[
{
"node": "Set Login Config [Schedule]",
"type": "main",
"index": 0
}
]
]
},
"Set Login Config [Schedule]": {
"main": [
[
{
"node": "Solve Turnstile [Schedule]",
"type": "main",
"index": 0
}
]
]
},
"Solve Turnstile [Schedule]": {
"main": [
[
{
"node": "Submit Login [Schedule]",
"type": "main",
"index": 0
}
]
]
},
"Submit Login [Schedule]": {
"main": [
[
{
"node": "Login OK? [Schedule]",
"type": "main",
"index": 0
}
]
]
},
"Login OK? [Schedule]": {
"main": [
[
{
"node": "Mark Success",
"type": "main",
"index": 0
}
],
[
{
"node": "Mark Failed",
"type": "main",
"index": 0
}
]
]
},
"Webhook Trigger": {
"main": [
[
{
"node": "Solve Turnstile [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Solve Turnstile [Webhook]": {
"main": [
[
{
"node": "Submit Login [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Submit Login [Webhook]": {
"main": [
[
{
"node": "Login OK? [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Login OK? [Webhook]": {
"main": [
[
{
"node": "Mark Success [W]",
"type": "main",
"index": 0
}
],
[
{
"node": "Mark Failed [W]",
"type": "main",
"index": 0
}
]
]
},
"Mark Success [W]": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Mark Failed [W]": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
}
},
"meta": {
"instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
}
}
आपने n8n और CapSolver का उपयोग करके Cloudflare Turnstile-सुलझाने वाली एपीआई और उत्पादन-तैयार स्क्रैपिंग वर्कफ़्लो बनाना सीख लिया है — बिना किसी पारंपरिक कोडिंग की आवश्यकता के।
इस गाइड में, हमने कवर किया:
मुख्य बात: Turnstile चुनौती को हल करना केवल आधा काम है — आपको संरक्षित डेटा को अनलॉक करने के लिए लक्ष्य वेबसाइट पर टोकन सबमिट करना होगा।
टिप: ये वर्कफ़्लो शेड्यूल + वेबहुक ट्रिगर का उपयोग करते हैं, लेकिन आप ट्रिगर नोड को किसी भी n8n ट्रिगर से बदल सकते हैं — मैनुअल, ऐप इवेंट, फ़ॉर्म सबमिशन, आदि। डेटा प्राप्त करने के बाद, Google शीट्स, डेटाबेस, क्लाउड स्टोरेज में परिणाम सहेजने के लिए या टेलीग्राम/स्लैक/ईमेल के माध्यम से अलर्ट भेजने के लिए n8n के अंतर्निहित नोड्स का उपयोग करें।
शुरू करने के लिए तैयार हैं? CapSolver के लिए साइन अप करें और अपनी पहली रिचार्ज पर अतिरिक्त 8% बोनस के लिए बोनस कोड n8n का उपयोग करें!

Cloudflare Turnstile एक CAPTCHA विकल्प है जो आगंतुकों को पहेलियाँ हल करने की आवश्यकता के बिना सत्यापित करता है। यह ब्राउज़र संकेतों और व्यवहार विश्लेषण का उपयोग करके पृष्ठभूमि में चलता है ताकि यह निर्धारित किया जा सके कि कोई आगंतुक मानव है या नहीं।
मूल्य उपयोग के आधार पर भिन्न होता है। वर्तमान Turnstile दरों के लिए CapSolver मूल्य निर्धारण पृष्ठ देखें।
Turnstile चुनौतियों को आमतौर पर कुछ सेकंड में हल किया जाता है क्योंकि इसमें कोई छवि चुनौतियां शामिल नहीं होती हैं।
हाँ! यह वर्कफ़्लो स्व-होस्टेड n8n और n8n Cloud दोनों के साथ काम करता है। CapSolver नोड एक आधिकारिक एकीकरण के रूप में पहले से ही उपलब्ध है — बस अपनी एपीआई क्रेडेंशियल जोड़ें।
HTML में data-sitekey के लिए पृष्ठ स्रोत खोजें या JavaScript में turnstile.render() देखें। आप DevTools (F12) → नेटवर्क (Network) टैब भी खोल सकते हैं और अनुरोधों में साइट कुंजी खोजने के लिए turnstile द्वारा फ़िल्टर कर सकते हैं। एक विस्तृत गाइड के लिए, CapSolver दस्तावेज़ देखें।
कई चीजें इसका कारण बन सकती हैं। सबसे पहले, टोकन जल्दी समाप्त हो जाते हैं — सुनिश्चित करें कि आप टोकन तुरंत सबमिट कर रहे हैं। दूसरा, सत्यापित करें कि आप टोकन सही जगह पर भेज रहे हैं: वास्तविक नेटवर्क अनुरोध का निरीक्षण करें जो ब्राउज़र फ़ॉर्म सबमिट करते समय करता है (DevTools → नेटवर्क टैब) और फ़ील्ड नाम (cf-turnstile-response विशिष्ट है लेकिन सार्वभौमिक नहीं), अनुरोध विधि, और एंडपॉइंट सभी आपके द्वारा n8n में कॉन्फ़िगर किए गए से मेल खाते हैं। तीसरा, कुछ साइटों को metadata.action या metadata.cdata पैरामीटर की आवश्यकता होती है — यह जांचने के लिए CapSolver एक्सटेंशन का उपयोग करें कि क्या इनमें से कोई भी लागू होता है। यदि टोकन अभी भी अस्वीकार कर दिया जाता है, तो साइट-विशिष्ट सहायता के लिए CapSolver समर्थन से संपर्क करें।
Rust में वेब स्क्रैपिंग के स्केलेबल आर्किटेक्चर सीखें, reqwest, scraper, असिंक्रोनस स्क्रैपिंग, हेडलेस ब्राउज़र स्क्रैपिंग, प्रॉक्सी रोटेशन, और संगत CAPTCHA का निपटारा।

CapSolver के साथ RoxyBrowser के एकीकरण करें ताकि ब्राउज़र के कार्यों को स्वचालित किया जा सके और reCAPTCHA, Turnstile और अन्य CAPTCHAs को बायपास किया जा सके।
