
Rajinder Singh
Deep Learning Researcher

AWS WAF (वेब एप्लिकेशन फ़ायरवॉल) अमेज़न का एंटरप्राइज़-ग्रेड बॉट सुरक्षा सिस्टम है जिसका उपयोग इंटरनेट पर कुछ सबसे बड़े वेबसाइट्स द्वारा किया जाता है। पारंपरिक CAPTCHA की तरह जो इमेज पहेलियाँ या चेकबॉक्स दिखाते हैं, AWS WAF अदृश्य चुनौतियाँ और टोकन-आधारित सत्यापन का उपयोग करता है — जिससे इसे ऑटोमेशन टूल्स के लिए संभालना विशेष रूप से चुनौतीपूर्ण बन जाता है।
क्या होगा अगर आप अपने n8n वर्कफ़्लोज़ के अंदर AWS WAF चुनौतियों को स्वचालित रूप से हल कर सकें — चाहे आप एक पुन: उपयोग योग्य solver API बना रहे हों, कैप्चा-संरक्षित साइट को स्क्रैप कर रहे हों, या लॉगिन फॉर्म को स्वचालित कर रहे हों — वह भी बिना एक भी पारंपरिक कोड की लाइन लिखे?
इस गाइड में, आप सीखेंगे कि कैसे n8n (एक विज़ुअल वर्कफ़्लो ऑटोमेशन टूल) को CapSolver (एक AI-संचालित कैप्चा सॉल्विंग सेवा) के साथ मिलाकर AWS WAF चुनौतियों को मांग पर हल किया जाए — या तो एक स्टैंडअलोन API एंडपॉइंट के रूप में या किसी भी ऑटोमेशन वर्कफ़्लो के अंदर एक स्टेप के रूप में।
आप क्या बनाएंगे:
Solver API — एक पुन: उपयोग योग्य एंडपॉइंट जिसे आपके अन्य टूल कॉल कर सकते हैं:
प्रत्यक्ष उपयोग वर्कफ़्लोज़ — CapSolver को बड़े ऑटोमेशन के अंदर एक स्टेप के रूप में एम्बेड किया गया:
AWS WAF (वेब एप्लिकेशन फ़ायरवॉल) अमेज़न वेब सर्विसेज़ की बॉट रोकथाम और वेब सुरक्षा सेवा है। यह वेबसाइट्स को सामान्य वेब एक्सप्लॉइट्स, बॉट ट्रैफ़िक, और स्वचालित दुरुपयोग से बचाता है। कई उच्च-ट्रैफ़िक साइट्स — विशेष रूप से ई-कॉमर्स प्लेटफ़ॉर्म, वित्तीय सेवाएं, और एंटरप्राइज़ एप्लिकेशन — AWS WAF का उपयोग अदृश्य CAPTCHA चुनौतियों के पीछे पहुंच को नियंत्रित करने के लिए करते हैं।
AWS WAF reCAPTCHA और Turnstile से कैसे अलग है:
websiteURL की आवश्यकता होती है।aws-waf-token कुकी लौटाता है जिसे बाद के अनुरोधों में Cookie HTTP हेडर के माध्यम से भेजना होता है।awsKey, awsIv, awsContext, awsChallengeJS और अन्य पैरामीटर प्रदान कर सकता है। ये वैकल्पिक हैं और केवल विशिष्ट कार्यान्वयन के लिए आवश्यक हैं।
CloudFront से अलग। AWS WAF वह फ़ायरवॉल लेयर है जो वेब एप्लिकेशन के सामने होती है। CloudFront अमेज़न का CDN है। एक साइट CloudFront का उपयोग AWS WAF के बिना कर सकती है, या AWS WAF का उपयोग CloudFront के बिना कर सकती है — ये अलग-अलग सेवाएं हैं, हालांकि आमतौर पर साथ में उपयोग की जाती हैं।
शुरू करने से पहले, सुनिश्चित करें कि आपके पास निम्नलिखित हैं:
महत्वपूर्ण: सुनिश्चित करें कि आपके CapSolver खाते में पर्याप्त बैलेंस हो। AWS WAF सॉल्विंग कार्य उपयोग के आधार पर क्रेडिट खर्च करते हैं।
CapSolver n8n में एक आधिकारिक इंटीग्रेशन के रूप में उपलब्ध है — किसी कम्युनिटी नोड इंस्टॉलेशन की आवश्यकता नहीं। आप इसे अपने वर्कफ़्लोज़ बनाते समय नोड पैनल में सीधे पा सकते हैं।
चूंकि यह एक आधिकारिक इंटीग्रेशन है, आपको n8n में क्रेडेंशियल बनाना होगा ताकि CapSolver नोड आपके खाते के साथ प्रमाणीकरण कर सके।
अपने n8n इंस्टेंस पर जाएं और Settings -> Credentials पर नेविगेट करें। यहाँ आपके सभी कॉन्फ़िगर किए गए क्रेडेंशियल दिखेंगे।

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

महत्वपूर्ण: आपके वर्कफ़्लोज़ में हर CapSolver नोड इस क्रेडेंशियल को संदर्भित करेगा। आपको इसे केवल एक बार बनाना है — आपके सभी सॉल्वर वर्कफ़्लोज़ एक ही क्रेडेंशियल साझा करेंगे।
अब आप अपना AWS WAF सॉल्वर वर्कफ़्लो बनाने के लिए तैयार हैं!
AWS WAF चुनौती को हल करने से पहले, आपको यह पुष्टि करनी होगी कि लक्षित साइट AWS WAF का उपयोग कर रही है और कोई वैकल्पिक पैरामीटर इकट्ठा करने होंगे। सबसे आसान तरीका है CapSolver ब्राउज़र एक्सटेंशन का उपयोग करना और मैनुअल निरीक्षण करना।
अपने लक्षित वेबसाइट पर जाएं और DevTools (F12) खोलें। इन संकेतों की तलाश करें:
aws-waf-token कुकी देखेंcaptcha.awswaf.com या challenge.js वाले URL के लिए अनुरोध देखेंx-amzn-waf-* हेडर लौटाता हैअधिकांश AWS WAF सॉल्व केवल websiteURL की आवश्यकता होती है। हालांकि, कुछ साइट्स अतिरिक्त पैरामीटर प्रदान करती हैं जो सॉल्व की सटीकता बढ़ा सकते हैं:
| पैरामीटर | कहाँ मिलेगा | विवरण |
|---|---|---|
awsKey |
पेज स्रोत / JS वेरिएबल्स | कैप्चा पेज द्वारा लौटाया गया key मान |
awsIv |
पेज स्रोत / JS वेरिएबल्स | कैप्चा पेज द्वारा लौटाया गया iv मान |
awsContext |
पेज स्रोत / JS वेरिएबल्स | कैप्चा पेज द्वारा लौटाया गया context मान |
awsChallengeJS |
नेटवर्क टैब | challenge.js URL (जैसे, https://captcha.awswaf.com/.../challenge.js) |
awsApiJs |
नेटवर्क टैब | jsapi.js URL |
awsProblemUrl |
नेटवर्क टैब | समस्या एंडपॉइंट URL |
awsApiKey |
नेटवर्क टैब | समस्या एंडपॉइंट से api_key मान |
awsExistingToken |
कुकीज़ | यदि रिफ्रेश कर रहे हों तो पिछला aws-waf-token |
टिप: अधिकांश साइट्स के लिए केवल
websiteURLकी आवश्यकता होती है। पहले केवल वही पैरामीटर दें और यदि टोकन स्वीकार नहीं हो रहा है तो वैकल्पिक पैरामीटर जोड़ें।
कैप्चा पैरामीटर पहचानने के लिए विस्तृत गाइड के लिए, देखें आधिकारिक CapSolver दस्तावेज़।
यह वर्कफ़्लो एक POST API एंडपॉइंट बनाता है जो AWS WAF पैरामीटर स्वीकार करता है और हल किया हुआ कुकी टोकन लौटाता है।

वर्कफ़्लो में चार नोड होते हैं:
$json.error खाली नहीं है){"error": "..."} लौटाता है| सेटिंग | मान |
|---|---|
| HTTP Method | POST |
| Path | solver-aws-waf |
| Respond | Response Node |
यह एक एंडपॉइंट बनाता है: https://your-n8n-instance.com/webhook/solver-aws-waf
| पैरामीटर | मान | विवरण |
|---|---|---|
| Operation | AWS WAF |
AWS WAF पर सेट होना चाहिए |
| Type | AntiAwsWafTaskProxyLess |
कोई प्रॉक्सी आवश्यक नहीं (डिफ़ॉल्ट)। कड़े साइट्स के लिए प्रॉक्सी के साथ AntiAwsWafTask का उपयोग करें |
| Website URL | {{ $json.body.websiteURL }} |
AWS WAF चुनौती वाले पेज का URL |
| awsKey | (वैकल्पिक) | कैप्चा पेज द्वारा लौटाया गया key मान |
| awsIv | (वैकल्पिक) | कैप्चा पेज द्वारा लौटाया गया iv मान |
| awsContext | (वैकल्पिक) | कैप्चा पेज द्वारा लौटाया गया context मान |
| awsChallengeJS | (वैकल्पिक) | challenge.js लिंक |
| awsApiJs | (वैकल्पिक) | jsapi.js लिंक |
Turnstile/reCAPTCHA से मुख्य अंतर: AWS WAF को
websiteKeyकी आवश्यकता नहीं होती। केवलwebsiteURLअनिवार्य है। साथ ही इस नोड में अपने CapSolver क्रेडेंशियल चुनें।
| सेटिंग | मान |
|---|---|
| Condition | ={{ $json.error }} खाली नहीं है |
| True branch | Error Respond to Webhook नोड की ओर जाता है |
| False branch | Success Respond to Webhook नोड की ओर जाता है |
यह कैनवास पर त्रुटि पथ को स्पष्ट करता है। CapSolver नोड त्रुटि पर जारी रहता है (onError: continueRegularOutput), इसलिए विफलताएँ यहाँ { "error": "..." } के रूप में आती हैं, न कि वर्कफ़्लो क्रैश करती है।
सफलता शाखा (CapSolver Error? का false आउटपुट):
| सेटिंग | मान |
|---|---|
| Respond With | JSON |
| Response Body | ={{ JSON.stringify($json.data) }} |
त्रुटि शाखा (CapSolver Error? का true आउटपुट):
| सेटिंग | मान |
|---|---|
| Respond With | JSON |
| Response Body | ={{ JSON.stringify({ error: $json.error }) }} |
त्रुटि संदेश दो प्रारूपों में से एक का पालन करते हैं, यह निर्भर करता है कि विफलता कहाँ हुई:
| विफलता बिंदु | प्रारूप |
|---|---|
| टास्क निर्माण अस्वीकृत (गलत कुंजी, बैलेंस नहीं, अमान्य डेटा, आदि) | {"error": "Failed to create task: Request failed with status code 400"} |
| टास्क बना लेकिन कैप्चा हल नहीं हो सका | {"error": "Solve failed: <reason>"} |
| 120 सेकंड के बाद सॉल्व टाइमआउट | {"error": "Get task result timeout: unable to solve within 120000 seconds"} |
नोट: टास्क निर्माण विफलताएँ (गलत API कुंजी, शून्य बैलेंस, अमान्य टास्क डेटा) सभी एक ही HTTP 400 संदेश के रूप में आती हैं — n8n नोड HTTP अपवाद को पकड़ता है इससे पहले कि CapSolver की त्रुटि बॉडी पढ़े।
सामान्य त्रुटि उदाहरण:
{"error": "Failed to create task: Request failed with status code 400"}
{"error": "Solve failed: Invalid parameters"}
{"error": "Get task result timeout: unable to solve within 120000 seconds"}
अपने वेबहुक एंडपॉइंट पर POST अनुरोध भेजें:
curl -X POST https://your-n8n-instance.com/webhook/solver-aws-waf \
-H "Content-Type: application/json" \
-d '{
"websiteURL": "https://example.com/protected-page"
}'
आप वैकल्पिक पैरामीटर भी शामिल कर सकते हैं:
curl -X POST https://your-n8n-instance.com/webhook/solver-aws-waf \
-H "Content-Type: application/json" \
-d '{
"websiteURL": "https://example.com/protected-page",
"awsKey": "AQIDAHjc...",
"awsIv": "CgAHAQABAA...",
"awsContext": "gxPZ0w9O..."
}'
अपेक्षित प्रतिक्रिया:
{
"taskId": "abc123...",
"solution": {
"cookie": "aws-waf-token=76b8ee9e-fa6a-4c36-b8e9-0c1d97EXAMPLE..."
},
"status": "ready"
}
महत्वपूर्ण: समाधान एक
cookieफ़ील्ड लौटाता है (अन्य कैप्चा प्रकारों की तरहtokenयाgRecaptchaResponseनहीं)। इसका मान एक पूर्ण कुकी स्ट्रिंग होता है जैसेaws-waf-token=LONG_VALUEजिसे आपCookieHTTP हेडर के माध्यम से भेजते हैं।
नीचे दिया गया JSON कॉपी करें और n8n में Menu -> Import from JSON के माध्यम से इम्पोर्ट करें:
{
"nodes": [
{
"parameters": {
"content": "## AWS WAF \u2014 Solver API\n\n### How it works\n\n1. Receives requests via a webhook trigger.\n2. Solves AWS WAF challenges using CapSolver.\n3. Evaluates the result for potential errors.\n4. Sends an error response if CapSolver fails.\n5. Sends a success response if CapSolver succeeds.\n\n### Setup steps\n\n- [ ] Configure webhook node to receive requests.\n- [ ] Ensure CapSolver node is properly configured with necessary settings.\n- [ ] Set up the 'If' node conditions correctly.\n\n### Customization\n\nCustomize the webhook response messages in the 'Respond to Webhook' nodes for error and success cases.",
"width": 480,
"height": 608
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-800,
-240
],
"id": "4d932006-48c5-42d6-90d8-5f5e5575f789",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## Handle Solver Request\n\nReceives incoming requests and solves AWS WAF challenges.",
"width": 496,
"height": 304,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-240,
-128
],
"id": "25adfac1-3634-4356-bfdb-494c6a4671db",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## Evaluate and Respond\n\nEvaluates the CapSolver results and sends appropriate responses.",
"width": 496,
"height": 496,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
352,
-240
],
"id": "4ad350dd-e339-482b-8565-be63f64061f4",
"name": "Sticky Note2"
},
{
"parameters": {
"httpMethod": "POST",
"path": "solver-aws-waf",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-192,
0
],
"id": "aw111111-1111-1111-1111-aw1111111101",
"name": "Receive Solver Request",
"webhookId": "aw111111-aaaa-bbbb-cccc-aw1111111101",
"onError": "continueRegularOutput"
},
{
"parameters": {
"operation": "AWS WAF",
"websiteURL": "={{ $json.body.websiteURL }}",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
112,
0
],
"id": "aw111111-1111-1111-1111-aw1111111102",
"name": "Solve AWS WAF",
"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.3,
"position": [
400,
0
],
"id": "aw111111-1111-1111-1111-aw1111111103",
"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": "aw111111-1111-1111-1111-aw1111111104",
"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": "aw111111-1111-1111-1111-aw1111111105",
"name": "Respond to Webhook (Success)"
}
],
"connections": {
"Receive Solver Request": {
"main": [
[
{
"node": "Solve AWS WAF",
"type": "main",
"index": 0
}
]
]
},
"Solve AWS WAF": {
"main": [
[
{
"node": "CapSolver Error?",
"type": "main",
"index": 0
}
]
]
},
"CapSolver Error?": {
"main": [
[
{
"node": "Respond to Webhook (Error)",
"type": "main",
"index": 0
}
],
[
{
"node": "Respond to Webhook (Success)",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"meta": {
"instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
}
}
AWS WAF सॉल्वर API एंडपॉइंट निम्नलिखित पैरामीटर स्वीकार करता है:
| पैरामीटर | आवश्यक | विवरण |
|---|---|---|
websiteURL |
हाँ | AWS WAF चुनौती वाले पेज का URL |
awsKey |
नहीं | कैप्चा पेज द्वारा लौटाया गया key मान |
awsIv |
नहीं | कैप्चा पेज द्वारा लौटाया गया iv मान |
awsContext |
नहीं | कैप्चा पेज द्वारा लौटाया गया context मान |
awsChallengeJS |
नहीं | कैप्चा पेज से challenge.js लिंक |
awsApiJs |
नहीं | कैप्चा पेज से jsapi.js लिंक |
awsProblemUrl |
नहीं | समस्या एंडपॉइंट URL |
awsApiKey |
नहीं | समस्या एंडपॉइंट का api_key मान |
awsExistingToken |
नहीं | पिछला aws-waf-token जो अंतिम सत्यापन के लिए उपयोग किया गया था |
टिप: आप
websiteURLको पेज URL निरीक्षण करके पहचान सकते हैं। DevTools का उपयोग करकेaws-waf-tokenकुकीज़ औरcaptcha.awswaf.comके नेटवर्क अनुरोधों की जांच करें।
reCAPTCHA और Turnstile की तुलना में, AWS WAF एक तरीके से सरल है — आपको केवल एक आवश्यक पैरामीटर (websiteURL) चाहिए, साइट की कोई key आवश्यक नहीं है। हालांकि, इसमें सूक्ष्म समायोजन के लिए अधिक वैकल्पिक पैरामीटर होते हैं।
ऊपर दिया गया API वर्कफ़्लो दिखाता है कि कैसे एक हल किया गया AWS WAF कुकी प्राप्त करें। लेकिन आप वास्तव में इसके साथ क्या करते हैं?
वास्तविक दुनिया के ऑटोमेशन में, चुनौती को हल करना केवल आधा काम है। आपको कुकी सबमिट करनी होती है लक्ष्य वेबसाइट को — बिल्कुल वैसे ही जैसे ब्राउज़र करता है — ताकि AWS WAF सुरक्षा के पीछे डेटा या क्रिया अनलॉक हो सके।
यहाँ सामान्य पैटर्न है:
solution.cookie)Cookie HTTP हेडर के माध्यम से लक्ष्य वेबसाइट को भेजेंउदाहरण: https://example.com/ — एक AWS WAF-संरक्षित वेबसाइट
मैनुअल ट्रिगर -> CapSolver AWS WAF -> HTTP GET अनुरोध (Cookie हेडर के साथ) -> यदि (सफलता जांचें) -> वैध / अमान्य
AWS WAFhttps://example.com/protected-pageAntiAwsWafTaskProxyLess</details>
---
## वर्कफ़्लो: उपयोग-मामले के उदाहरण
सॉल्वर API और ऊपर दिया गया सबमिशन उदाहरण मुख्य पैटर्न दिखाते हैं: AWS WAF चुनौती हल करें, कुकी सबमिट करें, परिणाम संसाधित करें। निम्नलिखित वर्कफ़्लो इस पैटर्न को **प्रोडक्शन-तैयार उपयोग-मामलों** तक बढ़ाते हैं — प्रत्येक में दोहरे ट्रिगर (शेड्यूल + वेबहुक), स्थायी स्थिति ट्रैकिंग, और संरचित आउटपुट होता है।
| वर्कफ़्लो | उद्देश्य |
|---|---|
| `AWS WAF Scraping — Price & Product Details — CapSolver + Schedule + Webhook` | हर 6 घंटे में कीमत और उत्पाद नाम स्क्रैप करता है, `staticData` में संग्रहीत पिछले मानों से तुलना करता है, बदलाव पर अलर्ट करता है |
| `AWS WAF Account Login — CapSolver + Schedule + Webhook` | AWS WAF-संरक्षित साइट पर अपने खाते में लॉगिन करता है, पहले चुनौती हल करके, फिर कुकी के साथ क्रेडेंशियल POST करके |
### उदाहरण 1: स्क्रैपिंग
यह वर्कफ़्लो हर 6 घंटे (शेड्यूल) या मांग पर (वेबहुक) एक उत्पाद पेज स्क्रैप करता है, HTML नोड का उपयोग करके कीमत निकालता है, और इसे पहले संग्रहीत मान से तुलना करता है।
**शेड्यूल पथ:**
हर 6 घंटे -> AWS WAF हल करें -> उत्पाद पेज प्राप्त करें -> डेटा निकालें
-> डेटा की तुलना करें -> डेटा बदला? -> अलर्ट बनाएं / कोई बदलाव नहीं
मुख्य व्यवहार:
- कुकी को `Cookie` हेडर के रूप में भेजा जाता है (यह AWS WAF टोकन सबमिट करने का सही तरीका है — फॉर्म फ़ील्ड के रूप में नहीं)
- **HTML नोड** CSS सेलेक्टर्स (`.product-price`, `h1`) के माध्यम से कीमत और उत्पाद नाम निकालता है
- `$workflow.staticData.lastPrice` पिछले मूल्य को निष्पादनों के बीच स्थायी बनाता है
- मूल्य तुलना दोनों **गिरावट** (गंभीरता: `deal`) और **बढ़ोतरी** (गंभीरता: `info`) का पता लगाती है
<details>
<summary>पूर्ण वर्कफ़्लो JSON (17 नोड्स) विस्तार के लिए क्लिक करें</summary>
```json
{
"nodes": [
{
"parameters": {
"content": "## AWS WAF स्क्रैपिंग — कीमत और उत्पाद विवरण — CapSolver + शेड्यूल + वेबहुक\n\n### यह कैसे काम करता है\n\n1. नियमित अंतराल पर या वेबहुक अनुरोध के माध्यम से ट्रिगर होता है।\n2. AWS WAF चुनौती हल करता है फिर उत्पाद पेज प्राप्त करने के लिए अनुरोध करता है।\n3. प्राप्त HTML पेज से उत्पाद डेटा निकालता है।\n4. वर्तमान और पहले संग्रहीत डेटा की तुलना करता है ताकि कोई बदलाव पता चले।\n5. यदि डेटा बदला है तो अलर्ट भेजता है; अन्यथा कोई बदलाव लॉग करता है।\n6. यदि वेबहुक द्वारा ट्रिगर किया गया हो तो परिणाम लौटाता है।\n\n### सेटअप चरण\n\n- [ ] 'Every 6 Hours' नोड में शेड्यूल सेटिंग्स कॉन्फ़िगर करें।\n- [ ] 'Solve AWS WAF' नोड्स में AWS WAF क्रेडेंशियल सेट करें।\n- [ ] 'Fetch Product Page' नोड्स में लक्ष्य URL इनपुट करें।\n- [ ] 'Receive Monitor Request' नोड में वेबहुक URL कॉन्फ़िगर करें।\n\n### अनुकूलन\n\n'Fetch Product Page' और संबंधित नोड्स में लक्ष्य साइट URL को विभिन्न साइटों या विशिष्ट पेजों के लिए समायोजित करें।",
"width": 480,
"height": 896
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1008,
-368
],
"id": "721002ab-5623-44fd-bcd7-44de185ec24f",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## शेड्यूल्ड डेटा स्क्रैपिंग\n\nहर 6 घंटे स्क्रैपिंग ट्रिगर करता है और AWS WAF हल करता है।",
"width": 496,
"height": 272,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-432,
-192
],
"id": "565d31e9-26a6-412d-92a4-c7da5c7b6985",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## शेड्यूल्ड प्राप्ति और निष्कर्षण\n\nशेड्यूल पर उत्पाद पेज डेटा प्राप्त करता है और संसाधित करता है।",
"width": 480,
"height": 272,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
176,
-208
],
"id": "58d3a139-a733-46d6-9f17-574ba6ad7929",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "## शेड्यूल्ड डेटा तुलना\n\nस्क्रैप किए गए डेटा की पिछली प्रविष्टियों से तुलना करता है और बदलाव जांचता है।",
"width": 432,
"height": 320,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
736,
-240
],
"id": "fb4b9115-2b2f-49f1-b9be-4b44de4b37bf",
"name": "Sticky Note3"
},
{
"parameters": {
"content": "## शेड्यूल्ड अलर्ट या लॉग\n\nयदि लागू हो तो अलर्ट जनरेट करता है या कोई बदलाव नहीं लॉग करता है।",
"width": 240,
"height": 512,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
1232,
-368
],
"id": "ec59cfa5-fe07-4b4a-a060-c3570e42a8a8",
"name": "Sticky Note4"
},
{
"parameters": {
"content": "## वेबहुक ट्रिगर स्क्रैपिंग\n\nस्क्रैपिंग शुरू करने के लिए वेबहुक से अनुरोधों को संभालता है।",
"width": 496,
"height": 272,
"color": 7
},
``` "type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-448,
320
],
"id": "1324edf4-b4f8-4cab-aa18-401d71fb486b",
"name": "Sticky Note5"
},
{
"parameters": {
"content": "## वेबहुक फ़ेच और एक्सट्रैक्ट\n\nवेबहुक के माध्यम से उत्पाद पृष्ठ डेटा प्राप्त करता है और संसाधित करता है।",
"width": 496,
"height": 272,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
160,
320
],
"id": "e86f4191-e81c-417e-93e8-ab163ac3024d",
"name": "Sticky Note6"
},
{
"parameters": {
"content": "## वेबहुक डेटा तुलना\n\nवेबहुक अनुरोधों से डेटा में परिवर्तनों की तुलना और मूल्यांकन करता है।",
"width": 400,
"height": 304,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
704,
304
],
"id": "95c5ab10-e493-475a-9fe6-c39d0374a120",
"name": "Sticky Note7"
},
{
"parameters": {
"content": "## वेबहुक अलर्ट/लॉग और रिटर्न\n\nवेबहुक के माध्यम से अलर्ट भेजता है या लॉग करता है और डेटा वापस करता है।",
"width": 384,
"height": 464,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
1136,
192
],
"id": "fc36e038-4f18-43c7-84de-c42a32c3177c",
"name": "Sticky Note8"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 6
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
-384,
-80
],
"id": "aw333333-3333-3333-3333-aw3333333301",
"name": "हर 6 घंटे"
},
{
"parameters": {
"operation": "AWS WAF",
"websiteURL": "https://YOUR-TARGET-SITE.com/product-page",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-80,
-80
],
"id": "aw333333-3333-3333-3333-aw3333333302",
"name": "AWS WAF हल करें",
"credentials": {
"capSolverApi": {
"id": "BeBFMAsySMsMGeE9",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"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": "Cookie",
"value": "={{ $json.data.solution.cookie }}"
}
]
},
"options": {
"response": {
"response": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
224,
-96
],
"id": "aw333333-3333-3333-3333-aw3333333303",
"name": "उत्पाद पृष्ठ प्राप्त करें"
},
{
"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,
-96
],
"id": "aw333333-3333-3333-3333-aw3333333304",
"name": "डेटा निकालें"
},
{
"parameters": {
"jsCode": "// वर्कफ़्लो स्थैतिक डेटा से वर्तमान और पिछली कीमत प्राप्त करें\nconst staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || 'Product';\n\n// तुलना के लिए संख्यात्मक मान पार्स करें\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// संग्रहीत कीमत अपडेट करें\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\n\nconst changed = previousNum !== null && currentNum !== null && currentNum !== previousNum;\nconst direction = changed ? (currentNum < previousNum ? 'गिरावट' : 'बढ़ोतरी') : 'अपरिवर्तित';\nconst diff = changed ? Math.abs(currentNum - previousNum).toFixed(2) : '0';\n\nreturn [{\n json: {\n productName,\n currentPrice,\n previousPrice: previousPrice || 'पहली जांच',\n changed,\n direction,\n diff: changed ? `$${diff}` : null,\n checkedAt: new Date().toISOString()\n }\n}];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
784,
-96
],
"id": "aw333333-3333-3333-3333-aw3333333305",
"name": "डेटा तुलना करें"
},
{
"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.3,
"position": [
1024,
-112
],
"id": "aw333333-3333-3333-3333-aw3333333306",
"name": "डेटा बदला?"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "alert-001",
"name": "alert",
"value": "=कीमत {{ $json.direction }} के लिए {{ $json.productName }}: {{ $json.previousPrice }} \u2192 {{ $json.currentPrice }} ({{ $json.direction === 'गिरावट' ? '-' : '+' }}{{ $json.diff }})",
"type": "string"
},
{
"id": "alert-002",
"name": "severity",
"value": "={{ $json.direction === 'गिरावट' ? 'deal' : 'info' }}",
"type": "string"
},
{
"id": "alert-003",
"name": "checkedAt",
"value": "={{ $json.checkedAt }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1296,
-240
],
"id": "aw333333-3333-3333-3333-aw3333333307",
"name": "अलर्ट बनाएं"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "nc-001",
"name": "status",
"value": "कोई_परिवर्तन_नहीं",
"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": [
1280,
-32
],
"id": "aw333333-3333-3333-3333-aw3333333308",
"name": "कोई परिवर्तन नहीं"
},
{
"parameters": {
"httpMethod": "POST",
"path": "price-monitor-aws-waf",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-400,
432
],
"id": "aw333333-3333-3333-3333-aw3333333309",
"name": "मॉनिटर अनुरोध प्राप्त करें",
"webhookId": "aw333333-aaaa-bbbb-cccc-aw3333333309",
"onError": "continueRegularOutput"
},
{
"parameters": {
"operation": "AWS WAF",
"websiteURL": "https://YOUR-TARGET-SITE.com/product-page",
"optional": {}
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-96,
432
],
"id": "aw333333-3333-3333-3333-aw3333333310",
"name": "AWS WAF हल करें [वेबहुक]",
"credentials": {
"capSolverApi": {
"id": "BeBFMAsySMsMGeE9",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"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": "Cookie",
"value": "={{ $json.data.solution.cookie }}"
}
]
},
"options": {
"response": {
"response": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
208,
432
],
"id": "aw333333-3333-3333-3333-aw3333333311",
"name": "उत्पाद पृष्ठ प्राप्त करें [वेबहुक]"
},
{
"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,
432
],
"id": "aw333333-3333-3333-3333-aw3333333312",
"name": "डेटा निकालें [वेबहुक]"
},
{
"parameters": {
"jsCode": "// वर्कफ़्लो स्थैतिक डेटा से वर्तमान और पिछली कीमत प्राप्त करें\nconst staticData = $workflow.staticData;\nconst currentPrice = $input.first().json.price;\nconst previousPrice = staticData.lastPrice;\nconst productName = $input.first().json.productName || 'Product';\n\n// तुलना के लिए संख्यात्मक मान पार्स करें\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// संग्रहीत कीमत अपडेट करें\nstaticData.lastPrice = currentPrice;\nstaticData.lastChecked = new Date().toISOString();\n\nconst changed = previousNum !== null && currentNum !== null && currentNum !== previousNum;\nconst direction = changed ? (currentNum < previousNum ? 'गिरावट' : 'बढ़ोतरी') : 'अपरिवर्तित';\nconst diff = changed ? Math.abs(currentNum - previousNum).toFixed(2) : '0';\n\nreturn [{\n json: {\n productName,\n currentPrice,\n previousPrice: previousPrice || 'पहली जांच',\n changed,\n direction,\n diff: changed ? `$${diff}` : null,\n checkedAt: new Date().toISOString()\n }\n}];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
752,
432
],
"id": "aw333333-3333-3333-3333-aw3333333313",
"name": "डेटा तुलना करें [वेबहुक]"
},
{
"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.3,
"position": [
960,
432
],
"id": "aw333333-3333-3333-3333-aw3333333314",
"name": "डेटा बदला? [वेबहुक]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "alert-004",
"name": "alert",
"value": "=कीमत {{ $json.direction }} के लिए {{ $json.productName }}: {{ $json.previousPrice }} \u2192 {{ $json.currentPrice }} ({{ $json.direction === 'गिरावट' ? '-' : '+' }}{{ $json.diff }})",
"type": "string"
},
{
"id": "alert-005",
"name": "severity",
"value": "={{ $json.direction === 'गिरावट' ? 'deal' : 'info' }}",
"type": "string"
},
{
"id": "alert-006",
"name": "checkedAt",
"value": "={{ $json.checkedAt }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4, "position": [
1184,
320
],
"id": "aw333333-3333-3333-3333-aw3333333315",
"name": "अलर्ट बनाएं [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": [
1184,
480
],
"id": "aw333333-3333-3333-3333-aw3333333316",
"name": "कोई बदलाव नहीं [Webhook]"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
1376,
400
],
"id": "aw333333-3333-3333-3333-aw3333333317",
"name": "स्क्रैप किया गया डेटा लौटाएं"
}
],
"connections": {
"Every 6 Hours": {
"main": [
[
{
"node": "Solve AWS WAF",
"type": "main",
"index": 0
}
]
]
},
"Solve AWS WAF": {
"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
}
]
]
},
"Receive Monitor Request": {
"main": [
[
{
"node": "Solve AWS WAF [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Solve AWS WAF [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": "Return Scraped Data",
"type": "main",
"index": 0
}
]
]
},
"No Change [Webhook]": {
"main": [
[
{
"node": "Return Scraped Data",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"meta": {
"instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
}
}
यह वर्कफ़्लो AWS WAF-संरक्षित साइट में लॉगिन को स्वचालित करता है। एक लॉगिन कॉन्फ़िग सेट करें नोड सभी पैरामीटर केंद्रित करता है — [शेड्यूल] के लिए शेड्यूल पथ। अपने लक्षित साइट को कॉन्फ़िगर करने के लिए कॉन्फ़िग नोड संपादित करें।
शेड्यूल पथ:
हर 24 घंटे -> लॉगिन कॉन्फ़िग सेट करें -> कैप्चा हल करें -> लॉगिन सबमिट करें
-> लॉगिन सफल? -> लॉगिन सफलता चिह्नित करें / लॉगिन विफल चिह्नित करें
त्रुटि प्रबंधन: यदि CapSolver विफल होता है, तो निष्पादन रुक जाता है और n8n में विफल के रूप में चिह्नित किया जाता है। त्रुटि देखने के लिए Executions जांचें, या स्वचालित रूप से सूचित होने के लिए n8n के त्रुटि वर्कफ़्लो को कॉन्फ़िगर करें।
मुख्य व्यवहार:
AntiAwsWafTaskProxyLess का उपयोग करता है — अधिकांश साइटों के लिए प्रॉक्सी की आवश्यकता नहींwebsiteKey या tokenFieldName नहीं — AWS WAF को केवल websiteURL चाहिए, और टोकन को Cookie हेडर के रूप में सबमिट किया जाता है (फॉर्म फ़ील्ड नहीं)statusCode < 400 और प्रतिक्रिया बॉडी में कॉन्फ़िगर किए गए successMarker की उपस्थिति का मूल्यांकन करती है{
"nodes": [
{
"parameters": {
"content": "## AWS WAF खाता लॉगिन — CapSolver + शेड्यूल + Webhook\n\n### यह कैसे काम करता है\n\n1. हर 24 घंटे या API अनुरोध के माध्यम से लॉगिन प्रक्रिया शुरू करता है।\n2. शेड्यूल किए गए लॉगिन के लिए लॉगिन क्रेडेंशियल्स कॉन्फ़िगर करता है।\n3. लॉगिन फॉर्म तक पहुँचने के लिए CAPTCHA चुनौतियों को हल करता है।\n4. लॉगिन क्रेडेंशियल्स सबमिट करता है और जांचता है कि लॉगिन सफल है या नहीं।\n5. लॉगिन प्रयास की सफलता या विफलता रिकॉर्ड करता है।\n\n### सेटअप चरण\n\n- [ ] AWS WAF सेटिंग्स कॉन्फ़िगर करें।\n- [ ] CapSolver API कुंजी प्राप्त करें और नोड्स में कॉन्फ़िगर करें।\n- [ ] कॉन्फ़िगरेशन नोड्स में लॉगिन URL और क्रेडेंशियल्स मान सेट करें।\n- [ ] लॉगिन अनुरोध प्राप्त करने के लिए webhook एंडपॉइंट सेटअप करें।\n\n### अनुकूलन\n\nलॉगिन URL और क्रेडेंशियल्स कॉन्फ़िगरेशन नोड्स में अनुकूलित किए जा सकते हैं।",
"width": 480,
"height": 896
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1248,
-336
],
"id": "78cd7411-d26c-407e-801e-2b2615562f95",
"name": "Sticky Note"
},
{
"parameters": {
"content": "## शेड्यूल्ड लॉगिन ट्रिगर\n\nहर 24 घंटे लॉगिन प्रक्रिया शुरू करता है और लॉगिन कॉन्फ़िगरेशन सेट करता है।",
"width": 480,
"height": 304,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-672,
-208
],
"id": "2e6b7fa9-b0d8-467f-b2b2-b172759f6777",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "## शेड्यूल्ड लॉगिन प्रक्रिया\n\nCAPTCHA हल करता है, लॉगिन सबमिट करता है, और शेड्यूल्ड लॉगिन के लिए सफलता का मूल्यांकन करता है।",
"width": 1040,
"height": 464,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-80,
-336
],
"id": "9bbac73d-4660-47c7-8241-9f8c80a0632b",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "## Webhook लॉगिन ट्रिगर\n\nWebhook के माध्यम से लॉगिन अनुरोध प्राप्त करता है और लॉगिन प्रक्रिया शुरू करता है।",
"width": 240,
"height": 320,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-688,
272
],
"id": "f4ad8340-abdb-46b1-81b0-68f5c0111960",
"name": "Sticky Note3"
},
{
"parameters": {
"content": "## Webhook लॉगिन प्रक्रिया\n\nCAPTCHA प्रोसेस करता है, लॉगिन सबमिट करता है, सफलता जांचता है, और Webhook के लिए परिणाम रिकॉर्ड करता है।",
"width": 1216,
"height": 496,
"color": 7
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-80,
160
],
"id": "11b031a7-a1d2-4061-ad42-08beefc91795",
"name": "Sticky Note4"
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 24
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
-624,
-80
],
"id": "aw666666-6666-6666-6666-aw6666666601",
"name": "हर 24 घंटे"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "login-001",
"name": "websiteURL",
"value": "https://YOUR-LOGIN-PAGE.com",
"type": "string"
},
{
"id": "login-008",
"name": "usernameField",
"value": "email",
"type": "string"
},
{
"id": "login-009",
"name": "passwordField",
"value": "password",
"type": "string"
},
{
"id": "login-010",
"name": "usernameValue",
"value": "your-email@example.com",
"type": "string"
},
{
"id": "login-011",
"name": "passwordValue",
"value": "YOUR_ACCOUNT_PASSWORD",
"type": "string"
},
{
"id": "login-013",
"name": "successMarker",
"value": "account-dashboard",
"type": "string"
},
{
"id": "login-014",
"name": "userAgent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-336,
-80
],
"id": "aw666666-6666-6666-6666-aw6666666602",
"name": "लॉगिन कॉन्फ़िग सेट करें [शेड्यूल]"
},
{
"parameters": {
"operation": "AWS WAF",
"websiteURL": "={{ $json.websiteURL }}"
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-32,
-80
],
"id": "aw666666-6666-6666-6666-aw6666666603",
"name": "कैप्चा हल करें [शेड्यूल]",
"credentials": {
"capSolverApi": {
"id": "BeBFMAsySMsMGeE9",
"name": "CapSolver account"
}
}
},
{
"parameters": {
"method": "POST",
"url": "https://YOUR-LOGIN-PAGE.com/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 }}"
},
{
"name": "Cookie",
"value": "={{ $json.data.solution.cookie }}"
}
]
},
"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 }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": true,
"neverError": true
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
272,
-96
],
"id": "aw666666-6666-6666-6666-aw6666666604",
"name": "लॉगिन सबमिट करें [शेड्यूल]"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "login-if-001",
"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.3,
"position": [
512,
-96
],
"id": "aw666666-6666-6666-6666-aw6666666605",
"name": "लॉगिन सफल? [शेड्यूल]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "login-015",
"name": "action", "value": "account_login",
"type": "string"
},
{
"id": "login-016",
"name": "status",
"value": "success",
"type": "string"
},
{
"id": "login-017",
"name": "message",
"value": "कॉन्फ़िगर किया गया खाता लॉगिन फ्लो सफल रहा",
"type": "string"
},
{
"id": "login-018",
"name": "checkedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
816,
-224
],
"id": "aw666666-6666-6666-6666-aw6666666606",
"name": "लॉगिन सफलता चिह्नित करें [अनुसूची]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "login-019",
"name": "action",
"value": "account_login",
"type": "string"
},
{
"id": "login-020",
"name": "status",
"value": "failed",
"type": "string"
},
{
"id": "login-021",
"name": "statusCode",
"value": "={{ $json.statusCode }}",
"type": "number"
},
{
"id": "login-022",
"name": "message",
"value": "लॉगिन प्रतिक्रिया कॉन्फ़िगर किए गए सफलता मार्कर से मेल नहीं खाती",
"type": "string"
},
{
"id": "login-023",
"name": "checkedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
816,
-32
],
"id": "aw666666-6666-6666-6666-aw6666666607",
"name": "लॉगिन विफल चिह्नित करें [अनुसूची]"
},
{
"parameters": {
"httpMethod": "POST",
"path": "account-login-aws-waf",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-640,
432
],
"id": "aw666666-6666-6666-6666-aw6666666608",
"name": "लॉगिन अनुरोध प्राप्त करें",
"webhookId": "aw666666-aaaa-bbbb-cccc-aw6666666608",
"onError": "continueRegularOutput"
},
{
"parameters": {
"operation": "AWS WAF",
"websiteURL": "={{ $json.body.websiteURL }}"
},
"type": "n8n-nodes-capsolver.capSolver",
"typeVersion": 1,
"position": [
-32,
464
],
"id": "aw666666-6666-6666-6666-aw6666666610",
"name": "कैप्चा हल करें [Webhook]",
"credentials": {
"capSolverApi": {
"id": "BeBFMAsySMsMGeE9",
"name": "CapSolver खाता"
}
}
},
{
"parameters": {
"method": "POST",
"url": "={{ $('Receive Login Request').item.json.body.loginActionURL }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "content-type",
"value": "application/x-www-form-urlencoded"
},
{
"name": "user-agent",
"value": "={{ $('Receive Login Request').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' }}"
},
{
"name": "Cookie",
"value": "={{ $json.data.solution.cookie }}"
}
]
},
"sendBody": true,
"contentType": "form-urlencoded",
"bodyParameters": {
"parameters": [
{
"name": "={{ $('Receive Login Request').item.json.body.usernameField || 'email' }}",
"value": "={{ $('Receive Login Request').item.json.body.usernameValue }}"
},
{
"name": "={{ $('Receive Login Request').item.json.body.passwordField || 'password' }}",
"value": "={{ $('Receive Login Request').item.json.body.passwordValue }}"
}
]
},
"options": {
"response": {
"response": {
"fullResponse": true,
"neverError": true
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
272,
464
],
"id": "aw666666-6666-6666-6666-aw6666666611",
"name": "लॉगिन सबमिट करें [Webhook]"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": false,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "login-if-002",
"leftValue": "={{ $json.statusCode < 400 && String($json.body || $json.data || '').includes($('Receive Login Request').item.json.body.successMarker) }}",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.3,
"position": [
576,
464
],
"id": "aw666666-6666-6666-6666-aw6666666612",
"name": "लॉगिन सफल? [Webhook]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "login-038",
"name": "action",
"value": "account_login",
"type": "string"
},
{
"id": "login-039",
"name": "status",
"value": "success",
"type": "string"
},
{
"id": "login-040",
"name": "message",
"value": "कॉन्फ़िगर किया गया खाता लॉगिन फ्लो सफल रहा",
"type": "string"
},
{
"id": "login-041",
"name": "checkedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
768,
272
],
"id": "aw666666-6666-6666-6666-aw6666666613",
"name": "लॉगिन सफलता चिह्नित करें [Webhook]"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "login-042",
"name": "action",
"value": "account_login",
"type": "string"
},
{
"id": "login-043",
"name": "status",
"value": "failed",
"type": "string"
},
{
"id": "login-044",
"name": "statusCode",
"value": "={{ $json.statusCode }}",
"type": "number"
},
{
"id": "login-045",
"name": "message",
"value": "लॉगिन प्रतिक्रिया कॉन्फ़िगर किए गए सफलता मार्कर से मेल नहीं खाती",
"type": "string"
},
{
"id": "login-046",
"name": "checkedAt",
"value": "={{ new Date().toISOString() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
768,
496
],
"id": "aw666666-6666-6666-6666-aw6666666614",
"name": "लॉगिन विफल चिह्नित करें [Webhook]"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
992,
448
],
"id": "aw666666-6666-6666-6666-aw6666666615",
"name": "लॉगिन परिणाम लौटाएं"
}
],
"connections": {
"Every 24 Hours": {
"main": [
[
{
"node": "Set Login Config [Schedule]",
"type": "main",
"index": 0
}
]
]
},
"Set Login Config [Schedule]": {
"main": [
[
{
"node": "Solve Captcha [Schedule]",
"type": "main",
"index": 0
}
]
]
},
"Solve Captcha [Schedule]": {
"main": [
[
{
"node": "Submit Login [Schedule]",
"type": "main",
"index": 0
}
]
]
},
"Submit Login [Schedule]": {
"main": [
[
{
"node": "Login Successful? [Schedule]",
"type": "main",
"index": 0
}
]
]
},
"Login Successful? [Schedule]": {
"main": [
[
{
"node": "Mark Login Success [Schedule]",
"type": "main",
"index": 0
}
],
[
{
"node": "Mark Login Failed [Schedule]",
"type": "main",
"index": 0
}
]
]
},
"Receive Login Request": {
"main": [
[
{
"node": "Solve Captcha [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Solve Captcha [Webhook]": {
"main": [
[
{
"node": "Submit Login [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Submit Login [Webhook]": {
"main": [
[
{
"node": "Login Successful? [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Login Successful? [Webhook]": {
"main": [
[
{
"node": "Mark Login Success [Webhook]",
"type": "main",
"index": 0
}
],
[
{
"node": "Mark Login Failed [Webhook]",
"type": "main",
"index": 0
}
]
]
},
"Mark Login Success [Webhook]": {
"main": [
[
{
"node": "Return Login Result",
"type": "main",
"index": 0
}
]
]
},
"Mark Login Failed [Webhook]": {
"main": [
[
{
"node": "Return Login Result",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"meta": {
"instanceId": "962ff0267b713be0344b866fa54daae28de8ed2144e2e6867da355dae193ea1f"
}
}
आपने सीखा कि कैसे n8n और CapSolver का उपयोग करके AWS WAF-समाधान API और उत्पादन-तैयार स्क्रैपिंग वर्कफ़्लो बनाए जाते हैं — बिना पारंपरिक कोडिंग के।
इस गाइड में हमने कवर किया:
मुख्य बात: AWS WAF टोकन reCAPTCHA और Turnstile से अलग काम करते हैं — इन्हें कुकीज़ के रूप में Cookie HTTP हेडर के माध्यम से सबमिट किया जाता है, न कि फॉर्म फ़ील्ड के रूप में। केवल websiteURL आवश्यक है (कोई साइट की कुंजी नहीं चाहिए), और समाधान solution.cookie लौटाता है न कि solution.token।
टिप: ये वर्कफ़्लो Schedule + Webhook ट्रिगर्स का उपयोग करते हैं, लेकिन आप ट्रिगर नोड को किसी भी n8n ट्रिगर — मैनुअल, ऐप इवेंट, फॉर्म सबमिशन आदि में बदल सकते हैं। डेटा प्राप्त करने के बाद, n8n के बिल्ट-इन नोड्स का उपयोग करके परिणाम Google Sheets, डेटाबेस, क्लाउड स्टोरेज में सहेजें या Telegram/Slack/Email के माध्यम से अलर्ट भेजें।
शुरू करने के लिए तैयार हैं? CapSolver के लिए साइन अप करें और अपने पहले रिचार्ज पर अतिरिक्त 8% बोनस के लिए बोनस कोड n8n का उपयोग करें!

AWS WAF (वेब एप्लिकेशन फ़ायरवॉल) अमेज़न की वेब सुरक्षा सेवा है जो वेबसाइटों को बॉट्स, स्क्रैपर्स और अन्य स्वचालित खतरों से बचाती है। यह अदृश्य CAPTCHA चुनौतियां प्रस्तुत कर सकता है जिन्हें बायपास करने के लिए aws-waf-token कुकी की आवश्यकता होती है। कई एंटरप्राइज़ और ई-कॉमर्स साइटें इसका उपयोग करती हैं।
मूल्य निर्धारण कार्य की जटिलता पर निर्भर करता है। वर्तमान AWS WAF दरों के लिए CapSolver मूल्य पृष्ठ देखें।
अधिकांश AWS WAF चुनौतियां साइट की कॉन्फ़िगरेशन और प्रदान किए गए पैरामीटर के आधार पर 5-30 सेकंड में हल हो जाती हैं। वैकल्पिक पैरामीटर जैसे awsKey, awsIv, और awsContext प्रदान करने से हल करने की गति और विश्वसनीयता बेहतर हो सकती है।
हाँ! ये वर्कफ़्लो स्व-होस्टेड n8n और n8n क्लाउड दोनों के साथ काम करते हैं। CapSolver नोड पहले से ही एक आधिकारिक इंटीग्रेशन के रूप में उपलब्ध है — बस अपनी API क्रेडेंशियल्स जोड़ें।
सबसे सरल तरीका: लक्षित साइट खोलें, कुकीज़ में aws-waf-token देखें (DevTools के Application टैब में), और captcha.awswaf.com के लिए नेटवर्क अनुरोध देखें। अधिकांश साइटों के लिए केवल websiteURL की आवश्यकता होती है।
इसके कई कारण हो सकते हैं। सबसे पहले, कुकीज़ जल्दी समाप्त हो जाती हैं — सुनिश्चित करें कि आप हल करने के तुरंत बाद कुकी का उपयोग कर रहे हैं। दूसरा, सुनिश्चित करें कि आप कुकी सही तरीके से भेज रहे हैं: इसे Cookie HTTP हेडर में भेजना चाहिए (फॉर्म फ़ील्ड या कस्टम हेडर में नहीं)। तीसरा, कुछ साइटों को अतिरिक्त पैरामीटर जैसे awsContext या awsChallengeJS की आवश्यकता हो सकती है — जांच के लिए CapSolver एक्सटेंशन का उपयोग करें। चौथा, कुछ कड़े साइटों को AntiAwsWafTask प्रकार (प्रॉक्सी के साथ) की आवश्यकता हो सकती है बजाय AntiAwsWafTaskProxyLess के। यदि कुकी अभी भी अस्वीकार की जाती है, तो साइट-विशिष्ट सहायता के लिए CapSolver सपोर्ट से संपर्क करें।
Rust में वेब स्क्रैपिंग के स्केलेबल आर्किटेक्चर सीखें, reqwest, scraper, असिंक्रोनस स्क्रैपिंग, हेडलेस ब्राउज़र स्क्रैपिंग, प्रॉक्सी रोटेशन, और संगत CAPTCHA का निपटारा।

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