Back to Blog

प्ले राइट में हेडलेस परीक्षण और पार्सिंग के लिए प्रॉक्सी सेटअप: पूर्ण गाइड

हम समझाते हैं कि Playwright में हेडलेस-टेस्टिंग और पार्सिंग के लिए प्रॉक्सी को सही तरीके से कैसे कनेक्ट करें - कोड के उदाहरणों, आईपी रोटेशन और एंटी-बॉट सुरक्षा को बायपास करने के साथ।

📅May 8, 2026
```html

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

Playwright में प्रॉक्सी की आवश्यकता और कब इसके बिना नहीं रह सकते

Playwright एक वास्तविक ब्राउज़र (Chromium, Firefox या WebKit) को बैकग्राउंड में चलाता है - यही हेडलेस है। वेबसाइट के दृष्टिकोण से, आप एक सामान्य उपयोगकर्ता की तरह दिखते हैं, लेकिन केवल एक निश्चित समय तक। जैसे ही एक IP से प्रति घंटे सैकड़ों अनुरोध आने लगते हैं, सुरक्षा एल्गोरिदम तुरंत प्रतिक्रिया करते हैं: CAPTCHA, अस्थायी ब्लॉक, पूर्ण बैन।

यहाँ कुछ विशिष्ट परिदृश्य हैं जब प्रॉक्सी अनिवार्य है:

  • मार्केटप्लेस का पार्सिंग - Wildberries, Ozon, Avito, Yandex.Market एक IP से 50-100 अनुरोधों के बाद स्क्रिप्ट को ब्लॉक कर देते हैं।
  • प्रतिस्पर्धियों की कीमतों की निगरानी - यदि आप हर 15 मिनट में जांच करते हैं, तो IP बदले बिना आपको कुछ घंटों में बैन मिल जाएगा।
  • भू-स्थान परीक्षण - यह जांचना आवश्यक है कि वेबसाइट जर्मनी, अमेरिका या कजाकिस्तान के उपयोगकर्ताओं के लिए कैसे दिखती है।
  • फॉर्म भरना और खातों की पंजीकरण - प्लेटफ़ॉर्म खातों को IP से जोड़ते हैं और सामूहिक पंजीकरण को ब्लॉक करते हैं।
  • SEO निगरानी - Google और Yandex से रैंकिंग एकत्र करने के लिए निरंतर IP परिवर्तन की आवश्यकता होती है, अन्यथा खोज इंजन CAPTCHA दिखाएगा।
  • ए/बी फ़ंक्शंस का परीक्षण - कुछ सुविधाएँ केवल विशिष्ट देशों या क्षेत्रों के उपयोगकर्ताओं के लिए उपलब्ध हैं।

यह समझना महत्वपूर्ण है: Playwright अपने आप में आपको गुमनाम नहीं बनाता। बिना प्रॉक्सी के सभी अनुरोध आपके वास्तविक IP पते से आते हैं। प्रॉक्सी जोड़ना किसी भी स्वचालित स्क्रिप्ट के स्थिर काम के लिए पहला और सबसे महत्वपूर्ण कदम है।

💡 जानना महत्वपूर्ण है

Playwright पूरे ब्राउज़र, अलग संदर्भ (BrowserContext) और यहां तक कि अलग पृष्ठ पर प्रॉक्सी का समर्थन करता है। यह लचीलापन प्रदान करता है: विभिन्न पृष्ठ एक साथ विभिन्न IP के माध्यम से काम कर सकते हैं।

हेडलेस-स्वचालन के लिए किस प्रकार की प्रॉक्सी चुनें

सभी प्रॉक्सी Playwright के लिए समान रूप से उपयुक्त नहीं हैं। चयन कार्य पर निर्भर करता है: आप क्या पार्स कर रहे हैं, वेबसाइट की सुरक्षा कितनी आक्रामक है और आप कितने अनुरोधों की योजना बना रहे हैं।

प्रॉक्सी का प्रकार विश्वास का स्तर गति के लिए उपयुक्त
डेटा सेंटर कम बहुत उच्च कड़ी सुरक्षा के बिना पार्सिंग, परीक्षण
रिहायशी उच्च मध्यम Cloudflare वाले साइटें, मार्केटप्लेस, सोशल नेटवर्क
मोबाइल अधिकतम मध्यम Facebook, TikTok, Instagram, कड़ी एंटी-बॉट
SOCKS5 स्रोत पर निर्भर करता है उच्च यूनिवर्सल प्रोटोकॉल, Playwright द्वारा समर्थित

अधिकांश पार्सिंग कार्यों के लिए सबसे अच्छा विकल्प रिहायशी प्रॉक्सी है जो रोटेशन के साथ आती है। इनमें वास्तविक घरेलू उपयोगकर्ताओं के IP होते हैं, इसलिए वेबसाइटें इन्हें डेटा सेंटर के रूप में पहचानती नहीं हैं और स्वचालित रूप से ब्लॉक नहीं करती हैं। आक्रामक सुरक्षा वाले साइटों (Cloudflare Bot Management, Akamai) के लिए मोबाइल प्रॉक्सी का उपयोग करना बेहतर है - उनके IP मोबाइल ऑपरेटरों के होते हैं, जो अधिकतम विश्वास पैदा करते हैं।

Playwright http, https और socks5 प्रोटोकॉल का समर्थन करता है। महत्वपूर्ण: SOCKS5 कुछ संस्करणों में सीधे username:password के माध्यम से प्रमाणीकरण का समर्थन नहीं करता है - इसके बारे में त्रुटियों के अनुभाग में अधिक जानकारी है।

Playwright में प्रॉक्सी की बुनियादी सेटिंग (JavaScript और Python)

Playwright ब्राउज़र को लॉन्च करते समय proxy पैरामीटर के माध्यम से प्रॉक्सी सेट करने की अनुमति देता है। यह सबसे सरल तरीका है - ब्राउज़र के सभी अनुरोध निर्दिष्ट प्रॉक्सी सर्वर के माध्यम से जाएंगे।

JavaScript / Node.js

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch({
    proxy: {
      server: 'http://proxy.example.com:8080'
    }
  });

  const page = await browser.newPage();
  await page.goto('https://httpbin.org/ip');
  
  const content = await page.textContent('body');
  console.log(content); // प्रॉक्सी सर्वर का IP दिखाएगा

  await browser.close();
})();

Python

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(
        proxy={
            "server": "http://proxy.example.com:8080"
        }
    )
    
    page = browser.new_page()
    page.goto("https://httpbin.org/ip")
    
    print(page.text_content("body"))  # प्रॉक्सी का IP दिखाएगा
    
    browser.close()

SOCKS5 के लिए बस सर्वर के पते में स्कीम बदलें:

# Python - SOCKS5 प्रॉक्सी
browser = p.chromium.launch(
    proxy={
        "server": "socks5://proxy.example.com:1080"
    }
)

यह जल्दी से जांचने के लिए कि प्रॉक्सी काम कर रही है, https://httpbin.org/ip या https://api.ipify.org खोलें - प्रतिक्रिया में प्रॉक्सी सर्वर का IP होना चाहिए, न कि आपका असली।

यूजरनेम और पासवर्ड द्वारा प्रमाणीकरण वाली प्रॉक्सी

अधिकांश व्यावसायिक प्रॉक्सी प्रदाता यूजरनेम और पासवर्ड द्वारा प्रमाणीकरण का उपयोग करते हैं - यह एक मानक प्रथा है। Playwright इसे प्रॉक्सी ऑब्जेक्ट में username और password फ़ील्ड के माध्यम से समर्थन करता है।

JavaScript

const browser = await chromium.launch({
  proxy: {
    server: 'http://gate.proxyprovider.com:7777',
    username: 'your_login',
    password: 'your_password'
  }
});

Python

browser = p.chromium.launch(
    proxy={
        "server": "http://gate.proxyprovider.com:7777",
        "username": "your_login",
        "password": "your_password"
    }
)

आप यूजरनेम और पासवर्ड को सीधे प्रॉक्सी सर्वर के URL में भी पास कर सकते हैं - यह सुविधाजनक है यदि आप स्ट्रिंग को गतिशील रूप से बनाते हैं:

# URL में प्रमाणीकरण (Python)
proxy_url = f"http://{login}:{password}@gate.proxyprovider.com:7777"

browser = p.chromium.launch(
    proxy={"server": proxy_url}
)

⚠️ ध्यान दें

प्रॉक्सी का यूजरनेम और पासवर्ड कोड में सीधे न रखें! पर्यावरण चर का उपयोग करें (os.environ Python में या process.env Node.js में) या .env फ़ाइल dotenv पुस्तकालय के साथ।

.env के माध्यम से सुरक्षित भंडारण (Python)

import os
from dotenv import load_dotenv
from playwright.sync_api import sync_playwright

load_dotenv()

PROXY_SERVER   = os.getenv("PROXY_SERVER")
PROXY_LOGIN    = os.getenv("PROXY_LOGIN")
PROXY_PASSWORD = os.getenv("PROXY_PASSWORD")

with sync_playwright() as p:
    browser = p.chromium.launch(
        proxy={
            "server":   PROXY_SERVER,
            "username": PROXY_LOGIN,
            "password": PROXY_PASSWORD
        }
    )
    # ...

प्रॉक्सी रोटेशन: प्रत्येक अनुरोध के लिए IP बदलना

एक प्रॉक्सी बड़े संख्या में अनुरोधों पर बैन से नहीं बचा सकता। गंभीर पार्सिंग के लिए IP रोटेशन की आवश्यकता होती है - निश्चित अंतराल पर या प्रत्येक नए अनुरोध के लिए प्रॉक्सी सर्वर का स्वचालित परिवर्तन।

Playwright में रोटेशन के लिए दो दृष्टिकोण हैं:

दृष्टिकोण 1: घूर्णन प्रॉक्सी एंडपॉइंट

अधिकांश रिहायशी प्रॉक्सी प्रदाता एकल गेटवे पता प्रदान करते हैं, जो प्रत्येक कनेक्शन पर IP को स्वचालित रूप से बदलता है। आपको रोटेशन की लॉजिक लिखने की आवश्यकता नहीं है - यह प्रदाता की ओर से अंतर्निहित है।

# एक एंडपॉइंट - प्रत्येक ब्राउज़र कनेक्शन पर नया IP
browser = p.chromium.launch(
    proxy={
        "server":   "http://rotating.proxyprovider.com:8888",
        "username": "your_login",
        "password": "your_password"
    }
)

दृष्टिकोण 2: प्रॉक्सी सूची के माध्यम से मैनुअल रोटेशन

यदि आपके पास स्थिर प्रॉक्सी की सूची है, तो आप मैन्युअल रूप से रोटेशन लागू कर सकते हैं - प्रत्येक पुनरावृत्ति के लिए नया ब्राउज़र या संदर्भ बनाकर:

import random
from playwright.sync_api import sync_playwright

PROXY_LIST = [
    {"server": "http://proxy1.example.com:8080", "username": "user", "password": "pass"},
    {"server": "http://proxy2.example.com:8080", "username": "user", "password": "pass"},
    {"server": "http://proxy3.example.com:8080", "username": "user", "password": "pass"},
]

URLS_TO_SCRAPE = [
    "https://example.com/page1",
    "https://example.com/page2",
    "https://example.com/page3",
]

with sync_playwright() as p:
    for url in URLS_TO_SCRAPE:
        proxy = random.choice(PROXY_LIST)  # यादृच्छिक प्रॉक्सी
        
        browser = p.chromium.launch(proxy=proxy)
        page = browser.new_page()
        
        page.goto(url)
        # ... डेटा पार्सिंग ...
        
        browser.close()  # ब्राउज़र बंद करें, IP बदलें

दृष्टिकोण 3: ब्राउज़र संदर्भ के माध्यम से रोटेशन (ब्राउज़र को फिर से शुरू किए बिना)

with sync_playwright() as p:
    browser = p.chromium.launch()  # बिना प्रॉक्सी के ब्राउज़र
    
    for i, url in enumerate(URLS_TO_SCRAPE):
        proxy = PROXY_LIST[i % len(PROXY_LIST)]  # चक्र में
        
        # नए प्रॉक्सी के साथ नया संदर्भ - ब्राउज़र को फिर से शुरू करने से तेज
        context = browser.new_context(proxy=proxy)
        page = context.new_page()
        
        page.goto(url)
        # ... पार्सिंग ...
        
        context.close()  # संदर्भ बंद करें, ब्राउज़र नहीं
    
    browser.close()

तीसरा दृष्टिकोण - बड़े पैमाने पर पार्सिंग के लिए सबसे कुशल है। ब्राउज़र को फिर से शुरू करने में 2-4 सेकंड लगते हैं, जबकि नए संदर्भ का निर्माण 100 मिलीसेकंड से कम समय लेता है।

संदर्भ और पृष्ठ स्तर पर प्रॉक्सी

Playwright लचीली आर्किटेक्चर का समर्थन करता है: एक ब्राउज़र में कई पृथक संदर्भ हो सकते हैं, प्रत्येक के पास अपनी प्रॉक्सी होती है। यह एक ही प्रक्रिया के भीतर कई IP के साथ समानांतर काम करने की अनुमति देता है।

विभिन्न प्रॉक्सी के साथ कई संदर्भ (समानांतर पार्सिंग)

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();

  // संदर्भ 1 - जर्मनी से प्रॉक्सी
  const context_de = await browser.newContext({
    proxy: {
      server: 'http://de-proxy.example.com:8080',
      username: 'user',
      password: 'pass'
    }
  });

  // संदर्भ 2 - अमेरिका से प्रॉक्सी
  const context_us = await browser.newContext({
    proxy: {
      server: 'http://us-proxy.example.com:8080',
      username: 'user',
      password: 'pass'
    }
  });

  const page_de = await context_de.newPage();
  const page_us = await context_us.newPage();

  // समानांतर लॉन्च
  await Promise.all([
    page_de.goto('https://example.com'),
    page_us.goto('https://example.com')
  ]);

  // दोनों पृष्ठ विभिन्न IP देखते हैं
  console.log('DE IP:', await page_de.textContent('body'));
  console.log('US IP:', await page_us.textContent('body'));

  await browser.close();
})();

यह दृष्टिकोण भू-स्थान परीक्षण के लिए आदर्श है: आप एक साथ जांचते हैं कि वेबसाइट विभिन्न देशों के उपयोगकर्ताओं के लिए कैसे प्रदर्शित होती है, बिना कई ब्राउज़र उदाहरणों को चलाए।

💡 प्रदर्शन टिप

अधिकतम समानांतरता के लिए Python में asyncio या Node.js में Promise.all का उपयोग करें। एक ब्राउज़र 10-20 समानांतर संदर्भों को बिना महत्वपूर्ण मेमोरी लोड के रख सकता है।

एंटी-बॉट सुरक्षा को बायपास करना: Cloudflare, Akamai, DataDome

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

1. हेडलेस मोड को छिपाना

Playwright हेडलेस मोड में विशिष्ट लक्षण होते हैं जो आसानी से पहचाने जा सकते हैं: विशिष्ट मान navigator.webdriver, प्लगइन्स की अनुपस्थिति, असामान्य स्क्रीन आकार। छिपाने के लिए playwright-stealth पुस्तकालय का उपयोग करें:

# Python: स्थापना
# pip install playwright-stealth

from playwright.sync_api import sync_playwright
from playwright_stealth import stealth_sync

with sync_playwright() as p:
    browser = p.chromium.launch(
        proxy={
            "server":   "http://residential.proxyprovider.com:8888",
            "username": "user",
            "password": "pass"
        }
    )
    page = browser.new_page()
    stealth_sync(page)  # छिपाने का उपयोग करें
    
    page.goto("https://bot.sannysoft.com")  # बॉट पहचानने के लिए परीक्षण
    browser.close()

2. यथार्थवादी यूजर-एजेंट और व्यूपोर्ट

context = browser.new_context(
    proxy={
        "server":   "http://proxy.example.com:8080",
        "username": "user",
        "password": "pass"
    },
    user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    viewport={"width": 1920, "height": 1080},
    locale="ru-RU",
    timezone_id="Europe/Moscow"  # प्रॉक्सी के भू-स्थान के साथ मेल खाना चाहिए!
)

3. मानव व्यवहार का अनुकरण

import time
import random

# क्रियाओं के बीच यादृच्छिक देरी
def human_delay(min_ms=500, max_ms=2000):
    time.sleep(random.randint(min_ms, max_ms) / 1000)

page.goto("https://example.com")
human_delay()

# तात्कालिक के बजाय चिकनी स्क्रॉल
page.evaluate("window.scrollBy({top: 500, behavior: 'smooth'})")
human_delay(300, 800)

# क्लिक करने से पहले माउस की गति
page.mouse.move(100, 200)
human_delay(100, 300)
page.mouse.move(300, 400)
human_delay(100, 200)
page.click("button#submit")

4. प्रॉक्सी के भू-स्थान के साथ समय क्षेत्र का मेल

इसे अक्सर अनदेखा किया जाता है, लेकिन एंटी-बॉट सिस्टम मेल की जांच करते हैं: यदि आपका प्रॉक्सी मॉस्को से है, और ब्राउज़र UTC-8 (लॉस एंजेलेस) समय क्षेत्र दिखाता है - यह एक लाल झंडा है। हमेशा timezone_id को उपयोग की जाने वाली प्रॉक्सी के भू-स्थान के अनुसार सेट करें।

सामान्य त्रुटियाँ और उन्हें कैसे ठीक करें

Playwright में प्रॉक्सी के साथ काम करते समय, डेवलपर्स नियमित रूप से एक ही समस्याओं का सामना करते हैं। हम प्रत्येक को विशिष्ट समाधान के साथ समझेंगे।

त्रुटि 1: ERR_PROXY_CONNECTION_FAILED

कारण: प्रॉक्सी का गलत पता या पोर्ट, प्रॉक्सी अनुपलब्ध, गलत क्रेडेंशियल्स।
समाधान: Playwright चलाने से पहले curl के माध्यम से प्रॉक्सी की उपलब्धता की जांच करें:

# curl के माध्यम से प्रॉक्सी की जांच
curl -x http://user:[email protected]:8080 https://api.ipify.org

त्रुटि 2: SOCKS5 प्रमाणीकरण स्वीकार नहीं करता

कारण: Playwright (Chromium) username/password के माध्यम से SOCKS5 के प्रमाणीकरण का सीमित समर्थन करता है।
समाधान: प्रमाणीकरण के साथ HTTP प्रॉक्सी का उपयोग करें या ssh -D के माध्यम से स्थानीय SOCKS5 टनल सेट करें बिना पासवर्ड के।

त्रुटि 3: प्रॉक्सी काम कर रहा है, लेकिन वेबसाइट फिर भी ब्लॉक कर रही है

कारण: डेटा सेंटर प्रॉक्सी का उपयोग किया जा रहा है, जो ब्लैकलिस्ट में हैं; हेडलेस मोड को छिपाया नहीं गया; अनुरोधों की बहुत उच्च आवृत्ति।
समाधान: रिहायशी या मोबाइल प्रॉक्सी पर स्विच करें, playwright-stealth जोड़ें, अनुरोधों के बीच देरी बढ़ाएँ।

त्रुटि 4: वास्तविक IP का रिसाव (DNS लीक)

कारण: DNS अनुरोध प्रॉक्सी को बायपास कर सकते हैं।
समाधान: Playwright डिफ़ॉल्ट रूप से HTTP प्रॉक्सी का उपयोग करते समय प्रॉक्सी के माध्यम से DNS को निर्देशित करता है। लेकिन जांचने के लिए, हेडलेस ब्राउज़र में https://dnsleaktest.com का उपयोग करें।

त्रुटि 5: प्रॉक्सी के साथ धीमी गति

कारण: रिहायशी प्रॉक्सी डेटा सेंटर प्रॉक्सी की तुलना में धीमी होती हैं; प्रॉक्सी सर्वर तक बड़ी दूरी।
समाधान: भौगोलिक रूप से निकट स्थानों में प्रॉक्सी चुनें। कड़ी गुमनामी की आवश्यकताओं के बिना कार्यों के लिए डेटा सेंटर प्रॉक्सी का उपयोग करें - वे काफी तेज़ होते हैं।

त्रुटि त्वरित समाधान
ERR_PROXY_CONNECTION_FAILED curl, लॉगिन/पासवर्ड, पोर्ट की उपलब्धता की जांच करें
407 प्रॉक्सी प्रमाणीकरण आवश्यक प्रॉक्सी कॉन्फ़िगरेशन में यूजरनेम और पासवर्ड जोड़ें
वेबसाइट CAPTCHA दिखाती है प्रॉक्सी के प्रकार को रिहायशी में बदलें, stealth जोड़ें
रोटेशन पर IP नहीं बदलता अनुरोधों के बीच संदर्भ/ब्राउज़र बंद करें
कनेक्शन टाइमआउट goto() में टाइमआउट बढ़ाएँ, निकटतम प्रॉक्सी चुनें

निष्कर्ष और सिफारिशें

Playwright में प्रॉक्सी सेट करना एक बार का काम नहीं है, बल्कि आपके स्वचालन उपकरण की आर्किटेक्चर का एक हिस्सा है। सही प्रकार की प्रॉक्सी, उचित IP रोटेशन और हेडलेस मोड को छिपाने से मिलकर, आक्रामक एंटी-बॉट सुरक्षा वाले साइटों पर भी स्थिर काम प्रदान करते हैं।

आइए हम विशिष्ट कार्यों के लिए प्रॉक्सी के प्रकार के चयन पर संक्षेप में विचार करें:

  • कड़ी सुरक्षा के बिना खुले डेटा का पार्सिंग - तेज डेटा सेंटर प्रॉक्सी उपयुक्त हैं।
  • मार्केटप्लेस (Wildberries, Ozon), समाचार एग्रीगेटर - रिहायशी प्रॉक्सी की आवश्यकता है जो रोटेशन के साथ आती है।
  • सोशल नेटवर्क (Instagram, Facebook, TikTok) और Cloudflare वाली साइटें - केवल मोबाइल या रिहायशी प्रॉक्सी।
  • भू-स्थान परीक्षण - आवश्यक देश में किसी भी प्रकार की प्रॉक्सी, मुख्य बात यह है कि समय क्षेत्र मेल खाता हो।
  • उच्च आवृत्ति के साथ बड़े पैमाने पर पार्सिंग - घूर्णन रिहायशी प्रॉक्सी जो गेटवे एंडपॉइंट के साथ आती हैं।

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

```