गोपनीयता तकनीक

वेबसाइटें Browser Automation की पहचान कैसे करती हैं (और इसके बारे में क्या करें)

BC

BotCloud Team

11 मार्च 2026·3 min read

परिचय

जब आप Playwright, Puppeteer, या Selenium से browser को automate करते हैं, तो browser ऐसी signals expose करता है जो इसे programmatically controlled के रूप में पहचानती हैं। navigator.webdriver property को true पर set किया जाता है। Framework-specific objects JavaScript environment में दिखाई देते हैं। Console और debugging protocols artifacts छोड़ते हैं। Headless mode headed mode से subtle तरीकों से अलग व्यवहार करता है।

ये signals इसलिए exist करती हैं क्योंकि automation frameworks को काम करने के लिए browser में hooks की जरूरत होती है। समस्या यह है कि ये same hooks page पर चल रहे किसी भी JavaScript के लिए अवलोकन योग्य हैं।

अवलोकन योग्य Signals

The W3C WebDriver specification introduced navigator.webdriver. When a browser is controlled via the WebDriver protocol, this property returns true. It was designed as a transparency mechanism, but it is now the most commonly checked automation signal.

In standard Chromium, this value is set at the C++ level during browser initialization when the --enable-automation flag is present, which Playwright and Puppeteer add by default.

Framework Injection Points

Each automation framework injects code at specific points:

  • Playwright injects binding functions (__playwright__binding__) and initialization scripts into every new page context
  • Puppeteer injects evaluation script helpers and CDP session management code
  • Selenium uses the WebDriver protocol which sets browser-level automation flags

CDP Artifacts

The Chrome DevTools Protocol enables external tools to control the browser. When a CDP session is active, several signals become observable:

  • Runtime.enable and Console.enable change the behavior of console.log and error stack traces
  • CDP session connections appear on specific WebSocket endpoints
  • Certain browser behaviors change when CDP domains are active

Headless Mode Differences

Standard Chromium's headless mode differs from headed mode in several ways. The navigator.plugins array may be empty. WebGL may fall back to software rendering. Window dimensions may have unusual values.

Stealth Plugins की सीमाएं

Stealth plugins उस के बाद cleanup करने का प्रयास करते हैं जब framework ने पहले से automation values set कर दी हो। वे navigator.webdriver को JavaScript getter से override करते हैं, global scope से framework objects को delete करते हैं, और अन्य telltale properties को patch करते हैं।

इस दृष्टिकोण की एक मौलिक कमजोरी है: cleanup JavaScript में होता है, page context initialize होने के बाद। Original values briefly exist करते हैं फिर overwrite होने से पहले, और cleanup code itself अवलोकन योग्य है।

Detection systems कर सकते हैं:

  • navigator.webdriver पर property descriptor modifications check करें
  • Detect करें कि Object.getOwnPropertyDescriptor एक value की जगह getter return करता है
  • Initial state और patched state के बीच timing differences observe करें
  • Stealth plugin के अपने code patterns को देखें

BotCloud यह कैसे solve करता है

BotCloud automation signals को engine level पर remove करता है, किसी भी page code execute होने से पहले:

  • navigator.webdriver natively false return करता है, JavaScript override के माध्यम से नहीं
  • Page contexts में कोई framework binding objects नहीं हैं
  • CDP session activity page JavaScript से isolated है
  • Headless और headed modes identical अवलोकन योग्य behavior produce करते हैं

क्योंकि ये changes browser engine में ही होते हैं, कोई JavaScript patch नहीं है पकड़ने के लिए, कोई timing gap नहीं है exploit करने के लिए, और कोई property descriptor anomaly नहीं है खोजने के लिए।

व्यावहारिक निहितार्थ

BotCloud के साथ, आप Playwright या Puppeteer के full API surface को बिना किसी stealth plugins या configuration workarounds के उपयोग कर सकते हैं। आपकी automation scripts clean रहती हैं और business logic पर focused रहती हैं बजाय detection avoidance के।

// No stealth plugin needed - just connect and automate
const browser = await puppeteer.connect({
  browserWSEndpoint: 'wss://cloud.bots.win?token=YOUR_TOKEN',
});

const page = await browser.newPage();
await page.goto('https://example.com');

// navigator.webdriver false है, कोई automation traces visible नहीं हैं
#automation#fingerprint#webdriver#puppeteer#playwright

इस पोस्ट को साझा करें