Playwright JSON अनुरोध में हल किया गया टोकन सबमिट करें
एप्लिकेशन के ज्ञात JSON POST को इंटरसेप्ट करें और उसके CAPTCHA फ़ील्ड को solution.token से बदलें। अगर एप्लिकेशन JavaScript स्टेट से अपना अनुरोध बनाता है, तो textarea भरने से मदद नहीं मिलेगी।
नीचे दिया गया उदाहरण आपके स्वामित्व वाले एप्लिकेशन के समान-ऑरिजिन सबमिशन एंडपॉइंट को लक्षित करता है। यह अनुरोध को दोबारा बनाने के बजाय अन्य JSON फ़ील्ड और अनुरोध हेडर को बनाए रखता है।
इस पेज पर
उदाहरण को अपने एप्लिकेशन के अनुसार ढालें
- 1.
सॉल्वर तैयार करें
Node.js 22+, Playwright और आधिकारिक JavaScript SDK का उपयोग करें। SDK इंस्टॉलेशन निर्देशों का पालन करें; npm रजिस्ट्री पर पैकेज उपलब्ध मानने के बजाय दस्तावेज़ों में दिए गए पैकेज डाउनलोड का उपयोग करें।
SOLVETHREE_API_KEYको Node.js प्रोसेस में रखें, ब्राउज़र कोड में नहीं। - 2.
साइट और प्रॉक्सी कॉन्फ़िगर करें
TARGET_URLको अपने स्वामित्व वाले टेस्ट पेज के URL पर औरSOLVETHREE_PROXYको उसके HTTP या HTTPS प्रॉक्सी URL पर सेट करें। यह उदाहरण पेज के होस्टनेम के लिए ऐक्शनloginका अनुरोध करता है। उस होस्टनेम के लिए एक सक्रिय वर्कस्पेस प्रोफ़ाइल ज़रूरी है; पहले साइट प्रोफ़ाइल कॉन्फ़िगर करें। यदि आपका एप्लिकेशन कोई दूसरा ऐक्शन उपयोग करता है, तो ऐक्शन बदलें। - 3.
सटीक सबमिशन पहचानें
TARGET_SUBMIT_URLको JSON POST एंडपॉइंट पर सेट करें, जिसमें उसका पाथ भी शामिल हो। उसका ओरिजिन पेज के ओरिजिन के समान होना चाहिए। उदाहरण को एक ऐसा ऑब्जेक्ट चाहिए जिसमेंrecaptchaTokenहो और एक ऐसा बटन जिसका सुलभ नाम ठीकSubmitहो। एप्लिकेशन-विशिष्ट इन विवरणों को एक साथ बदलें।
टेस्ट फ़िक्स्चर के लिए ऐसा पेज उपयोग करें जो उस एंडपॉइंट पर JSON ऑब्जेक्ट भेजता हो और जाँचने योग्य रिस्पॉन्स लौटाता हो। एक अन्य फ़ील्ड और एक CSRF फ़ील्ड शामिल करें, ताकि आप जाँच सकें कि दोनों में कोई बदलाव नहीं हुआ है। केवल इको करने वाला लोकल फ़िक्स्चर JSON में बदलाव दिखा सकता है, लेकिन यह CAPTCHA स्वीकार किए जाने की पुष्टि नहीं करता। दिए गए उदाहरण में फिर भी वास्तविक CAPTCHA हल किया जाता है और इसके लिए ऐसी कॉन्फ़िगर की गई साइट चाहिए जिस तक प्रॉक्सी के ज़रिए पहुँचा जा सके।
हल करें, इंटरसेप्ट करें और सबमिट करें
import { chromium } from 'playwright';
import { Solvethree } from '@solvethree/sdk';
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
const target = new URL(process.env.TARGET_URL);
const proxy = new URL(process.env.SOLVETHREE_PROXY);
const result = await client.solve({ site: target.hostname, action: 'login', proxy: process.env.SOLVETHREE_PROXY });
const proxyConfig = { server: `${proxy.protocol}//${proxy.host}`, username: decodeURIComponent(proxy.username), password: decodeURIComponent(proxy.password) };
const submit = new URL(process.env.TARGET_SUBMIT_URL);
if (submit.origin !== target.origin) throw new Error('Use this demo with a same-origin submission URL');
const browser = await chromium.launch();
try {
const context = await browser.newContext({ proxy: proxyConfig, userAgent: result.solution.userAgent,
extraHTTPHeaders: { 'sec-ch-ua': result.solution.secChUa } });
const page = await context.newPage();
await page.route(submit.href, async route => {
if (route.request().method() !== 'POST') return route.continue();
const body = route.request().postDataJSON();
if (!body || typeof body !== 'object' || Array.isArray(body)) throw new Error('Expected the known JSON object');
await route.continue({ postData: JSON.stringify({ ...body, recaptchaToken: result.solution.token }),
headers: { ...route.request().headers(), 'content-type': 'application/json' } });
});
await page.goto(target.href);
const outcome = page.waitForResponse(r => r.url() === submit.href && r.request().method() === 'POST');
await page.getByRole('button', { name: 'Submit', exact: true }).click();
console.log('Application HTTP status:', (await outcome).status());
// recaptchaToken, the Submit button and this endpoint belong to this demo app.
// Adapt them to the real application, retaining its session/CSRF data.
await context.close();
} finally { await browser.close(); }client.solve टास्क बनाता है और उसके तैयार होने तक पोलिंग करता है या अपवाद फेंकता है। इसके बाद उदाहरण solution.userAgent, solution.secChUa और हल करने के अनुरोध में दी गई उसी एक प्रॉक्सी का उपयोग करके ब्राउज़र कॉन्टेक्स्ट बनाता है। SDK समाधान को ब्राउज़र पर लागू नहीं करता; रूट हैंडलर यह काम करता है।
ब्राउज़र कॉन्टेक्स्ट नया है। यदि सबमिशन के लिए प्रमाणीकरण या अन्य सेशन सेटअप ज़रूरी है, तो सबमिट करने से पहले उसे इसी कॉन्टेक्स्ट में पूरा करें। उदाहरण किसी मौजूदा ब्राउज़र सेशन को इम्पोर्ट नहीं करता।
टोकन बदलें, पूरा अनुरोध नहीं
रूट नेविगेशन से पहले रजिस्टर किया जाता है और केवल कॉन्फ़िगर किए गए सबमिशन URL तक सीमित रहता है। गैर-POST अनुरोध बिना बदलाव के आगे बढ़ते हैं। POST के लिए, हैंडलर मौजूदा JSON ऑब्जेक्ट पढ़ता है, उसके फ़ील्ड कॉपी करता है और केवल recaptchaToken बदलता है।
इससे फ़ॉर्म वैल्यू और CSRF डेटा जैसे बॉडी फ़ील्ड बरकरार रहते हैं। हैंडलर अनुरोध के हेडर भी कॉपी करता है और कॉन्टेंट टाइप को JSON पर सेट करता है। एप्लिकेशन का मौजूदा सेशन और CSRF व्यवहार बनाए रखें; हल किया गया टोकन इनमें से किसी की जगह नहीं लेता।
रूट का दायरा बढ़ाकर हर अनुरोध को शामिल न करें और न ही किसी ऐसे फ़ील्ड को बदलें जो टोकन जैसा दिखता हो। अपने स्वामित्व वाले एप्लिकेशन के आउटगोइंग अनुरोध की जाँच करें और उसके वास्तविक फ़ील्ड नाम का उपयोग करें। यह उदाहरण विजेट नहीं खोजता, मनमाने कॉलबैक नहीं चलाता और मनमाने तृतीय-पक्ष पेजों का समर्थन नहीं करता। Playwright के नेटवर्क दस्तावेज़ में इंटरसेप्शन की कार्यप्रणाली दी गई है।
एप्लिकेशन रिस्पॉन्स जाँचें
रिस्पॉन्स का इंतज़ार क्लिक से पहले शुरू होता है और सबमिशन URL तथा POST मेथड से मिलान करता है। लॉग किया गया स्टेटस एप्लिकेशन के रिस्पॉन्स का होता है—solvethree टास्क का नहीं। एप्लिकेशन के अपने सफलता मानदंडों के अनुसार उस रिस्पॉन्स की बॉडी या एप्लिकेशन की परिणामी स्थिति की जाँच करें। केवल टास्क का तैयार होना या HTTP सफलता स्टेटस यह साबित नहीं करता कि एप्लिकेशन ने टोकन स्वीकार कर लिया।
- रिस्पॉन्स का इंतज़ार कभी पूरा नहीं होता।
जाँचें कि क्या वही विशिष्ट Submit बटन कॉन्फ़िगर किए गए URL पर POST भेजता है।
यह आज़माएँ: बटन लोकेटर, एंडपॉइंट या मेथड को एप्लिकेशन के अनुसार ठीक करें। इंटरसेप्शन का दायरा असंबंधित ट्रैफ़िक तक न बढ़ाएँ।
- रूट JSON ऑब्जेक्ट नहीं पढ़ पा रहा है।
अनुरोध की बॉडी और कॉन्टेंट टाइप की जाँच करें।
यह आज़माएँ: इस हैंडलर का उपयोग केवल ज्ञात JSON-ऑब्जेक्ट एंडपॉइंट के लिए करें। फ़ॉर्म डेटा, ऐरे और अन्य पेलोड फ़ॉर्मैट को अलग तरीके से संभालना पड़ता है।
- टास्क तैयार है, लेकिन एप्लिकेशन सबमिशन अस्वीकार कर देता है।
आउटगोइंग JSON में
solution.tokenकी जाँच करें, फिर सेशन/CSRF डेटा, ऐक्शन, लौटाई गई ब्राउज़र पहचान और प्रॉक्सी जाँचें।यह आज़माएँ: दोबारा हल करवाने के लिए भुगतान करने से पहले बेमेल अनुरोध को ठीक करें। ब्राउज़र को हल करने के लिए उपयोग की गई प्रॉक्सी पर रखें और लौटाई गई पहचान का उपयोग करें।
- ब्राउज़र खुलने से पहले ही हल करने की प्रक्रिया विफल हो जाती है।
HTTP अनुरोध की त्रुटि और टास्क की अंतिम विफलता में अंतर करें। विफल टास्क के लिए
errorCodeऔरerrorकी जाँच करें।यह आज़माएँ: बिना बदलाव वाले इनपुट से दोबारा कोशिश करने के बजाय बताई गई इनपुट, प्रोफ़ाइल या कनेक्टिविटी समस्या ठीक करें। API त्रुटियाँ संभालना देखें।
स्रोत और API संदर्भ
अपना पहला टास्क चलाएँ।
$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।