Playwright के साथ CAPTCHA सॉल्वर इस्तेमाल करें
पहले reCAPTCHA Enterprise टास्क हल करें, फिर Playwright में अपने एप्लिकेशन के फ़ॉर्म के ज़रिए solution.token सबमिट करें। उस ब्राउज़र अनुरोध के लिए उसी प्रॉक्सी और लौटाई गई ब्राउज़र पहचान का इस्तेमाल करें।
नीचे दिया गया उदाहरण आपके स्वामित्व वाले ऐसे HTTPS फ़ॉर्म के लिए है, जिसका टोकन फ़ील्ड और Submit बटन ज्ञात है। यह SDK से फ़ॉर्म तक का स्पष्ट हैंडऑफ़ है, ब्राउज़र प्लगइन नहीं।
इस पेज पर
डिपेंडेंसी और अपने स्वामित्व वाला पेज तैयार करें
- 1.
Node.js 22+, Playwright और Chromium इंस्टॉल करें
playwrightपैकेज और उसकी Chromium ब्राउज़र बाइनरी इंस्टॉल करें। डाउनलोड किए जा सकने वालेsolvethree-sdk-0.1.0.tgzपैकेज से आधिकारिक solvethree JavaScript SDK इंस्टॉल करें; Node.js इंटीग्रेशन के निर्देशों में सीधे डाउनलोड से इंस्टॉल करने की कमांड दी गई है। - 2.
solvethree में होस्टनेम कॉन्फ़िगर करें
आपके स्वामित्व वाले HTTPS पेज के होस्टनेम के लिए आपके वर्कस्पेस में एक सक्रिय reCAPTCHA प्रोफ़ाइल उपलब्ध होनी चाहिए। उदाहरण चलाने से पहले इसे कंसोल में सेट करें। टास्क में होस्टनेम और ऐक्शन भेजने से प्रोफ़ाइल नहीं बनती।
- 3.
तीनों एनवायरनमेंट वेरिएबल सेट करें
TARGET_URLको अपने स्वामित्व वाले HTTPS पेज के पूरे URL पर,SOLVETHREE_PROXYको प्रॉक्सी URL पर औरSOLVETHREE_API_KEYको अपने वर्कस्पेस की API कुंजी पर सेट करें। स्क्रिप्ट सर्वर-साइड चलाएँ; API कुंजी को पेज के JavaScript में न रखें। उदाहरण मेंloginऐक्शन इस्तेमाल होता है; अगर आपका एप्लिकेशन कोई दूसरा ऐक्शन इस्तेमाल करता है, तो इसे बदलें। - 4.
उदाहरण वाला फ़ॉर्म उपलब्ध कराएँ
पेज में
g-recaptcha-responseनाम का textarea और ऐसा बटन होना चाहिए जिसका सुलभ नाम ठीकSubmitहो। अगर आपका फ़ॉर्म अलग है, तो चलाने से पहले नीचे बताए गए हैंडऑफ़ को उसके अनुसार बदलें।
टास्क की प्रॉक्सी और Playwright की ब्राउज़र प्रॉक्सी अलग-अलग कॉन्फ़िगर की जाती हैं। ब्राउज़र कॉन्टेक्स्ट की प्रॉक्सी SDK के सर्वर-साइड API अनुरोधों को अपने-आप रूट नहीं करती। यह उदाहरण टास्क को एक प्रॉक्सी देता है और ब्राउज़र के लक्ष्य ट्रैफ़िक के लिए उसी का दोबारा इस्तेमाल करता है।
हल करें, फिर Playwright से सबमिट करें
// Install playwright and the official solvethree SDK first.
import { chromium } from 'playwright';
import { Solvethree } from '@solvethree/sdk';
const target = new URL(process.env.TARGET_URL); // Your configured HTTPS page.
const proxy = new URL(process.env.SOLVETHREE_PROXY);
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
const result = await client.solve({
site: target.hostname, action: 'login', proxy: process.env.SOLVETHREE_PROXY,
});
const browser = await chromium.launch();
try {
const context = await browser.newContext({
proxy: {
server: `${proxy.protocol}//${proxy.host}`,
username: decodeURIComponent(proxy.username),
password: decodeURIComponent(proxy.password),
},
userAgent: result.solution.userAgent,
extraHTTPHeaders: { 'sec-ch-ua': result.solution.secChUa },
});
const page = await context.newPage();
await page.goto(target.href);
// This example form has this field and a button named Submit.
// Adapt the selectors/callback to your own application's form contract.
await page.locator('[name="g-recaptcha-response"]').waitFor({ state: 'attached' });
await page.locator('[name="g-recaptcha-response"]').evaluate((field, token) => {
field.value = token;
field.dispatchEvent(new Event('input', { bubbles: true }));
}, result.solution.token);
await Promise.all([
page.waitForResponse(response =>
response.request().method() === 'POST' &&
new URL(response.url()).origin === target.origin),
page.getByRole('button', { name: 'Submit', exact: true }).click(),
]);
// Check your application's success response here.
} finally {
await browser.close();
}solve टास्क को एक बार बनाता है और उसके तैयार होने या अपवाद फेंकने तक पोल करता है। ब्राउज़र तभी शुरू होता है जब वह कॉल सफल हो जाए। इसका कॉन्टेक्स्ट मूल प्रॉक्सी का इस्तेमाल करता है, जिसमें URL-encoded क्रेडेंशियल भी शामिल हैं, साथ ही लौटाए गए solution.userAgent और solution.secChUa का भी।
फ़ॉर्म को solution.token मिलता है, टास्क ID नहीं। उदाहरण फ़ील्ड के अटैच होने का इंतज़ार करता है, क्योंकि टोकन textarea का दिखाई देना ज़रूरी नहीं है। यह टोकन सेट करता है, input इवेंट डिस्पैच करता है और फिर Submit पर क्लिक करता है।
TARGET_URLआपके एप्लिकेशन का है। सॉल्वर टास्क को इसका होस्टनेमsiteके रूप में मिलता है; Playwright पूरे URL पर जाता है।loginउदाहरण का ऐक्शन है। इसे अपने एप्लिकेशन में इस्तेमाल होने वाले ऐक्शन से बदलें।[name="g-recaptcha-response"]उदाहरण के टोकन फ़ील्ड का सेलेक्टर है। अगर आपका एप्लिकेशन किसी दूसरे फ़ील्ड या अनुरोध पैरामीटर में टोकन की अपेक्षा करता है, तो इसे बदलें।Submitउदाहरण के बटन का सुलभ नाम है। उस लोकेटर को बदलें या अपने एप्लिकेशन के वास्तविक सबमिशन पथ का इस्तेमाल करें।- input इवेंट इस डेमो के हैंडऑफ़ का हिस्सा है। किसी वास्तविक एप्लिकेशन को कॉलबैक, एप्लिकेशन स्टेट अपडेट, CSRF मान या मौजूदा सेशन की भी ज़रूरत हो सकती है। टोकन भरने के लिए कोई सार्वभौमिक कॉलबैक नहीं है।
अगर फ़ॉर्म टोकन स्वीकार नहीं करता
एक और समाधान के लिए भुगतान करने से पहले, Playwright में अनुरोध और प्रतिक्रिया की निगरानी का इस्तेमाल करके एप्लिकेशन के बाहर जाने वाले अनुरोध की जाँच करें। टास्क तैयार होने का मतलब है कि समाधान उपलब्ध है; एप्लिकेशन की प्रतिक्रिया बताती है कि सबमिशन स्वीकार हुआ या नहीं।
- सबमिट किया गया टोकन मौजूद नहीं है या बदला नहीं है।
वास्तविक अनुरोध पैरामीटर की जाँच करें, सिर्फ़ textarea के मान की नहीं।
यह आज़माएँ:
solution.tokenको एप्लिकेशन के वास्तविक सबमिशन पथ से भेजें। अगर एप्लिकेशन अपना अनुरोध अलग स्टेट से बनाता है, तो डेमो फ़ील्ड को अपडेट करने से मदद नहीं मिलेगी।- अनुरोध में टोकन है, लेकिन उसे अस्वीकार कर दिया जाता है।
सबमिशन की प्रॉक्सी, यूज़र एजेंट, क्लाइंट हिंट, लक्ष्य होस्टनेम और ऐक्शन की तुलना समाधान में इस्तेमाल हुए मानों से करें। एप्लिकेशन की सेशन और CSRF आवश्यकताओं की जाँच करें।
यह आज़माएँ: हल करने और सबमिट करने के लिए एक ही प्रॉक्सी रखें, लौटाई गई ब्राउज़र पहचान लागू करें और सबमिट करने से पहले एप्लिकेशन की फ़ॉर्म आवश्यकताएँ पूरी करें।
- स्क्रिप्ट ब्राउज़र खोलने से पहले विफल हो जाती है।
HTTP अनुरोध त्रुटि और अंतिम रूप से विफल टास्क के बीच अंतर करें। विफल टास्क के लिए
errorCodeऔरerrorकी जाँच करें।यह आज़माएँ: बिना बदले इनपुट बार-बार सबमिट करने के बजाय, बताई गई इनपुट, प्रोफ़ाइल या कनेक्टिविटी की समस्या ठीक करें। विफलता पर SDK अपवाद फेंकता है; टोकन भरने वाले चरण पर आगे न बढ़ें।
स्रोत और API संदर्भ
अपना पहला टास्क चलाएँ।
$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।