हेडलेस ब्राउज़र पकड़ा गया: कारण और समाधान (2026)
कोई साइट "headless browser detected" दिखाती है, या चुपचाप आपके ऑटोमेटेड ब्राउज़र को कोई दूसरा पेज दिखा देती है। साइटें ऐसा इसलिए करती हैं क्योंकि headless ब्राउज़र बिना विंडो के चलता है और अक्सर सामान्य डेस्कटॉप ब्राउज़र से छोटे, मापे जा सकने वाले तरीकों में अलग होता है। यह गाइड बताती है कि साइटें कौन से सिग्नल देखती हैं, आपका अपना ब्राउज़र क्या ज़ाहिर कर रहा है यह कैसे जांचें, और सही समाधान कैसा दिखता है। यह उस बिंदु के बारे में भी है जहां सही जवाब रुक जाना है, या इस जांच को कैप्चा स्टेप मानना है।
साइटें headless ब्राउज़र की जांच क्यों करती हैं
ऑटोमेशन फ्रेमवर्क एक असली ब्राउज़र इंजन चलाते हैं, इसलिए ज़्यादातर पेज एक जैसा ही व्यवहार करता है। फर्क किनारों पर दिखता है:
- ऑटोमेशन फ्लैग। ऑटोमेशन टूल से चलाए गए ब्राउज़र में ऐतिहासिक रूप से
navigator.webdriverप्रॉपर्टीtrueके रूप में दिखती रही है, और कुछ फ्रेमवर्क पेज में दूसरे निशान भी छोड़ते हैं। - गायब या अजीब ब्राउज़र फीचर। headless बिल्ड में प्लगइन न होने, भाषाओं की असामान्य सूची, या ऐसी विंडो साइज़ दिख सकती है जो असली स्क्रीन से मेल नहीं खाती।
- रेंडरिंग का फर्क। Canvas और WebGL का आउटपुट headless और headed वातावरण में अलग हो सकता है, खासकर बिना GPU वाले सर्वर पर।
- समय। स्वचालित क्लिक और पेज लोड अक्सर ऐसी लय में होते हैं जो कोई इंसान नहीं बनाता।
- नेटवर्क व्यवहार। रिक्वेस्ट हेडर, उनका क्रम और TLS हैंडशेक किसी गैर-ब्राउज़र क्लाइंट को धोखा दे सकते हैं।
साइटें इन सिग्नलों को मिलाकर एक स्कोर बनाती हैं। कम स्कोर का मतलब चुपचाप डाउनग्रेड, अतिरिक्त जांच, या ब्लॉक हो सकता है।
चरण 1: देखें कि आपका ब्राउज़र क्या ज़ाहिर करता है
कुछ भी बदलने से पहले देखें कि ऑटोमेशन से पेज क्या पढ़ सकता है। नीचे दी गई स्क्रिप्ट एक ऐसा पेज खोलती है जो आपका है और वे सिग्नल प्रिंट करती है जो मायने रखते हैं। यह एक डायग्नोस्टिक है: इसे अपने टेस्ट पेज पर चलाएं, दूसरों के सिस्टम जांचने के लिए नहीं।
from playwright.sync_api import sync_playwright
CHECK = """() => ({
webdriver: navigator.webdriver,
languages: navigator.languages,
plugins: navigator.plugins.length,
userAgent: navigator.userAgent,
screen: [screen.width, screen.height],
viewport: [window.innerWidth, window.innerHeight],
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
})"""
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://example.com") # इसे अपने किसी पेज से बदलें
print(page.evaluate(CHECK))
browser.close()
वही स्क्रिप्ट headless=False के साथ चलाएं, फिर दोनों आउटपुट की तुलना करें। जो फर्क दिखे, वही वे चीज़ें हैं जो कोई साइट नोटिस कर सकती है।
चरण 2: केवल फ्लैग नहीं, असंगतियां ठीक करें
एक फ्लैग छिपाकर बाकी सब वैसा ही छोड़ देना सबसे आम गलती है। ऐसा user agent जो Windows बताए, जबकि फॉन्ट, टाइमज़ोन और स्क्रीन साइज़ Linux सर्वर जैसे हों, एक अकेली प्रॉपर्टी से भी मज़बूत सिग्नल है। ऐसे वातावरण का लक्ष्य रखें जो अंदर से एक-दूसरे से मेल खाए:
- जहां हो सके वहां headed ब्राउज़र इस्तेमाल करें, या headless मोड जो आज के डेस्कटॉप ब्राउज़र से मेल खाए।
- व्यूपोर्ट और भाषा ऐसे सेट करें जो एक-दूसरे से मेल खाएं।
- टाइमज़ोन और लोकेल को उस IP पते के अनुरूप रखें जिसका आप उपयोग करते हैं।
- एक पहचान के लिए एक ही प्रोफ़ाइल और उसकी कुकीज़ दोबारा इस्तेमाल करें, हर रन में नई शुरुआत न करें।
Playwright इनमें से कई चीज़ें एक ही जगह सेट करने देता है:
context = browser.new_context(
locale="en-US",
timezone_id="America/New_York",
viewport={"width": 1366, "height": 768},
)
page = context.new_page()
चरण 3: धीमे चलें और एक विज़िटर की तरह व्यवहार करें
ऑटोमेशन तब साफ़ पकड़ में आ जाता है जब वह किसी इंसान से तेज़ चलता है। पेज लोड के बीच वास्तविक विराम जोड़ें, एक ही एलिमेंट पर परफेक्ट लय में क्लिक न करें, और एक ही पते से एक साथ सैकड़ों पेज न खोलें। कम और धीमी रिक्वेस्ट साइट का लोड भी घटाती हैं, जो वैसे भी सही है।
चरण 4: जानें कि जांच कैप्चा कब है
कुछ डिटेक्शन फ्लो ब्लॉक के बजाय एक चैलेंज पर खत्म होते हैं। आपको एक कैप्चा विजेट दिखेगा, और उस स्टेप को सॉल्वर से टोकन चाहिए। Scarnox पर आज लाइव कैप्चा टाइप PopularCaptcha है। PopularCaptcha Python गाइड दिखाती है कि टोकन कैसे मांगा और सबमिट किया जाता है। Cloudflare Turnstile जैसे दूसरे विजेट रोडमैप पर हैं, पर अभी लाइव नहीं हैं, इसलिए किसी पर योजना बनाने से पहले कैप्चा टाइप समझाए गए देख लें।
कैप्चा स्टेप का मतलब यह नहीं कि बाकी सेटअप सही है। अगर वही साइट हर headless सत्र को ब्लॉक करती है, चाहे आप कुछ भी कॉन्फ़िगर करें, तो यह साफ़ संकेत है कि मालिक स्वचालित एक्सेस नहीं चाहता। उसका सम्मान करें।
क्या न करें
जिस साइट ने ऑटोमेशन को मना किया है, उससे उसे छिपाने की कोशिश न करें, और एक्सेस कंट्रोल पार करने के लिए डिटेक्शन-इवेज़न टूल इस्तेमाल न करें। यह उस टेस्टिंग और सार्वजनिक डेटा संग्रह से अलग तरह का प्रोजेक्ट है, जिसे यह गाइड कवर करती है। अगर आपके प्रोजेक्ट को ऐसे एक्सेस की ज़रूरत है जो आपको नहीं मिला, तो साइट के मालिक से पूछें या कोई आधिकारिक API या डेटा फ़ीड खोजें।
ज़िम्मेदारी से स्क्रैप करें
- ऑटोमेट करने से पहले साइट की
robots.txtऔर शर्तें जांचें। - रिक्वेस्ट की दर कम रखें, और जो पेज आप पहले ला चुके हैं उन्हें कैश करें।
- ब्लॉक को जवाब मानें, उसे रास्ता ढूंढने वाली पहेली न मानें।
- बिना कानूनी आधार के व्यक्तिगत डेटा इकट्ठा न करें।
आगे कहां जाएं
अगर आपका ऑटोमेशन एंड-टू-एंड टेस्ट के लिए है, तो तरीका अलग है: देखें ऑटोमेटेड टेस्ट में कैप्चा। अगर आप Playwright या Puppeteer सेटअप चला रहे हैं, तो Playwright और Puppeteer में कैप्चा हैंडलिंग बताती है कि टोकन कहां जाता है।
मुफ्त ट्रायल क्रेडिट के साथ शुरू करें, कार्ड की ज़रूरत नहीं: खाता बनाएं और अपने पेज पर PopularCaptcha फ्लो टेस्ट करें। मौजूदा दरों के लिए प्राइसिंग पेज देखें।