← Back to Blog

स्क्रैप्लिंग, बोटासॉरस और नोड्राइवर के लिए प्रॉक्सी: 2024 में एंटी-बॉट्स के खिलाफ सेटअप

नए फ्रेमवर्क्स में प्रॉक्सी सेटअप पर चर्चा कर रहे हैं - Scrapling, Botasaurus और nodriver। कोड, रोटेशन के उदाहरण, बॉट्स से सुरक्षा को बायपास करने के लिए IP चयन की सिफारिशें।

📅October 21, 2026

क्लासिक Selenium और Puppeteer के संयोजन को अक्सर Cloudflare, DataDome और PerimeterX जैसे एंटी-बॉट सिस्टम से समस्याओं का सामना करना पड़ता है। उनके स्थान पर नए फ्रेमवर्क - Scrapling, Botasaurus और nodriver आते हैं, जिन्हें मूल रूप से डिटेक्शन को बायपास करने पर ध्यान केंद्रित करके डिजाइन किया गया था। लेकिन सबसे उन्नत फ्रेमवर्क भी सही तरीके से सेटअप की गई प्रॉक्सी के बिना बेकार है। इस लेख में हम तीनों उपकरणों में प्रॉक्सी को कैसे कनेक्ट करें, कौन सी गलतियाँ प्रभावशीलता को मारती हैं और विशेष स्क्रैपिंग कार्य के लिए IP का प्रकार कैसे चुनें, इस पर चर्चा करेंगे।

Scrapling, Botasaurus और nodriver Selenium से कैसे भिन्न हैं

तीनों फ्रेमवर्क्स का उदय इस बात के जवाब में हुआ कि Selenium और सामान्य Puppeteer बहुत आसानी से डिटेक्ट हो गए हैं। एंटी-बॉट सिस्टम दर्जनों पैरामीटर की जांच करते हैं: CDP प्रोटोकॉल, navigator.webdriver, कैनवास रेंडरिंग, इवेंट टाइमिंग - और क्लासिक ड्राइवर इनमें से लगभग हर एक में विशिष्ट निशान छोड़ते हैं।

Scrapling - एक Python लाइब्रेरी है जो HTML के अनुकूलनशील स्क्रैपिंग को StealthyFetcher के माध्यम से ब्राउज़र के अनुकरण की क्षमता के साथ जोड़ती है, जो Camoufox (पैच किए गए फिंगरप्रिंट के साथ Firefox का फोर्क) पर आधारित है। यह उन कार्यों के लिए अच्छी है, जहां तेज़ स्क्रैपिंग की आवश्यकता होती है और संसाधनों की न्यूनतम खपत होती है, लेकिन साइट की सुरक्षा सक्रिय रूप से TLS-फिंगरप्रिंट की जांच करती है।

Botasaurus - एक संशोधित Chromium (undetected-chromedriver के तहत) पर आधारित फ्रेमवर्क है, जो बड़े पैमाने पर समानांतर स्क्रैपिंग के लिए डिज़ाइन किया गया है, जिसमें ब्राउज़र प्रोफाइल का स्वचालित प्रबंधन और तृतीय-पक्ष सेवाओं के माध्यम से कैप्चा को हल करने का अंतर्निहित समर्थन है।

nodriver - उसी लेखक द्वारा undetected-chromedriver का उत्तराधिकारी है, जिसने Selenium WebDriver को पूरी तरह से छोड़ दिया है और सीधे CDP (Chrome DevTools Protocol) के माध्यम से काम करता है, जो स्वचालन के डिटेक्टेबल आर्टिफैक्ट्स के एक महत्वपूर्ण हिस्से को हटा देता है।

तीनों का एक सामान्य लक्षण है - वे ब्राउज़र के फिंगरप्रिंट के स्तर पर डिटेक्शन को कम करते हैं, लेकिन IP की प्रतिष्ठा की समस्या को हल नहीं करते हैं। यदि अनुरोध डेटा सेंटर के IP से आते हैं, जो पहले से ही DataDome या Cloudflare की ब्लैकलिस्ट में है, तो कोई भी ब्राउज़र पैच कैप्चा या 403 त्रुटि से नहीं बचाएगा।

Scrapling में प्रॉक्सी सेटअप

Scrapling प्रॉक्सी को तेज़ HTTP मोड (Fetcher) और ब्राउज़र मोड (StealthyFetcher) दोनों में समर्थन करता है। बिना JS रेंडरिंग के स्थिर स्क्रैपिंग के लिए, प्रॉक्सी सीधे अनुरोध के पैरामीटर में भेजी जाती है:

from scrapling.fetchers import Fetcher

response = Fetcher.get(
    "https://example.com",
    proxy="http://user:[email protected]:9000"
)
print(response.status)

पूर्ण ब्राउज़र मोड (Camoufox पर StealthyFetcher) के लिए, प्रॉक्सी को सर्वर, लॉगिन और पासवर्ड के अलग-अलग फ़ील्ड के साथ एक शब्दकोश के माध्यम से भेजा जाता है - यह महत्वपूर्ण है, क्योंकि Camoufox प्रॉक्सी की प्रमाणीकरण को सामान्य Chromium की तुलना में अलग तरीके से संभालता है:

from scrapling.fetchers import StealthyFetcher

response = StealthyFetcher.fetch(
    "https://example.com",
    proxy={
        "server": "gate.proxycove.com:9000",
        "username": "user",
        "password": "pass"
    },
    headless=True
)
print(response.status)

एक सामान्य गलती है - ब्राउज़र मोड में प्रॉक्सी को पूरी स्ट्रिंग के रूप में भेजना, जैसे HTTP अनुरोधों में। इस मामले में Camoufox या तो प्रमाणीकरण को नजरअंदाज करता है या प्रॉक्सी सर्वर से कनेक्ट करते समय टाइमआउट के साथ गिर जाता है। यदि आप ERR_NO_SUPPORTED_PROXIES त्रुटि देखते हैं - तो सुनिश्चित करें कि यह वास्तव में अलग-अलग फ़ील्ड के साथ शब्दकोश का प्रारूप है।

Botasaurus में प्रॉक्सी सेटअप

Botasaurus ड्राइवर को कॉन्फ़िगर करने के लिए @browser डेकोरेटर का उपयोग करता है, और प्रॉक्सी इस डेकोरेटर के पैरामीटर के रूप में या सीधे लॉन्च फ़ंक्शन में भेजी जाती है:

from botasaurus.browser import browser, Driver

@browser(
    proxy="http://user:[email protected]:9000"
)
def scrape_data(driver: Driver, data):
    driver.get("https://example.com")
    return driver.page_html

scrape_data()

यदि प्रत्येक समानांतर कार्य के लिए विभिन्न प्रॉक्सी कनेक्ट करने की आवश्यकता है (जो Botasaurus के माध्यम से बड़े पैमाने पर स्क्रैपिंग के लिए महत्वपूर्ण है), तो प्रॉक्सी को डेटा सूची के माध्यम से गतिशील रूप से भेजना बेहतर है, बजाय कि इसे डेकोरेटर में हार्डकोड किया जाए:

from botasaurus.browser import browser, Driver

@browser
def scrape_with_proxy(driver: Driver, data):
    driver.config.proxy = data["proxy"]
    driver.get(data["url"])
    return driver.page_html

tasks = [
    {"url": "https://example.com/page1", "proxy": "http://user:pass@ip1:port"},
    {"url": "https://example.com/page2", "proxy": "http://user:pass@ip2:port"},
]
scrape_with_proxy(tasks)

Botasaurus कार्यों को multiprocessing के माध्यम से शानदार तरीके से समानांतर करता है, इसलिए बड़े पैमाने पर स्क्रैपिंग के लिए पर्याप्त IP पूल के साथ प्रॉक्सी का उपयोग करना महत्वपूर्ण है - अन्यथा, कई थ्रेड एक ही पते पर टकराएंगे, जो तुरंत एंटी-बॉट द्वारा स्वचालन को उजागर करता है।

nodriver में प्रॉक्सी सेटअप

nodriver सीधे CDP से कनेक्शन के माध्यम से काम करता है, बिना Selenium परत के, इसलिए प्रॉक्सी यहाँ ब्राउज़र लॉन्च के तर्कों के माध्यम से सेटअप की जाती है, न कि अलग API के माध्यम से। बिना प्रमाणीकरण के प्रॉक्सी के लिए सब कुछ सरल है:

import nodriver as uc
import asyncio

async def main():
    browser = await uc.start(
        browser_args=["--proxy-server=http://gate.proxycove.com:9000"]
    )
    page = await browser.get("https://example.com")
    await asyncio.sleep(3)
    browser.stop()

asyncio.run(main())

समस्या यह है कि Chromium --proxy-server के माध्यम से सीधे लॉगिन/पासवर्ड को प्रॉक्सी में सपोर्ट नहीं करता है। nodriver में प्रमाणीकरण वाली प्रॉक्सियों के लिए, या तो बिना प्रमाणीकरण के स्थानीय प्रॉक्सी टनल को उठाना होगा (जैसे, px या 3proxy के माध्यम से), या CDP इवेंट Fetch.authRequired को संभालना होगा:

import nodriver as uc
import asyncio

async def main():
    browser = await uc.start(
        browser_args=["--proxy-server=http://gate.proxycove.com:9000"]
    )
    page = await browser.get("https://example.com")

    async def auth_handler(event):
        await page.send(uc.cdp.fetch.continue_with_auth(
            request_id=event.request_id,
            auth_challenge_response=uc.cdp.fetch.AuthChallengeResponse(
                response="ProvideCredentials",
                username="user",
                password="pass"
            )
        ))

    page.add_handler(uc.cdp.fetch.AuthRequired, auth_handler)
    await asyncio.sleep(5)
    browser.stop()

asyncio.run(main())

यह तीनों फ्रेमवर्क्स में सबसे कम स्पष्ट बिंदु है - कई डेवलपर्स घंटों बर्बाद करते हैं यह समझने में कि प्रमाणीकरण क्यों काम नहीं करता, बिना CDP में Fetch डोमेन के बारे में जाने।

प्रॉक्सी रोटेशन और एंटी-बॉट्स से लड़ाई

यहां तक कि एक आदर्श सेटअप किया गया ब्राउज़र फिंगरप्रिंट भी मदद नहीं करेगा, यदि एक IP पर 50-100 अनुरोध प्रति मिनट सुरक्षित डोमेन पर जा रहे हैं। DataDome और Cloudflare विशिष्ट पते से अनुरोधों की आवृत्ति और क्रियाओं के बीच समय पैटर्न का विश्लेषण करते हैं - बहुत समान अंतराल भी संदिग्ध होते हैं।

सभी तीन फ्रेमवर्क्स के लिए कार्यशील रोटेशन योजना समान रूप से बनाई जाती है:

  1. प्रदाता स्तर पर IP के स्वचालित रोटेशन के साथ गेटवे का उपयोग करें - हर अनुरोध पर पते को बदलने की अपनी लॉजिक लिखने की आवश्यकता नहीं है।
  2. सत्रीय कार्यों (लॉगिन, बहु-पृष्ठ नेविगेशन) के लिए, कनेक्शन स्ट्रिंग में स्टिकी पैरामीटर के माध्यम से सत्र के लिए IP को फिक्स करें।
  3. स्थिर पृष्ठों के सरल स्क्रैपिंग के लिए, प्रत्येक अनुरोध या हर 5-10 अनुरोधों पर IP को रोटेट करें।
  4. अनुरोधों के बीच यादृच्छिक देरी जोड़ें (1-4 सेकंड) - यह समय पैटर्न के आधार पर डिटेक्शन को कम करता है।

कनेक्शन स्ट्रिंग में स्टिकी सत्र का उदाहरण, जहां session-id एक ही आउटगोइंग IP को 10 मिनट के लिए बनाए रखता है:

proxy = "http://user-session-abc123:[email protected]:9000"

Botasaurus के लिए यह योजना विशेष रूप से उपयोगी है, क्योंकि समानांतर स्क्रैपिंग के दौरान प्रत्येक प्रक्रिया अपना अद्वितीय session-id प्राप्त कर सकती है, और आप बिना पते की सूची को मैन्युअल रूप से प्रबंधित किए विभिन्न IP का एक स्थिर पूल प्राप्त करते हैं।

प्रत्येक फ्रेमवर्क के लिए कौन सा प्रॉक्सी प्रकार चुनें

प्रॉक्सी का प्रकार स्क्रैपिंग की सफलता पर उतना ही प्रभाव डालता है जितना कि फ्रेमवर्क का चयन। नीचे कार्यों के अनुसार तुलना है:

कार्य सिफारिश की गई प्रॉक्सी प्रकार क्यों
Cloudflare/DataDome के साथ साइटों का स्क्रैपिंग आवासीय प्रॉक्सी वास्तविक घरेलू उपयोगकर्ताओं के IP एंटी-बॉट्स की ब्लैकलिस्ट में शायद ही कभी आते हैं
कड़ी सुरक्षा के बिना बड़े पैमाने पर स्क्रैपिंग डेटा सेंटर प्रॉक्सी उच्च गति, बड़े मात्रा में अनुरोधों पर कम लागत
मोबाइल साइटों पर वास्तविक उपयोगकर्ता का अनुकरण मोबाइल प्रॉक्सी संचार ऑपरेटरों के CGNAT पते एंटी-बॉट्स के लिए अधिकतम स्तर की विश्वसनीयता रखते हैं

Scrapling में StealthyFetcher मोड में आवासीय प्रॉक्सी सबसे अधिक प्रभाव डालते हैं, क्योंकि Camoufox पहले से ही ब्राउज़र के फिंगरप्रिंट की समस्या को हल करता है - केवल IP पर उजागर नहीं होना है। Botasaurus के लिए, बड़े पैमाने पर समानांतर स्क्रैपिंग में डेटा सेंटर प्रॉक्सी अक्सर गति/कीमत के अनुपात में सबसे अच्छे होते हैं, यदि लक्षित साइट DataDome स्तर की उन्नत सुरक्षा का उपयोग नहीं करती है।

प्रॉक्सी और ब्राउज़र ऑटोमेशन के संयोजन में सामान्य गलतियाँ

व्यवहार में, अधिकांश स्क्रैपिंग विफलता प्रॉक्सी की गलत कॉन्फ़िगरेशन से संबंधित होती है, न कि स्वयं फ्रेमवर्क से। यहाँ कुछ सामान्य गलतियों की सूची है:

  • Botasaurus के सभी समानांतर थ्रेड्स के लिए एक ही IP। एंटी-बॉट एक ही पते से 20 समवर्ती सत्रों को देखता है और इसे मिनटों में ब्लॉक कर देता है।
  • Scrapling के ब्राउज़र मोड में प्रॉक्सी को स्ट्रिंग के रूप में भेजना। Camoufox को विभाजित फ़ील्ड के साथ शब्दकोश की आवश्यकता होती है - अन्यथा प्रमाणीकरण नहीं होता है।
  • nodriver में CDP Fetch डोमेन की अनदेखी। बिना authRequired हैंडलर के, प्रमाणीकरण वाली प्रॉक्सी बस कनेक्ट नहीं होगी, ब्राउज़र लोडिंग पर अटक जाएगा।
  • सत्रीय क्रियाओं के दौरान रोटेशन की कमी। प्रमाणीकरण सत्र के बीच IP बदलना तुरंत स्वचालन को उजागर करता है - स्टिकी सत्रों का उपयोग करें।
  • प्रॉक्सी और ब्राउज़र की स्थानीयता के बीच असंगति। जर्मनी से IP के साथ Accept-Language: ru हेडर - फ्रोड-स्कोरिंग सिस्टम के लिए बॉट का एक क्लासिक संकेत।
  • रोटेशन के साथ भी बहुत आक्रामक अनुरोध आवृत्ति। IP रोटेशन अनुरोधों के बीच विराम की आवश्यकता को समाप्त नहीं करता है - व्यवहार का पैटर्न भी विश्लेषित किया जाता है।

ब्राउज़र मोड में प्रॉक्सी के माध्यम से काम करते समय DNS लीक की जांच करना अलग से महत्वपूर्ण है - कभी-कभी ब्राउज़र सिस्टम DNS के माध्यम से डोमेन को हल करता है, न कि प्रॉक्सी टनल के माध्यम से, जो अनुरोध IP और रिज़ॉल्व IP के बीच असंगति पैदा करता है, जिसे सुरक्षा प्रणालियों द्वारा आसानी से पकड़ा जा सकता है।

निष्कर्ष

Scrapling, Botasaurus और nodriver ब्राउज़र फिंगरप्रिंट के स्तर पर डिटेक्शन की समस्या को पारंपरिक Selenium की तुलना में कहीं बेहतर तरीके से हल करते हैं, लेकिन इनमें से कोई भी गुणवत्ता प्रॉक्सी के महत्व को समाप्त नहीं करता है। प्रमाणीकरण की सही सेटिंग (विशेष रूप से nodriver में CDP के माध्यम से), IP का उचित रोटेशन और विशेष एंटी-बॉट सिस्टम के लिए उपयुक्त प्रॉक्सी प्रकार का चयन - ये तीन कारक हैं जो दीर्घकालिक में स्क्रैपिंग की स्थिरता को निर्धारित करते हैं।

यदि आप Cloudflare या DataDome जैसी उन्नत सुरक्षा वाली साइटों को स्क्रैप कर रहे हैं, तो आवासीय प्रॉक्सी से शुरू करें - वे IP की प्रतिष्ठा के कारण सफल अनुरोधों का उच्चतम प्रतिशत प्रदान करते हैं। बिना कड़ी सुरक्षा वाले बड़े पैमाने पर कार्यों के लिए, डेटा सेंटर प्रॉक्सी बड़े मात्रा में अनुरोधों पर गति और लागत के अनुपात में सबसे अच्छा विकल्प बने रहते हैं।