Puppeteer के साथ CAPTCHA सॉल्वर इस्तेमाल करें

solvethree द्वारापढ़ने में 4 मिनट

reCAPTCHA v3 Enterprise टोकन पाने के लिए आधिकारिक JavaScript SDK इस्तेमाल करें, फिर Puppeteer के ज़रिए solution.token अपने फ़ॉर्म में भेजें। SDK टास्क हल करता है; यह समाधान को ब्राउज़र पर लागू नहीं करता और न ही ब्राउज़र प्लगइन देता है।

नीचे दिया गया उदाहरण आपके स्वामित्व वाले ऐसे HTTPS फ़ॉर्म के लिए है, जिसमें g-recaptcha-response textarea और सबमिट बटन है। ये डेमो की फ़ॉर्म आवश्यकताएँ हैं, reCAPTCHA से सुरक्षित पेजों के लिए कोई सार्वभौमिक इंटरफ़ेस नहीं।

इस पेज पर

डिपेंडेंसी और अपने स्वामित्व वाला फ़ॉर्म तैयार करें

  1. 1.

    Puppeteer और SDK इंस्टॉल करें

    Node.js 22 या बाद का संस्करण इस्तेमाल करें। npm से puppeteer और https://solvethree.com/downloads/solvethree-sdk-0.1.0.tgz पर मौजूद आधिकारिक SDK tarball इंस्टॉल करें। SDK को @solvethree/sdk के रूप में इम्पोर्ट किया जाता है; npm रजिस्ट्री पर रिलीज़ उपलब्ध मानने के बजाय डाउनलोड URL इस्तेमाल करें। उदाहरण को ES मॉड्यूल के रूप में सेव करें, जैसे .mjs से समाप्त होने वाली फ़ाइल।

  2. 2.

    साइट प्रोफ़ाइल कॉन्फ़िगर करें

    solvethree कंसोल में अपने स्वामित्व वाला होस्टनेम सेट करें और सुनिश्चित करें कि उसकी प्रोफ़ाइल आपके वर्कस्पेस के लिए सक्रिय है। होस्टनेम और ऐक्शन भेजने से वह प्रोफ़ाइल नहीं बनती। उदाहरण में login ऐक्शन इस्तेमाल होता है; इसे अपने एप्लिकेशन के लिए कॉन्फ़िगर किए गए ऐक्शन से बदलें।

  3. 3.

    एनवायरनमेंट वेरिएबल सेट करें

    TARGET_URL को अपने स्वामित्व वाले HTTPS फ़ॉर्म पर, SOLVETHREE_PROXY को अपने HTTP या HTTPS प्रॉक्सी URL पर और SOLVETHREE_API_KEY को अपने वर्कस्पेस की कुंजी पर सेट करें। कुंजी को Node.js प्रोसेस में रखें, पेज के JavaScript में नहीं। उदाहरण हल करने और ब्राउज़र से सबमिट करने, दोनों के लिए एक ही प्रॉक्सी इस्तेमाल करता है।

टास्क का site, TARGET_URL से निकाला गया होस्टनेम है, पूरे पेज का URL नहीं। reCAPTCHA के लिए site, action और proxy या proxyCandidates में से ठीक एक भेजें; type या url फ़ील्ड न जोड़ें। यह उदाहरण proxy इस्तेमाल करता है, ताकि Puppeteer सीधे उसी प्रॉक्सी का इस्तेमाल कर सके।

हल करें, फिर उसी पहचान के साथ Puppeteer खोलें

Puppeteer + Node.js · अपने स्वामित्व वाले HTTPS फ़ॉर्म को हल करें
// Install puppeteer and the official solvethree SDK first.
import puppeteer from 'puppeteer';
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 puppeteer.launch({
  args: [`--proxy-server=${proxy.protocol}//${proxy.host}`],
});
try {
  const page = await browser.newPage();
  if (proxy.username) await page.authenticate({
    username: decodeURIComponent(proxy.username),
    password: decodeURIComponent(proxy.password),
  });
  await page.setUserAgent({ userAgent: result.solution.userAgent });
  await page.setExtraHTTPHeaders({ 'sec-ch-ua': result.solution.secChUa });
  await page.goto(target.href);
  // Adapt these selectors and any required callback to your own form.
  await page.waitForSelector('[name="g-recaptcha-response"]');
  await page.$eval('[name="g-recaptcha-response"]', (field, token) => {
    field.value = token;
    field.dispatchEvent(new Event('input', { bubbles: true }));
  }, result.solution.token);
  await Promise.all([
    page.waitForNavigation({ waitUntil: 'domcontentloaded' }),
    page.click('button[type="submit"]'),
  ]);
  // Check your application's success response here.
} finally {
  await browser.close();
}

client.solve टास्क को एक बार बनाता है और उसके तैयार होने या अपवाद फेंकने तक पोल करता है। इसके लौटने के बाद ही यह उदाहरण Puppeteer शुरू करता है। ब्राउज़र टास्क की प्रॉक्सी इस्तेमाल करता है, प्रॉक्सी क्रेडेंशियल मौजूद होने पर प्रमाणीकरण करता है और नेविगेट करने से पहले solution.userAgent तथा solution.secChUa लागू करता है।

टोकन सबमिट करते समय उस प्रॉक्सी या ब्राउज़र पहचान को असंबंधित मानों से न बदलें। अगर बाद में आप proxyCandidates पर स्विच करते हैं, तो ब्राउज़र के लिए सफल रही मूल प्रॉक्सी चुनने हेतु SDK के successfulProxy हेल्पर का इस्तेमाल करें।

अगर हल करना विफल हो जाए, तो बिना बदले इनपुट के साथ दोबारा कोशिश करने के बजाय टास्क के errorCode और error की जाँच करें। HTTP अनुरोध त्रुटियाँ, अंतिम टास्क विफलताओं से अलग हैं। ब्राउज़र का काम पूरा होने के बाद finally ब्लॉक स्थानीय ब्राउज़र बंद करता है; पेज बंद करना रिमोट टास्क रद्द करने का तरीका नहीं है।

डेमो की फ़ॉर्म संबंधी धारणाएँ बदलें

  • [name="g-recaptcha-response"] डेमो का textarea चुनता है। अगर आपका एप्लिकेशन किसी दूसरे फ़ील्ड या अनुरोध पैरामीटर से टोकन प्राप्त करता है, तो इसे बदलें। सबमिट किया जाने वाला मान solution.token है, टास्क ID नहीं।
  • button[type="submit"] डेमो का सबमिट बटन चुनता है। अपने एप्लिकेशन के वास्तविक कंट्रोल या सबमिशन तंत्र का इस्तेमाल करें।
  • उदाहरण टोकन सेट करता है और input इवेंट डिस्पैच करता है। यह एप्लिकेशन-विशिष्ट कॉलबैक का विकल्प नहीं है। सबमिशन से पहले ज़रूरी कॉलबैक, CSRF मान, लॉगिन फ़ील्ड और सेशन सेटअप जोड़ें।
  • अंत में दी गई सफलता-जाँच की टिप्पणी को अपने एप्लिकेशन की प्रतिक्रिया या परिणामस्वरूप बनी स्टेट के विरुद्ध असर्शन से बदलें। सॉल्वर टास्क तैयार होने से यह साबित नहीं होता कि एप्लिकेशन ने टोकन स्वीकार कर लिया है।

अगर आप पहले से चल रहे ब्राउज़र का दोबारा इस्तेमाल करते हैं, तो उसका BrowserContext सोच-समझकर चुनें: नया पेज अपने-आप अलग सेशन नहीं होता। असंबंधित वर्कफ़्लो के पेज मिलाने के बजाय फ़ॉर्म की सेशन आवश्यकताओं को एक साथ रखें।

अपना पहला टास्क चलाएँ।

$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।

वर्कस्पेस बनाएँ
Puppeteer के साथ CAPTCHA सॉल्वर इस्तेमाल करें · solvethree