पुपेटियर फॉर्म सबमिट: विश्वसनीय फॉर्म स्वचालन के लिए एक व्यावहारिक गाइड
Lead Scraping Automation Engineer
संक्षेप में:
- विश्वसनीय फॉर्म सबमिशन तीन कदम हैं: भरना, सबमिट करना, इंतज़ार करना। इनपुट में टाइप करें, सबमिट ट्रिगर करें, और नेविगेशन का
awaitकरें - क्लिक की रेस मेंwaitForNavigationका उपयोग करें ताकि आप पृष्ठ को कभी न पढ़ें इससे पहले कि यह बदले। - इनपुट को कंट्रोल से मिलाएँ। टेक्स्ट के लिए
page.type()का इस्तेमाल करें, जिस रेडियो/चेकबॉक्स पर क्लिक करना है उसके लिएpage.click()करें, ड्रॉपडाउन के लिएpage.select()करें - गलत कंट्रोल प्रकार का सबमिट करना सबसे आम चुप्पी असफलता है। - सबमिट और इंतज़ार को
Promise.allहोना चाहिए। पहले क्लिक करें, फिर नेविगेशन का इंतज़ार करें, और नेविगेशन आपके सुनने शुरू करने से पहले समाप्त हो सकता है। दोनों का एक साथ इंतज़ार करना लॉगिन और मल्टी-स्टेप फॉर्म्स को निर्धारित करता है। - फॉर्म्स वही जगह हैं जहाँ बॉट दीवारें सबसे अधिक प्रभावित करती हैं। लॉगिन और चेकआउट पेजों की उंगलियों के निशान आक्रामक होते हैं; एक एंटी-डिटेक्शन क्लाउड ब्राउज़र पर चलाना जो रेजिडेंशियल इग्रेस के साथ काम करता है, वही है जो फॉर्म को सबमिशन स्वीकार करने की अनुमति देता है।
- यह सिर्फ Puppeteer है जो Scrapeless Scraping Browser के शीर्ष पर है।
Puppeteer.connect()एक सामान्यBrowserलौटाता है, इसलिए हरtype/click/waitForNavigationजिसे आप पहले से जानते हैं, बिना बदलाव के काम करता है - रनटाइम केवल सत्र और एंटी-डिटेक्शन को संभालता है। - शुरू करने के लिए स्वतंत्र। नए Scrapeless खातों में मुफ्त Scraping Browser रनटाइम शामिल है - app.scrapeless.com पर साइन अप करें।
परिचय: फॉर्म स्वचालन जो वास्तव में कार्य करता है
Puppeteer के साथ फॉर्म भरना तुच्छ लगता है जब तक सबमिशन चुपचाप विफल न हो जाए। इनपुट टाइप किए जाते हैं, बटन पर क्लिक किया जाता है, और फिर आपका स्क्रिप्ट एक पृष्ठ पढ़ता है जो अभी तक नेविगेट नहीं हुआ है - या इससे भी बदतर, साइट ने चुपचाप अनुरोध को अस्वीकृत कर दिया क्योंकि यह समझ गई कि एक बॉट चला रहा है। विश्वसनीय फॉर्म सबमिशन टाइपिंग के बारे में कम और दो चीजों के बारे में अधिक है जो अधिकांश स्क्रिप्ट गलत होती हैं: सबमिट को HTTP नेविगेशन अनुरोध के साथ समन्वय करना, और इतना असली ब्राउज़र की तरह दिखना कि फॉर्म स्वीकार किया जा सके।
पहला समस्या एक Puppeteer पैटर्न है। दूसरा एक पर्यावरण की समस्या है - और यही वह है जो एक कामकाजी स्थानीय स्क्रिप्ट को वास्तविक साइटों के खिलाफ अस्थिर बना देता है। लॉगिन पृष्ठ, चेकआउट प्रवाह, और खोज फॉर्म बिल्कुल वही हैं जहाँ साइटें अपनी बॉट डिटेक्शन पर ध्यान केंद्रित करती हैं।
यह गाइड Scrapeless Scraping Browser पर फॉर्म ऑटोमेशन चलाता है, एक एंटी-डिटेक्शन क्लाउड ब्राउज़र जो एक मानक एंडपॉइंट के माध्यम से Puppeteer से जुड़ता है। आप साधारण page.type() और page.click() कॉल लिखते हैं; रनटाइम आवासीय इग्रेस और फिंगरप्रिंटिंग प्रदान करता है ताकि सबमिशन लैंड कर सके। नीचे दिए गए हर स्निपेट को लाइव फॉर्म के खिलाफ चलाया गया था।
आप इसके साथ क्या कर सकते हैं
- साइटों में लॉगिन करें और डाउनस्ट्रीम स्क्रैपिंग के लिए प्रमाणित सत्र बनाए रखें।
- खोज और फ़िल्टर फॉर्म सबमिट करें जो सर्वर-साइड पर परिणाम बनाते हैं बजाय इसके कि एक साफ URL के माध्यम से।
- एक ही प्रवाह में कई-क्षेत्र फॉर्म चलाएं - टेक्स्ट, रेडियोज़, चेकबॉक्स, ड्रॉपडाउन।
- चेकआउट-शैली के चरणों का स्वचालन करें जहाँ प्रत्येक सबमिट अगले पृष्ठ पर आगे बढ़ता है।
- यह सत्यापित करें कि वास्तव में क्या भेजा गया था सर्वर द्वारा वापस भेजे गए उत्तर को पढ़कर।
Scrapeless Scraping Browser क्यों
Scrapeless Scraping Browser एक अनुकूलनशील, एंटी-डिटेक्शन क्लाउड ब्राउज़र है जो वेब क्रॉलर्स और एआई एजेंटों के लिए डिज़ाइन किया गया है। विशेष रूप से फॉर्म सबमिशन के लिए, यह लाता है:
- एक मानक Puppeteer कनेक्शन —
Puppeteer.connect()एक सामान्यBrowserलौटाता है, इसलिए आपकाtype/click/waitForNavigationकोड अपरिवर्तित रहता है। - 195+ देशों में आवासीय प्रॉक्सी — एक ऐसे IP से सबमिट करें जिस पर फॉर्म का एंटी-फ्रॉड स्तर भरोसा करता है।
- एंटी-डिटेक्शन फिंगरप्रिंटिंग — सत्र वास्तविक ब्राउज़र की तरह पढ़ा जाता है, इसलिए लॉगिन और चेकआउट फॉर्म सबमिशन स्वीकार करते हैं बजाय इसके कि चुनौती फेंके।
- सत्र की निरंतरता — लॉगिन के बाद कुकीज़ को गर्म रखें ताकि अगली अनुरोध पहले से प्रमाणित हो।
- स्व-विकसित क्रोमियम — इनपुट, रेडियोज़ और सेलेक्ट के लिए पूर्ण, मानक DOM और इवेंट व्यवहार।
app.scrapeless.com पर मुफ्त योजना पर अपना API कुंजी प्राप्त करें।
आवश्यकताएँ
- Node.js 18 या नया
- एक Scrapeless खाता और API कुंजी — app.scrapeless.com पर साइन अप करें
- Puppeteer और CSS सेलेक्टर्स के साथ मौलिक परिचितता
इंस्टॉल करें
Scrapeless SDK क्लाउड सत्र को मिंट करता है और Puppeteer से कनेक्ट करता है; puppeteer-core प्रोटोकॉल क्लाइंट है (ब्राउज़र दूरस्थ है, इसलिए कोई बंडल किया हुआ क्रोमियम आवश्यक नहीं है):
bash
npm install @scrapeless-ai/sdk puppeteer-core
पर्यावरण से अपना API कुंजी सेट करें:
bash
export SCRAPELESS_API_KEY="your_api_token_here"
कॉन्फ़िगर करें: Puppeteer को क्लाउड ब्राउज़र से कनेक्ट करें
javascript
import { Puppeteer } from '@scrapeless-ai/sdk';
const browser = await Puppeteer.connect({
apiKey: process.env.SCRAPELESS_API_KEY,
sessionName: 'puppeteer-forms',
proxyCountry: 'US',
sessionTTL: 300,
});
const page = await browser.newPage();
पृष्ठ यहां से एक मानक पुपोटियर पृष्ठ है।
बुनियादी कार्यान्वयन: एक लॉगिन फॉर्म
भारित विवरण Promise.all है। यदि आप await page.click() करते हैं और फिर await page.waitForNavigation() करते हैं, तो संभव है कि नेविगेशन पहले से ही पूरा हो गया हो — और आपकी प्रतीक्षा लटक जाती है। नेविगेशन श्रोता और क्लिक को एक साथ शुरू करें:
javascript
await page.goto('https://quotes.toscrape.com/login', { waitUntil: 'domcontentloaded' });
await page.type('#username', 'demo-user');
await page.type('#password', 'demo-pass');
await Promise.all([
page.waitForNavigation({ waitUntil: 'domcontentloaded' }),
page.click('input[type="submit"]'),
]);
console.log(page.url(), '—', await page.title());
// https://quotes.toscrape.com/ — उद्धरण चुराने के लिए
जैसे ही सबमिट हल होता है, आप पोस्ट-लॉगिन पृष्ठ पर होते हैं और सत्र ऑथ कुकी रखता है — इस पृष्ठ पर हर बाद का अनुरोध पहले से लॉगिन किया गया है।
अपनी API कुंजी मुफ्त योजना पर प्राप्त करें: app.scrapeless.com
बहु-क्षेत्र फॉर्म: टेक्स्ट, रेडियो, चेकबॉक्स, ड्रॉपडाउन
वास्तविक फॉर्म नियंत्रण प्रकारों को मिलाते हैं, और इनमें से प्रत्येक HTML फॉर्म नियंत्रण की अपनी विधि होती है। रेडियो बटन में टाइप करना कुछ नहीं करता; <select> पर क्लिक करना एक विकल्प का चयन नहीं करता। नियंत्रण को कॉल से मैप करें:
| नियंत्रण | पुपोटियर कॉल |
|---|---|
| टेक्स्ट / ईमेल / टेलीफोन इनपुट | page.type(selector, value) |
| रेडियो बटन | page.click(radioSelector) |
| चेकबॉक्स | page.click(checkboxSelector) |
ड्रॉपडाउन (<select>) |
page.select(selector, value) |
| सबमिट | page.click(submitSelector) (waitForNavigation के साथ दौड़ता है) |
यहाँ एक पूर्ण बहु-क्षेत्र सबमिशन है, जो httpbin.org/forms/post के खिलाफ सत्यापित है, जो प्रस्तुत किए गए क्षेत्रों को वापस प्रतिध्वनित करता है ताकि आप यह पुष्टि कर सकें कि वास्तव में क्या भेजा गया था:
javascript
await page.goto('https://httpbin.org/forms/post', { waitUntil: 'domcontentloaded' });
await page.type('input[name="custname"]', 'एडा लवलेस');
await page.type('input[name="custtel"]', '555-0100');
await page.click('input[value="medium"]'); // पिज़्ज़ा-आकार रेडियो
await page.click('input[value="bacon"]'); // टॉपिंग चेकबॉक्स
await Promise.all([
page.waitForNavigation({ waitUntil: 'domcontentloaded' }),
page.click('button'), // "ऑर्डर सबमिट करें"
]);
const echoed = JSON.parse(await page.evaluate(() => document.body.innerText));
console.log(echoed.form);
// {
// custname: 'एडा लवलेस',
// custtel: '555-0100',
// size: 'medium',
// topping: 'bacon',
// ...
// }
प्रतिध्वनित form वस्तु वह सर्वर का दृश्य है जो आपने प्रस्तुत किया है — सही मूल्यों के साथ एक फॉर्म वास्तव में पारित हुआ है की पुष्टि करने का सबसे अच्छा तरीका।
उन्नत पैटर्न
परिणाम तत्व के लिए प्रतीक्षा करें, नेविगेशन नहीं। कई फॉर्म fetch/XHR के माध्यम से सबमिट होते हैं और कभी नेविगेट नहीं करते। waitForNavigation को page.waitForSelector('.results') (या एक विशिष्ट सफलता नोड) के साथ बदलें ताकि आप असली संकेत पर प्रतीक्षा कर सकें।
टाइप करने से पहले साफ करें। page.type() जोड़ता है। एक पूर्व-भरे हुए फ़ील्ड में ओवरराइट करने के लिए, पहले उसे ध्यान केंद्रित करें और साफ करें: await page.click(sel, { clickCount: 3 }); await page.keyboard.press('Backspace'); फिर टाइप करें।
कुंजी द्वारा सबमिट करें। कुछ फॉर्म में क्लिक करने योग्य बटन नहीं होते हैं। अंतिम फ़ील्ड पर ध्यान केंद्रित करें और Promise.all के अंदर Enter दबाएं: page.keyboard.press('Enter') क्लिक के स्थान पर।
चरणों के बीच लॉगिन स्थिति बनाए रखें। पूरे प्रवाह के लिए वही पृष्ठ बनाए रखें। स्क्रैपलेस सत्र स्थायित्व नेविगेशन के बीच कुकीज़ को बनाए रखता है, इसलिए एक लॉगिन उसके बाद एक गेटेड फॉर्म बस काम करता है।
धोखाधड़ी-संवेदनशील फॉर्म के लिए निकास पिन करें। कनेक्ट समय पर proxyCountry सेट करें ताकि चेकआउट और खाता फॉर्म अपेक्षित क्षेत्र से एक स्थिर आवासीय आईपी देख सकें।
समस्या निवारण
| लक्षण | कारण | समाधान |
|---|---|---|
waitForNavigation हमेशा के लिए लटकता है |
क्लिक उस प्रतीक्षा के शुरू होने से पहले ही किया गया | उन्हें एक Promise.all में दौड़ें |
| सबमिशन सफल होता है लेकिन मान गलत होते हैं | नियंत्रण के लिए गलत विधि | टेक्स्ट → type, रेडियो/चेकबॉक्स → click, चयन → select |
| स्क्रिप्ट सबमिट के बाद पुरानी पृष्ठ पढ़ती है | फॉर्म XHR का उपयोग करता है, नेविगेशन नहीं | नेविगेशन के बजाय एक परिणाम चयनकर्ता पर प्रतीक्षा करें |
| फ़ील्ड पुराना मान बनाए रखता है | type मौजूदा टेक्स्ट में जोड़ता है |
टाइप करने से पहले फ़ील्ड को साफ करें |
| फॉर्म अस्वीकृत या चुनौती दी जाती है | साइट सत्र को बॉट के रूप में चिह्नित करती है | आवासीय निकासी और फिंगरप्रिन्टिंग के साथ क्लाउड ब्राउज़र पर चलाएं |
निष्कर्ष: फॉर्म एक विश्वसनीय चरण के रूप में
एक फॉर्म सबमिशन जो हर बार सफल होता है, अंततः प्रत्येक नियंत्रण को सही Puppeteer कॉल से मैप करने, सबमिशन को इंतजार के खिलाफ दौड़ाने और एक ही Promise.all में वास्तविक पोस्ट-सबमिशन सिग्नल — नेविगेशन या परिणाम नोड — का इंतजार करने पर निर्भर करता है। इसे Scrapeless Scraping Browser पर चलाने से उस हिस्से को हटा दिया जाता है जो आपके कोड से संबंधित नहीं है: लॉगिन और चेकआउट फॉर्म को अनुरोध स्वीकार करने के लिए प्राप्त करना इसके बजाय कि इसे चुनौती देना। पायथन में एक संपूर्ण क्लाउड-ब्राउज़र स्क्रैपिंग वर्कफ़्लो के लिए, Scrapling + Scrapeless गाइड और Scraping Browser उत्पाद पृष्ठ तथा दस्तावेज़ का संदर्भ लें। ऑथेंटिकेटेड फ्लो के लिए सेशन को गर्म रखें और जो भेजा गया था उसे प्रतिक्रिया पढ़कर पुष्टि करें।
क्या आप अपनी AI-संचालित डेटा पाइपलाइन बनाने के लिए तैयार हैं?
हमारे समुदाय में शामिल हों एक मुफ्त योजना का दावा करने के लिए और उन डेवलपर्स के साथ जुड़ने के लिए जो फॉर्म और लॉगिन स्वचालन बना रहे हैं: Discord · Telegram।
app.scrapeless.com पर मुफ्त Scraping Browser रनटाइम के लिए साइन अप करें और ऊपर दिए गए पैटर्न को लॉगिन, खोजों और चेकआउट फ्लो पर अनुकूलित करें जो आपके कार्यप्रवाह की जरूरत है। मूल्य निर्धारण देखकर पैमाने के लिए।
प्रश्नोत्तर
प्रश्न: मुझे waitForNavigation हेंग होने की रेस से कैसे बचना चाहिए?
नेविगेशन वेट और क्लिक को एक ही Promise.all में शुरू करें। पहले क्लिक का इंतजार करना आपको सुनने से पहले नेविगेशन को पूरा करने देता है, जिससे वेट अटक जाता है।
प्रश्न: मैं एक ड्रॉपडाउन विकल्प का चयन कैसे करूं?
page.select(selector, value) का उपयोग करें विकल्प के value विशेषता के साथ — click नहीं। रेडियो और चेकबॉक्स के लिए, विशिष्ट नियंत्रण पर page.click() करें।
प्रश्न: फॉर्म XHR के साथ सबमिट होता है और कभी नेविगेट नहीं होता। मुझे किसका इंतजार करना चाहिए?
सफल सबमिशन के बाद केवल दिखाई देने वाले नोड के लिए waitForNavigation को page.waitForSelector() के साथ बदलें, जैसे कि एक परिणाम कंटेनर या सफलता संदेश।
प्रश्न: क्या मुझे फॉर्म सबमिट करने के लिए एक प्रॉक्सी की आवश्यकता है?
सार्वजनिक फॉर्म के लिए, अक्सर नहीं। लॉगिन, चेकआउट, और अन्य धोखाधड़ी-संवेदनशील फॉर्म के लिए, proxyCountry को पिन करें ताकि सबमिशन एक आवासीय IP से आए जिसे साइट भरोसा करती है।
प्रश्न: लॉगिन फॉर्म सबमिट करने के बाद मैं कैसे लॉगिन में रहूं?
उसी page का उपयोग करना जारी रखें। Scrapeless सत्र स्थिरता नेविगेशन के पार ऑथ कुकीज़ को बनाए रखती है, इसलिए बाद में किए गए अनुरोध पहले से ही प्रमाणीकृत होते हैं।
प्रश्न: क्या मैं इसे बिना AI एजेंट के चला सकता हूँ?
हां। यह Scrapeless सत्र पर Plain Puppeteer है — इसमें कोई एजेंट शामिल नहीं है। SDK केवल कनेक्शन बनाती है।
स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।



