🎯 कस्टमाइज़ करने योग्य, डिटेक्शन-प्रतिरोधी क्लाउड ब्राउज़र जो स्व-विकसित Chromium द्वारा संचालित है, वेब क्रॉलर और एआई एजेंट्स के लिए डिज़ाइन किया गया। 👉अभी आज़माएं
वापस ब्लॉग पर

प्लेवाइट + स्क्रैपलेस स्क्रैपिंग ब्राउज़र: एक पूर्ण HAR सत्र को कैप्चर और दोहराएँ

James Thompson
James Thompson

Scraping and Proxy Management Expert

30-Jul-2026

TL;DR:

  • HAR फ़ाइल एक संरचित HTTP आर्काइव है, यह स्क्रीनशॉट या वीडियो नहीं है। इसकी log.entries सूची में एक कैप्चर किए गए HTTP अनुरोध के लिए एक ऑब्जेक्ट होता है, जिसमें अनुरोध और प्रतिक्रिया मेटाडेटा और, जब उपलब्ध हो, रिकॉर्ड की गई सामग्री होती है।
  • Playwright HAR फ़ाइलों को ब्राउज़र-कॉंटेक्स्ट स्तर पर रिकॉर्ड करता है। कॉन्टेक्स्ट बनाते समय record_har_path सेट करें और आर्काइव को डिस्क पर लिखने के लिए context.close() कॉल करें।
  • Scrapeless Scraping Browser दूरस्थ ब्राउज़र सत्र प्रदान करता है। Playwright इसे CDP के माध्यम से कनेक्ट करता है, पृष्ठ लोड करता है, गतिशील अनुरोधों को सक्रिय करता है, और परिणामी ट्रैफ़िक को स्थानीय रूप से सहेजता है।
  • HAR विश्लेषण के लिए ब्राउज़र की आवश्यकता नहीं है। एक बार फ़ाइल मौजूद होने के बाद, Python का मानक json मॉड्यूल इसके URL, तरीके, स्थितियाँ, MIME प्रकार, हेडर और अंतर्निहित प्रतिक्रिया निकायों की जाँच कर सकता है।
  • एक कैप्चर किया गया अनुरोध Playwright के बिना पुनः जारी किया जा सकता है। उदाहरण HTTP/2 छद्म-हेडर हटाने और सामग्री एन्कोडिंग को फिर से बातचीत करने के बाद urllib का उपयोग करके एक सार्वजनिक JSON अनुरोध को फिर से बनाने की प्रक्रिया बताता है।
  • HAR पुनरागमन की सीमाएँ हैं। एक्स्पायर किए गए कुकीज़, CSRF टोकन, बियरर क्रेडेंशियल्स, वेब सॉकेट फ्रेम और बदलते सर्वर डेटा बाद में एक अनुरोध को मूल प्रतिक्रिया को फिर से उत्पन्न करने से रोक सकते हैं।
  • शुरू करने के लिए स्वतंत्र। नए Scrapeless खाते मुफ्त Scraping Browser रनटाइम के साथ आते हैं — app.scrapeless.com पर साइन अप करें.

परिचय: पहले कैप्चर करें, बाद में यह तय करें कि क्या महत्वपूर्ण है

HAR फ़ाइल HTTP लेनदेन का एक JSON आर्काइव है जो एक ब्राउज़र सत्र के दौरान देखे गए होते हैं। यह एक रेंडर किए गए पृष्ठ का स्क्रीनशॉट, DOM स्नैपशॉट, या सत्र वीडियो नहीं है।

प्रत्येक कैप्चर किए गए अनुरोध के रूप में एक ऑब्जेक्ट दिखाई देता है:

text Copy
log.entries

एक प्रविष्टि में अनुरोध विधि, URL, हेडर, क्वेरी पैरामीटर, पोस्ट किया गया डेटा, प्रतिक्रिया स्थिति, प्रतिक्रिया हेडर, समय संबंधी जानकारी, और रिकॉर्ड की गई प्रतिक्रिया सामग्री हो सकती है। बाइनरी सामग्री को Base64 जैसी एन्कोडिंग के साथ दर्शाया जा सकता है, जबकि पाठ्य निकाय सीधे प्रविष्टि में दिखाई दे सकते हैं।

यह गाइड Playwright को Chrome DevTools प्रोटोकॉल के माध्यम से Scrapeless Scraping Browser से जोड़ता है, record_har_path के साथ एक पूर्ण पृष्ठ लोड और स्क्रॉल अनुक्रम रिकॉर्ड करता है, और ब्राउज़र को बंद करता है।

कार्यप्रवाह का दूसरा भाग ब्राउज़र-मुक्त है:

  1. json के साथ HAR संरचना की जाँच करें।
  2. एक कैप्चर किया गया API अनुरोध खोजें।
  3. इसके पुनः उपयोग करने योग्य हेडर को फिर से बनाएं।
  4. इसे urllib के साथ पुनः जारी करें।
  5. नई JSON प्रतिक्रिया की तुलना आर्काइव में संग्रहीत निकाय के साथ करें।

हर प्रदर्शित परिणाम कैप्चर किए गए लक्ष्य सत्र से आता है।

HAR आर्काइव के साथ आप क्या कर सकते हैं

HAR कैप्चर तब उपयोगी होता है जब महत्वपूर्ण एंडपॉइंट पृष्ठ लोड होने से पहले ज्ञात नहीं होता।

  • पूर्ण पृष्ठ लोड का ऑडिट करें। एक सत्र से HTML, स्टाइलशीट, स्क्रिप्ट, फ़ॉन्ट, चित्र और API अनुरोधों की समीक्षा करें।
  • आंतरिक JSON एंडपॉइंट खोजें। कैप्चर के बाद आर्काइव में खोजें, बजाय इसके कि कौन सा अनुरोध महत्वपूर्ण होगा, इसकी भविष्यवाणी करें।
  • असफल पृष्ठ व्यवहार को डीबग करें। ब्राउज़र बंद होने के बाद अनुरोध के URL, प्रतिक्रिया स्थितियाँ, हेडर, MIME प्रकार, और निकायों की जाँच करें।
  • नेटवर्क साक्ष्य को संरक्षित करें। एक पोर्टेबल JSON आर्टिफैक्ट स्टोर करें जिसे बाद में विश्लेषण किया जा सके या किसी अन्य मशीन पर स्थानांतरित किया जा सके।
  • पृष्ठ-लोड व्यवहार की तुलना करें। अलग-अलग सत्र कैप्चर करें और उनके अनुरोध सेट, स्थितियों, या प्रतिक्रिया सामग्री की तुलना करें।
  • कैप्चर की गई प्रतिक्रिया डेटा निकालें। पृष्ठ फिर से लोड किए बिना अंतर्निहित JSON या पाठ निकाय पढ़ें।
  • योग्य अनुरोधों का पुनर्निर्माण करें। एक मानक HTTP क्लाइंट के साथ सार्वजनिक या अभी भी प्रामाणिक HTTP अनुरोधों को पुनः जारी करें।
  • निर्णायक ब्राउज़र परीक्षण बनाएं। Playwright की अलग route_from_har() फीचर का उपयोग करें ताकि रिकॉर्ड की गई प्रतिक्रियाएँ लाइव ब्राउज़र संदर्भ को वापस की जा सकें।

HAR फ़ाइल तब सबसे मूल्यवान होती है जब व्यापक कैप्चर एक पहले से ज्ञात एंडपॉइंट पर एक श्रोता लगाने से अधिक उपयोगी होती है।

HAR कैप्चर, वीडियो रिकॉर्डिंग, और HAR रूटिंग भिन्न हैं

इस क्षेत्र में तीन विशेषताएँ समान भाषा का उपयोग करती हैं लेकिन विभिन्न समस्याओं को हल करती हैं।

विशेषता यह क्या रिकॉर्ड करती है या करती है इसके बाद ब्राउज़र की आवश्यकता?
Playwright record_har_path HTTP अनुरोध और प्रतिक्रिया डेटा को आर्काइव करता है नहीं, ऑफ़लाइन निरीक्षण के लिए
Scrapeless सत्र रिकॉर्डिंग रेंडर किए गए सत्र का दृश्य पुनरुत्पादन बनाता है नहीं, डैशबोर्ड-प्ले बैक के लिए
Playwright route_from_har() अनुरोधों के लिए रिकॉर्ड की गई प्रतिक्रियाएँ обслужित करता है जो एक ब्राउज़र संदर्भ द्वारा बनाई जाती हैं हाँ
इस गाइड में urllib उदाहरण एक कैप्चर किए गए अनुरोध को लाइव सर्वर के लिए पुनः जारी करता है नहीं

लाइव इंटरसेप्शन

लाइव इंटरसेप्शन अनुरोधों को उनके होने पर देखता है। यह तब अच्छी तरह से काम करता है जब लक्ष्य एंडपॉइंट या प्रतिक्रिया पैटर्न पहले से ज्ञात होता है।

एक बार सत्र समाप्त होने के बाद, श्रोता द्वारा कैप्चर नहीं किया गया कोई भी चीज़ चली जाती है।

HAR कैप्चर

HAR कैप्चर संदर्भ के HTTP ट्रैफ़िक को व्यापक रूप से रिकॉर्ड करता है। महत्वपूर्ण एंडपॉइंट को ब्राउज़र बंद होने के बाद चुना जा सकता है।

यह HAR कैप्चर को निम्नलिखित के लिए बेहतर बनाता है:

  • सत्र के बाद की डीबगिंग
  • नेटवर्क इन्वेंटरी
  • API खोज
  • पृष्ठ द्वारा लोड किए गए सभी संसाधनों का ऑडिट
  • ऑफ़लाइन निरीक्षण के लिए प्रतिक्रिया निकायों का संरक्षण

स्क्रैपलेस सेशन रिकॉर्डिंग

स्क्रैपलेस स्क्रैपिंग ब्राउज़र एक अलग देशी सेशन-रिकॉर्डिंग क्षमता का समर्थन करता है। जो विशेष रूप से तैयार किए गए ब्राउज़र सत्र का पुनः खेलने योग्य दृश्य रिकॉर्ड उत्पन्न करता है।

यह HAR फ़ाइल का स्थान नहीं लेता। एक वीडियो यह दर्शाता है कि स्क्रीन पर क्या दिखाई दिया; एक HAR संरचित HTTP लेनदेन को उजागर करता है।

प्लेपराइट route_from_har()

प्लेयराइट का route_from_har() सुरक्षित HAR प्रतिक्रिया को एक लाइव ब्राउज़र संदर्भ द्वारा किए गए अनुरोधों में वापस भेजता है। इसका सामान्य उपयोग ब्राउज़र परीक्षणों में बैकएंड व्यवहार को अनुकरण करने के लिए किया जाता है।

इस गाइड में पुनः खेलने का उदाहरण कुछ और करता है: यह अभिलेख से एक अनुरोध पढ़ता है और urllib के साथ एक नया लाइव HTTP अनुरोध प्रस्तुत करता है।

स्क्रैपलेस स्क्रैपिंग ब्राउज़र के माध्यम से HAR कैप्चर करने का कारण क्या है?

स्क्रैपलेस स्क्रैपिंग ब्राउज़र वह दूरस्थ ब्राउज़र वातावरण प्रदान करता है जिसे प्लेयराइट CDP के माध्यम से चलाता है।

ब्राउज़र सत्र क्लाउड अवसंरचना पर चलाया जाता है और कनेक्शन पैरामीटर के माध्यम से भौगोलिक प्रॉक्सी चयन का समर्थन करता है। प्लेयराइट अभी भी अपनी सामान्य ब्राउज़र, संदर्भ, पृष्ठ, और HAR APIs का उपयोग करता है।

इस कार्यप्रवाह के लिए, जिम्मेदारी का विभाजन सरल है:

घटक जिम्मेदारी
स्क्रैपलेस स्क्रैपिंग ब्राउज़र दूरस्थ क्रोमियम सत्र चलाता है और CDP समाप्ति बिंदु प्रदान करता है
प्लेयराइट संदर्भ बनाता है, पृष्ठ चलाता है, और HAR रिकॉर्ड करता है
स्थानीय फ़ाइल प्रणाली session.har को संग्रहीत करता है
पायथन मानक पुस्तकालय अभिलेख का निरीक्षण करता है और चयनित अनुरोध को फिर से जारी करता है

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

संयोग एक ही क्रोम देवटूल्स प्रोटोकॉल नेटवर्क डोमेन का उपयोग करता है जिसे ब्राउज़र उपकरण नेटवर्क गतिविधि का अवलोकन करने के लिए उपयोग करते हैं।

स्क्रैपिंग ब्राउज़र क्विकस्टार्ट व्यापक प्लेयराइट और पपेटियर कनेक्शन मॉडल को कवर करता है।

पूर्वापेक्षाएँ

आपको आवश्यकता है:

  • पायथन 3.9 या नया
  • रिकॉर्ड की गई रन के लिए प्लेयराइट 1.59.0
  • एक स्क्रैपलेस खाता और API कुंजी
  • उस निर्देशिका में लिखने की पहुंच जहां session.har बनाया जाएगा
  • सार्वजनिक लक्ष्य पृष्ठ तक नेटवर्क पहुंच

प्लेयराइट 1.59.0 पायथन 3.9 या नए की घोषणा करता है। उस संस्करण को पिन करना इस गाइड में कैप्चर किए गए परिणामों से इंस्टॉलेशन को मेल खाता है।

इस कार्यप्रवाह के लिए किसी स्थानीय क्रोम इंस्टॉलेशन की आवश्यकता नहीं है। connect_over_cdp() पहले से चल रहे ब्राउज़र के साथ जुड़ता है जो स्क्रैपलेस अवसंरचना पर है।

निरीक्षण और अनुरोध-पुनरावृत्ति स्क्रिप्ट केवल पायथन की मानक पुस्तकालय का उपयोग करती हैं। वे प्लेयराइट का आयात नहीं करते हैं या ब्राउज़र कनेक्शन नहीं खोलते हैं।

चरण 1 — प्लेयराइट स्थापित करें

रिकॉर्ड की गई रन के लिए उपयोग किए गए संस्करण को स्थापित करें:

bash Copy
pip install "playwright==1.59.0"

क्योंकि स्क्रिप्ट CDP के माध्यम से एक मौजूदा दूरस्थ ब्राउज़र से जुड़ती है, इसलिए यह स्थानीय रूप से स्थापित ब्राउज़र चलाने वाले कार्यकारी को लॉन्च नहीं करती है।

शेल में स्क्रैपलेस API कुंजी सेट करें:

bash Copy
export SCRAPELESS_API_KEY="your_scrapeless_api_key"

कोड कुंजी को वातावरण से पढ़ता है न कि इसे स्रोत नियंत्रण में संग्रहीत करता है।

चरण 2 — स्क्रैपलेस CDP URL बनाएँ

स्क्रैपिंग ब्राउज़र कनेक्शन URL API कुंजी, सत्र जीवनकाल, और प्रॉक्सी स्थान को क्वेरी पैरामीटर के रूप में ले जाता है:

python Copy
import os
from urllib.parse import urlencode

API_KEY = os.environ["SCRAPELESS_API_KEY"]


def scraping_browser_url(proxy_country="US", session_ttl=180):
    params = urlencode({
        "token": API_KEY,
        "sessionTTL": session_ttl,
        "proxyCountry": proxy_country,
    })
    return f"wss://browser.scrapeless.com/api/v2/browser?{params}"

यह फ़ंक्शन इस रूप में एक URL उत्पन्न करता है:

text Copy
wss://browser.scrapeless.com/api/v2/browser?token=...&sessionTTL=180&proxyCountry=US

तीन कॉन्फ़िगर किए गए मान हैं:

  • token: स्क्रैपलेस API कुंजी
  • sessionTTL: अधिकतम सत्र जीवनकाल
  • proxyCountry: अनुरोधित प्रॉक्सी देश

URL निर्माण को एक फ़ंक्शन में रखना अन्य कैप्चर स्क्रिप्टों के बीच समान कनेक्शन सेटिंग्स को लागू करना भी आसान बनाता है।

चरण 3 — ब्राउज़र सत्र कैप्चर करें

प्लेयराइट का record_har_path सेटिंग browser.new_context() से संबंधित है, connect_over_cdp() से नहीं।

ब्राउज़र कनेक्शन क्रोमियम तक पहुँच प्रदान करता है। संदर्भ निर्धारित करता है कि क्या रिकॉर्ड किया जाएगा।

python Copy
import os
from urllib.parse import urlencode

from playwright.sync_api import sync_playwright


API_KEY = os.environ["SCRAPELESS_API_KEY"]
HAR_PATH = "session.har"


def scraping_browser_url(proxy_country="US", session_ttl=180):
    params = urlencode({
        "token": API_KEY,
        "sessionTTL": session_ttl,
        "proxyCountry": proxy_country,
    })
    return f"wss://browser.scrapeless.com/api/v2/browser?{params}"
hi Copy
sync_playwright() का उपयोग करते हुए:
    ब्राउज़र = p.chromium.connect_over_cdp(scraping_browser_url())

    संदर्भ = ब्राउज़र.new_context(
        record_har_path=HAR_PATH,
        record_har_content="embed",
    )

    पृष्ठ = संदर्भ.new_page()
    पृष्ठ.goto(
        "https://quotes.toscrape.com/scroll",
        wait_until="networkidle",
    )

    के लिए _ में सीमा (3):
        पृष्ठ.evaluate(
            "window.scrollTo(0, document.body.scrollHeight)"
        )
        पृष्ठ.wait_for_timeout(800)

    प्रिंट(
        "स्क्रॉल करने के बाद दृश्यमान उद्धरण तत्व:",
        पृष्ठ.locator(".quote").count(),
    )

    संदर्भ.close()
    ब्राउज़र.close()

प्रिंट(
    "HAR लिखा गया:",
    HAR_PATH,
    "-",
    os.path.getsize(HAR_PATH),
    "बाइट्स",
)

लाइव रन ने प्रिंट किया:

```text
स्क्रॉल करने के बाद दृश्यमान उद्धरण तत्व: 40
HAR लिखा गया: session.har - 333269 बाइट्स

लक्षित प्रारंभ में दस उद्धरण दर्शाए गए थे। प्रत्येक स्क्रॉल के नजदीक नीचे ने एक और /api/quotes?page=N अनुरोध को सक्रिय किया, जिससे चार API पृष्ठों में 40 उद्धरण दिखाए गए।

स्क्रिप्ट को यह भविष्यवाणी करने की आवश्यकता नहीं थी कि कौन सा अनुरोध बाद में महत्वपूर्ण होगा। HAR ने दस्तावेज़, स्टाइलशीट, जावास्क्रिप्ट, फ़ॉन्ट, और JSON कॉल को भी कैप्चर किया।

अपना API कुंजी मुफ्त योजना पर प्राप्त करें: app.scrapeless.com

क्यों context.close() की आवश्यकता है

HAR तब अंतिम रूप लेता है जब ब्राउज़र संदर्भ बंद हो जाता है।

Playwright record_har_path को ब्राउज़र-संदर्भ सेटिंग के रूप में दस्तावेज़ करता है और HAR को सहेजने के लिए browser_context.close() की आवश्यकता होती है। केवल ब्राउज़र कनेक्शन को बंद करने से संदर्भ कलाकृतियाँ बिना किसी सुगम फ्लश के रह सकती हैं।

सही शटडाउन क्रम है:

python Copy
संदर्भ.close()
ब्राउज़र.close()

इसलिए context.close() कॉल कैप्चर प्रक्रिया का हिस्सा है, वैकल्पिक सफाई नहीं।

record_har_content="embed" रिकॉर्ड की गई प्रतिक्रिया सामग्री को HAR के भीतर संग्रहीत करता है न कि अलग साथी फ़ाइलों में। इससे session.har बाद की JSON जांच और शरीर की तुलना के लिए आत्मनिर्भर बनता है।

ऐतिहासिक HAR प्रारूप मसौदा शीर्ष स्तर के log ऑब्जेक्ट और इसके आवश्यक entries सरणी को परिभाषित करता है। प्रत्येक प्रविष्टि एक हानिकारक HTTP अनुरोध का प्रतिनिधित्व करती है।

चरण 4 - HAR का निरीक्षण बिना ब्राउज़र के

जब संदर्भ बंद हो जाता है, session.har एक स्थानीय JSON दस्तावेज़ होता है।

निम्नलिखित स्क्रिप्ट केवल json, collections, और pathlib का उपयोग करती है:

python Copy
import json
from collections import Counter
from pathlib import Path


har = json.loads(Path("session.har").read_text())
entries = har["log"]["entries"]

प्रिंट("कुल प्रविष्टियाँ:", len(entries))

प्रकार द्वारा = Counter(
    entry["response"]["content"]["mimeType"].split(";")[0]
    के लिए entry में प्रविष्टियाँ
)

प्रत्येक mime_type, count के लिए प्रकार द्वारा.most_common():
    प्रिंट(f"  {mime_type}: {count}")

प्रिंट()

प्रत्येक प्रविष्टि में प्रविष्टियाँ:
    अनुरोध = entry["request"]
    प्रतिक्रिया = entry["response"]

    प्रिंट(
        f"{request['method']:4s} "
        f"{response['status']:3d}  "
        f"{request['url']}"
    )

कैप्चर की गई फ़ाइल में शामिल था:

text Copy
कुल प्रविष्टियाँ: 10
  application/json: 4
  text/css: 3
  text/html: 1
  application/javascript: 1
  font/woff2: 1

GET  200  https://quotes.toscrape.com/scroll
GET  200  https://quotes.toscrape.com/static/bootstrap.min.css
GET  200  https://quotes.toscrape.com/static/main.css
GET  200  https://quotes.toscrape.com/static/jquery.js
GET  200  https://fonts.googleapis.com/css?family=Raleway:400,700
GET  200  https://fonts.gstatic.com/s/raleway/v37/1Ptug8zYS_SKggPNyC0ITw.woff2
GET  200  https://quotes.toscrape.com/api/quotes?page=1
GET  200  https://quotes.toscrape.com/api/quotes?page=2
GET  200  https://quotes.toscrape.com/api/quotes?page=3
GET  200  https://quotes.toscrape.com/api/quotes?page=4

दस प्रविष्टियाँ पांच MIME प्रकारों को कवर करती हैं:

  • एक HTML दस्तावेज़
  • तीन CSS प्रतिक्रियाएँ
  • एक जावास्क्रिप्ट प्रतिक्रिया
  • एक वेब फ़ॉन्ट
  • चार JSON प्रतिक्रियाएँ

एक लाइव श्रोता /api/quotes पर फ़िल्टर होने से चार JSON अनुरोधों को देखता, लेकिन अन्य छह संसाधनों को नजरअंदाज करता। HAR ने सभी दस को बाद की जांच के लिए संरक्षित किया।

HAR प्रविष्टि संरचना को समझना

har["log"]["entries"] में प्रत्येक आइटम में अनुरोध और प्रतिक्रिया वस्तुएँ होती हैं।

एक सरल प्रविष्टि का यह आकार है:

json Copy
{
  "request": {
    "method": "GET",
    "url": "https://example.com/api/data",
    "headers": []
  },
  "response": {
    "status": 200,
    "headers": [],
    "content": {
      "mimeType": "application/json",
      "text": "{}"
    }
  }
}

उपयोगी अनुरोध फ़ील्ड में शामिल हैं:

  • method
  • url
  • headers
  • queryString
  • postData

उपयोगी प्रतिक्रिया फ़ील्ड में शामिल हैं:

  • status
  • statusText
  • headers
  • content
  • redirectURL
Copy
HAR सामग्री हर प्रविष्टि में सीधे पठनीय टेक्स्ट के रूप में संग्रहीत होने की कोई गारंटी नहीं है। संसाधन और रिकॉर्डर के आधार पर, `content.text` अनुपस्थित, डिकोड किया गया टेक्स्ट, या एक एन्कोडेड प्रतिनिधित्व हो सकता है जिसका `encoding` फ़ील्ड प्रारूप की पहचान करता है।

## चरण 5 — HTTP/2 छद्म-हेडर्स को संभालें

कैद की गई `page=1` एपीआई कॉल के लिए अनुरोध हेडर्स में नाम शामिल थे जैसे:

```text
:authority
:method
:path
:scheme

ये हैं HTTP/2 छद्म-हेडर फ़ील्ड

ये नियंत्रण जानकारी ले जाते हैं जो HTTP/1.1 अनुरोध पंक्ति या लक्ष्य में दिखाई देती है:

  • :method अनुरोध विधि को पहचानता है।
  • :scheme URI योजना को पहचानता है।
  • :authority लक्षित प्राधिकरण को पहचानता है।
  • :path पथ और क्वेरी की पहचान करता है।

छद्म-हेडर सामान्य HTTP हेडर फ़ील्ड नहीं होते हैं। HTTP/1.1-उन्मुख क्लाइंट जैसे urllib को कॉलन-प्रीफिक्स हेडर नाम स्वीकार नहीं कर सकता।

एक पुनःनिर्माण स्क्रिप्ट को उनके अर्थ को URL और विधि में अनुवादित करना होगा, फिर उन्हें सामान्य हेडर मैपिंग से बाहर करना होगा।

चरण 6 — urllib के साथ एक कैद अनुरोध को फिर से जारी करें

चयनित /api/quotes?page=1 अनुरोध अब एक स्थानीय JSON फ़ाइल के अंदर एक शब्दकोश है।

स्क्रिप्ट नीचे दी गई है:

  1. कैद की गई प्रविष्टि को ढूंढता है।
  2. इसकी विधि, URL और हेडर पढ़ता है।
  3. HTTP/2 छद्म-हेडर्स को हटा देता है।
  4. accept-encoding को हटा देता है।
  5. एक नया urllib.request.Request बनाता है।
  6. लाइव और कैद किए गए प्रतिक्रिया शरीर को पार्स करता है।
  7. दोनों पायथन ऑब्जेक्ट्स की तुलना करता है।
python Copy
import json
import urllib.error
import urllib.request
from pathlib import Path


har = json.loads(Path("session.har").read_text())
entries = har["log"]["entries"]

target = next(
    entry
    for entry in entries
    if entry["request"]["url"].endswith("page=1")
)

captured_request = target["request"]

# HTTP/2 छद्म-हेडर्स प्रोटोकॉल फ्रेमिंग का वर्णन करते हैं और नहीं हो सकते हैं
# सामान्य HTTP/1.1-शैली हेडर्स के रूप में पास किया जाए।
#
# accept-encoding को भी हटा दिया गया है ताकि urllib एक
# एन्कोडिंग को बातचीत कर सके जिसे स्क्रिप्ट सीधे डिकोड कर सके।
skip_headers = {"accept-encoding"}

headers = {
    header["name"]: header["value"]
    for header in captured_request["headers"]
    if not header["name"].startswith(":")
    and header["name"].lower() not in skip_headers
}

print("फिर से चलाए गए हेडर की संख्या:", len(headers))

request = urllib.request.Request(
    captured_request["url"],
    headers=headers,
    method=captured_request["method"],
)

with urllib.request.urlopen(request, timeout=10) as response:
    if response.status != 200:
        raise urllib.error.HTTPError(
            captured_request["url"],
            response.status,
            "अनअपेक्षित स्थिति",
            response.headers,
            None,
        )

    live_data = json.loads(response.read())

captured_content = target["response"]["content"]
captured_data = json.loads(captured_content["text"])

print("स्थिति:", response.status, "-- कोई ब्राउज़र प्रक्रिया चल रही नहीं है")
print(
    "पहले उद्धरण के लेखक:",
    live_data["quotes"][0]["author"]["name"],
)
print(
    "हर पहले से कैद की गई प्रतिक्रिया शरीर से मेल खाता है:",
    live_data == captured_data,
)

ब्राउज़र-मुक्त पुनःपोषण ने मुद्रित किया:

text Copy
फिर से चलाए गए हेडर की संख्या: 12
स्थिति: 200 -- कोई ब्राउज़र प्रक्रिया चल रही नहीं है
पहले उद्धरण के लेखक: अल्बर्ट आइंस्टाइन
हर पहले से कैद की गई प्रतिक्रिया शरीर से मेल खाता है: True

फिल्टर की गई मैपिंग में 12 सामान्य हेडर थे। HTTP/2 छद्म-हेडर और accept-encoding को बाहर किया गया था।

accept-encoding एक HTTP सामग्री-वार्ता फ़ील्ड है। पुनःपोषण क्लाइंट सपोर्ट की गई सामग्री कोडिंग का विज्ञापन कर सकता है बजाय कि ब्राउज़र की Brotli बातचीत को अंधाधुंध कॉपी करे।

लक्षित प्रतिक्रिया ने इस रन के लिए HAR में संग्रहीत JSON शरीर से मेल खाया। वह तुलना पार्स किए गए पायथन ऑब्जेक्ट्स पर की गई थी न कि उनके अनुक्रमित व्हाइटस्पेस या कुंजी फ़ॉर्मेटिंग पर।

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

आपको जो मिलता है

कार्यप्रवाह तीन पुन: उपयोग करने योग्य कलाकृतियों या परिणामों का उत्पादन करता है:

चरण आउटपुट ब्राउज़र की आवश्यकता?
कैप्चर session.har हाँ
निरीक्षण अनुरोध सूची और MIME-प्रकार सारांश नहीं
पुनः निर्गमन पार्स की गई लाइव प्रतिक्रिया और कैद-शरीर तुलना नहीं

कैद किए गए सत्र ने उत्पन्न किया:

text Copy
HAR आकार: 333269 बाइट
HTTP प्रविष्टियाँ: 10
JSON प्रविष्टियाँ: 4
स्क्रॉल करने के बाद दृश्य उद्धरण: 40
पुनः जारी अनुरोध स्थिति: 200
कैद/live JSON मिलान: True

ये संख्याएँ इस विशिष्ट लक्षित सत्र का वर्णन करती हैं। एक अलग पृष्ठ, ब्राउज़र संस्करण, स्क्रॉल समय, प्रॉक्सी स्थान, या पृष्ठ प्रतिक्रिया एक अलग अनुरोध सेट और फ़ाइल आकार उत्पन्न कर सकती है।

एक स्क्रिप्ट में पूर्ण अनुक्रम की पुष्टि करें

अलग-अलग कैप्चर, निरीक्षण, और फिर से चलाने के कार्यक्रमों को समझना आसान है, लेकिन समान चरणों को मिलाया जा सकता है:

python Copy
import json
import os
import urllib.error
import urllib.request
from collections import Counter
from pathlib import Path
from urllib.parse import urlencode

from playwright.sync_api import sync_playwright


API_KEY = os.environ["SCRAPELESS_API_KEY"]
HAR_PATH = "session.har"


def scraping_browser_url(proxy_country="US", session_ttl=180):
    params = urlencode({
        "token": API_KEY,
        "sessionTTL": session_ttl,
        "proxyCountry": proxy_country,
    })
    return f"wss://browser.scrapeless.com/api/v2/browser?{params}"


# चरण 1: कैप्चर। एक ब्राउज़र की आवश्यकता है।
with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp(
        scraping_browser_url()
    )

    context = browser.new_context(
        record_har_path=HAR_PATH,
        record_har_content="embed",
    )

    page = context.new_page()
    page.goto(
        "https://quotes.toscrape.com/scroll",
        wait_until="networkidle",
    )

    for _ in range(3):
        page.evaluate(
            "window.scrollTo(0, document.body.scrollHeight)"
        )
        page.wait_for_timeout(800)

    context.close()
    browser.close()

print("=== कैप्चर ===")
print(
    "HAR लिखा गया:",
    HAR_PATH,
    "-",
    os.path.getsize(HAR_PATH),
    "बाइट",
)


# चरण 2: निरीक्षण। ब्राउज़र बंद है।
har = json.loads(Path(HAR_PATH).read_text())
entries = har["log"]["entries"]

print("\n=== निरीक्षण (कोई ब्राउज़र नहीं) ===")
print("कुल प्रविष्टियाँ:", len(entries))

by_type = Counter(
    entry["response"]["content"]["mimeType"].split(";")[0]
    for entry in entries
)

for mime_type, count in by_type.most_common():
    print(f"  {mime_type}: {count}")


# चरण 3: एक अनुरोध को फिर से जारी करें। ब्राउज़र बंद रहता है।
target = next(
    entry
    for entry in entries
    if entry["request"]["url"].endswith("page=1")
)

captured_request = target["request"]
skip_headers = {"accept-encoding"}

headers = {
    header["name"]: header["value"]
    for header in captured_request["headers"]
    if not header["name"].startswith(":")
    and header["name"].lower() not in skip_headers
}

request = urllib.request.Request(
    captured_request["url"],
    headers=headers,
    method=captured_request["method"],
)

with urllib.request.urlopen(request, timeout=10) as response:
    if response.status != 200:
        raise urllib.error.HTTPError(
            captured_request["url"],
            response.status,
            "अप्रत्याशित स्थिति",
            response.headers,
            None,
        )

    live_data = json.loads(response.read())

captured_data = json.loads(
    target["response"]["content"]["text"]
)

print("\n=== फिर से जारी करें (कोई ब्राउज़र नहीं) ===")
print("स्थिति:", response.status)
print(
    "पहले उद्धरण लेखक:",
    live_data["quotes"][0]["author"]["name"],
)
print(
    "कैप्चर किए गए शरीर से मेल खाता है:",
    live_data == captured_data,
)

संयुक्त रन ने प्रिंट किया:

text Copy
=== कैप्चर ===
HAR लिखा गया: session.har - 333259 बाइट

=== निरीक्षण (कोई ब्राउज़र नहीं) ===
कुल प्रविष्टियाँ: 10
  application/json: 4
  text/css: 3
  text/html: 1
  application/javascript: 1
  font/woff2: 1

=== फिर से जारी करें (कोई ब्राउज़र नहीं) ===
स्थिति: 200
पहले उद्धरण लेखक: अल्बर्ट आइंस्टीन
कैप्चर किए गए शरीर से मेल खाता है: सत्य

केवल पहले चरण में Playwright का आयात और उपयोग किया जाता है। बाद के चरण फाइल और चयनित लाइव HTTP अंत बिंदु पर काम करते हैं।

एक HAR क्या कैप्चर करता है

एक HAR फ़ाइल ब्राउज़र संदर्भ द्वारा रिकॉर्ड किए गए HTTP लेनदेन का प्रतिनिधित्व करती है।

रिकॉर्डर और कॉन्फ़िगरेशन के आधार पर, एक प्रविष्टि में शामिल हो सकते हैं:

  • अनुरोध विधि और URL
  • क्वेरी-स्टिंग पैरामीटर
  • अनुरोध हेडर
  • अनुरोध कुकीज़
  • पोस्ट किया गया डेटा
  • प्रतिक्रिया स्थिति
  • प्रतिक्रिया हेडर
  • प्रतिक्रिया कुकीज़
  • MIME प्रकार
  • प्रतिक्रिया सामग्री
  • ट्रांसफर आकार
  • समय जानकारी
  • रीडायरेक्ट विवरण
  • कैश जानकारी

record_har_content="embed" के साथ, Playwright उपलब्ध प्रतिक्रिया सामग्री को HAR के भीतर संग्रहीत करता है। एम्बेडेड सामग्री के बिना, अनुरोध सूची अभी भी उपयोगी हो सकती है, लेकिन संग्रह में ऑफ़लाइन पार्सिंग या तुलना के लिए आवश्यक प्रतिक्रिया शरीर शामिल नहीं हो सकता है।

एक HAR यह सुनिश्चित नहीं करता

एक HAR फ़ाइल कैप्चर किए गए HTTP गतिविधि का एक स्थायी रिकॉर्ड है, लेकिन यह हर ब्राउज़र व्यवहार का एक पूर्ण रिकॉर्ड नहीं है।

WebSocket फ़्रेम आर्काइव नहीं होते

HAR अनुरोध और प्रतिक्रिया लेनदेन को मॉडल करता है। यह एक स्थापित WebSocket कनेक्शन के भीतर ले जाए गए संदेशों के अनुक्रम को संरक्षित नहीं करता है।

एक पृष्ठ जो सामान्य HTTP अंत बिंदुओं को एक लाइव WebSocket फ़ीड के साथ जोड़ता है, को अलग-अलग कैप्चर तंत्र की आवश्यकता होती है:

  • HTTP अनुरोध और प्रतिक्रिया ट्रैफ़िक के लिए HAR
  • सॉकेट संदेशों के लिए WebSocket फ़्रेम श्रोता

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

एक HAR DOM स्नैपशॉट नहीं है

यह फ़ाइल अंतिम दस्तावेज़ ट्री को उस तरह से संरक्षित नहीं करती है जैसे एक DOM स्नैपशॉट करेगा।
एक प्रतिक्रिया शरीर में मूल HTML या JSON हो सकता है, लेकिन बाद में JavaScript परिवर्तनों, तत्वों की स्थिति, प्रारूपित लेआउट, और उपयोगकर्ता-दृश्यमान उपस्थिति अलग चिंताएँ हैं।

HAR एक वीडियो नहीं है

आर्काइव में उस पृष्ठ पर जो कुछ भी प्रकट हुआ उसका कोई दृश्य समयरेखा नहीं है।

दृश्य ब्राउज़र व्यवहार की समीक्षा करने के लक्ष्य के लिए Scrapeless सत्र रिकॉर्डिंग का उपयोग करें। संरचित HTTP ट्रैफ़िक की जांच करने के लक्ष्य के लिए HAR कैप्चर का उपयोग करें।

कुछ सामग्री गायब या एन्कोडेड हो सकती है

HAR वैकल्पिक सामग्री फ़ील्ड का समर्थन करता है। एक रिकॉर्डर शरीरों को छोड़ सकता है, और बाइनरी संसाधन एन्कोडेड हो सकते हैं।

response.content.text पार्स करने से पहले सुनिश्चित करें कि:

  • text फ़ील्ड मौजूद है।
  • सामग्री प्रकार अपेक्षित है।
  • यदि मौजूद हो तो encoding फ़ील्ड का ध्यान रखा गया है।
  • रिकॉर्डिंग कॉन्फ़िगरेशन द्वारा शरीर को छोड़ नहीं दिया गया है।

जब ब्राउज़र-मुक्त रीइश्यू काम करता है

एक कैप्चर की गई अनुरोध को सफलतापूर्वक फिर से जारी किया जा सकता है जब लाइव सर्वर फिर से निर्मित अनुरोध को स्वीकार करता है।

सार्वजनिक /api/quotes एंडपॉइंट काम करता है क्योंकि यह समाप्त होने वाले प्रमाणित सत्र पर निर्भर नहीं करता।

रीइश्यू अधिक जटिल हो जाता है जब मूल अनुरोध का उपयोग करता है:

  • सत्र कूकीज़
  • CSRF टोकन
  • कम जीवन वाले धारक क्रेडेंशियल
  • हस्ताक्षरित URL
  • प्रति-सेशन अनुरोध हस्ताक्षर
  • केवल ब्राउज़र के अंदर संग्रहीत स्थिति
  • एक पूर्व नेविगेशन चरण द्वारा उत्पन्न डेटा
  • एक अनुरोध शरीर जिसकी सामग्री प्रति सत्र बदलती है

HAR मूल क्रेडेंशियल मूल्यों को संरक्षित कर सकता है, लेकिन यह उनकी वैधता को बढ़ा नहीं सकता। एक बार जब उन मूल्यों की वैधता समाप्त हो जाती है, तो ताज़ा स्थिति बनाने के लिए एक नया ब्राउज़र सत्र आवश्यक हो सकता है।

सुरक्षित रूप से HAR डेटा पुनर्प्रReplay करें

एक HAR फ़ाइल संवेदनशील सत्र डेटा को समाहित कर सकती है।

अनुरोध और प्रतिक्रिया हेडर निम्नलिखित को उजागर कर सकते हैं:

  • कूकीज़
  • प्राधिकरण हेडर
  • API कुंजी
  • सत्र पहचान संख्या
  • आंतरिक URL
  • एक एंडपॉइंट द्वारा लौटाई गई व्यक्तिगत डेटा

HAR फ़ाइलों को संवेदनशील कलाकृतियों के रूप में मानें:

  • उन्हें सार्वजनिक भंडार में न(commit) करें।
  • साझा करने से पहले क्रेडेंशियल्स को हटा दें।
  • संग्रहित उत्पादन सत्रों तक पहुंच को सीमित करें।
  • अनावश्यक रूप से पूर्ण हेडरों को लॉग करने से बचें।
  • केवल डिबगिंग या ऑडिट कार्य के लिए आवश्यक कैप्चर को संग्रहीत करें।
  • परियोजना की धारणा आवश्यकताओं के अनुसार आर्काइव को हटाएँ।

इस ट्यूटोरियल में आर्काइव एक सार्वजनिक, बिना प्रमाणित प्रदर्शन पृष्ठ से आता है। यही पूर्वानुमान स्वचालित रूप से प्रमाणित अनुप्रयोगों पर लागू नहीं किया जाना चाहिए।

सामान्य समस्याएँ

HAR फ़ाइल प्रकट नहीं होती

सबसे सामान्य कारण ब्राउज़र को इस संदर्भ को स्पष्ट रूप से बंद किए बिना बंद करना है।

उपयोग करें:

python Copy
context.close()
browser.close()

यह भी सुनिश्चित करें कि प्रक्रिया HAR_PATH नामक निर्देशिका में लिखने की अनुमति है।

HAR में कोई प्रतिक्रिया शरीर नहीं है

यह सुनिश्चित करें कि संदर्भ का उपयोग है:

python Copy
record_har_content="embed"

फिर जांचें कि entry["response"]["content"]["text"] मौजूद है या नहीं। कुछ संसाधन छोड़े जा सकते हैं या एन्कोडिंग के साथ प्रदर्शित किए जा सकते हैं।

urllib एक हेडर नाम को अस्वीकार करता है

किसी भी हेडर को हटा दें जिसका नाम : से शुरू होता है। ये HTTP/2 छद्म-हेडर हैं, साधारण हेडर फ़ील्ड नहीं।

URL और अनुरोध विधि पहले से ही उनकी प्रासंगिक अर्थ रखती है।

पुनः जारी की गई प्रतिक्रिया अप्रत्याशित रूप से संकुचित है

एक ब्राउज़र की accept-encoding मान को अंधाधुंध न copiar करें जब तक कि पुनरारंभ क्लाइंट हर विज्ञाप्त सामग्री कोडिंग का समर्थन न करता हो।

HTTP क्लाइंट को एक एन्कोडिंग पर बातचीत करने दें जिसे वह डीकोड कर सके।

नई प्रतिक्रिया HAR से मेल नहीं खाती है

एक असंगति का अर्थ यह नहीं है कि पुनर्निर्माण कोड गलत है।

सर्वर बदलती सामग्री, टाइमस्टैम्प, यादृच्छिक फ़ील्ड, भू-स्थान-विशिष्ट परिणाम, या ऐसे डेटा लौटा सकता है जो अब प्रामाणिक नहीं हैं।

उन फ़ील्ड की तुलना करें जिन्हें स्थिर रहना अपेक्षित है, न कि यह मानना कि हर एंडपॉइंट हमेशा समान बाइट्स लौटाता है।

निष्कर्ष

Playwright का record_har_path एक ब्राउज़र संदर्भ को एक स्थायी HTTP आर्काइव में बदलता है।

कार्यप्रवाह के तीन स्पष्ट चरण हैं:

  1. Playwright को Scrapeless स्क्रैपिंग ब्राउज़र से कनेक्ट करें और पृष्ठ सत्र को कैप्चर करें।
  2. ब्राउज़र को बंद करें और log.entries की जांच करें जैसे कोई साधारण JSON।
  3. urllib के साथ एक योग्य अनुरोध का पुनर्निर्माण करें और इसके लाइव प्रतिक्रिया की तुलना कैप्चर किए गए शरीर से करें।

आर्काइव उत्पन्न करने के लिए केवल ब्राउज़र की आवश्यकता होती है। एक बार जब context.close() HAR को फ्लश करता है, तो फ़ाइल को बिना Playwright स्थापना, ब्राउज़र प्रक्रिया, या CDP कनेक्शन वाले एक मशीन पर पार्स किया जा सकता है।

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

क्रोम देवटूल्स प्रोटोकॉल समझाने वाला ब्राउज़र कनेक्शन के नीचे प्रोटोकॉल सतह को कवर करता है।

एक वास्तविक ब्राउज़र सत्र को आर्काइव करने के लिए तैयार हैं?

सक्रापलेस समुदाय में शामिल हों ताकि आप प्ले राइट कैप्चर पैटर्न और ब्राउज़र-डिबगिंग कार्यप्रवाहों की तुलना अन्य डेवलपर्स के साथ कर सकें: डिस्कॉर्ड · टेलीग्राम

app.scrapeless.com पर मुफ्त स्क्रैपिंग ब्राउज़र रनटाइम के लिए साइन अप करें, फिर कैप्चर, निरीक्षण, और अनुरोध-पुनर्निर्माण कदमों को अपने प्रोजेक्ट से संबंधित सार्वजनिक पृष्ठ पर अनुकूलित करें।


सामान्य प्रश्न

प्रश्न: HAR फ़ाइल क्या है?

HAR फ़ाइल HTTP लेन-देन का एक JSON आर्काइव है जो एक ब्राउज़र सत्र के दौरान कैप्चर किया गया है। इसका log.entries ऐरे प्रत्येक रिकॉर्ड की गई अनुरोध के लिए एक वस्तु को शामिल करता है, जिसमें अव्यवस्थित अनुरोध, प्रतिक्रिया, समय, और सामग्री की जानकारी होती है।

HAR फ़ाइल स्क्रीनशॉट, पृष्ठ वीडियो, या पूर्ण DOM स्नैपशॉट नहीं है।

प्रश्न: HAR कैप्चर जीवित अनुरोध इंटरसेप्शन से कैसे भिन्न है?

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

लाइव इंटरसेप्शन तब उपयोगी होता है जब एंडपॉइंट पहले से ज्ञात होता है। HAR कैप्चर तब उपयोगी होता है जब महत्वपूर्ण अनुरोध केवल तभी खोजा जा सकता है जब सत्र समाप्त हो गया है।

प्रश्न: क्या आपको HAR फ़ाइल पढ़ने के लिए एक ब्राउज़र की आवश्यकता है?

नहीं। एक पूर्ण HAR फ़ाइल एक साधारण JSON दस्तावेज़ है जिसे पायथन के json मॉड्यूल के साथ पढ़ा जा सकता है।

कैप्चर के दौरान ब्राउज़र की आवश्यकता होती है, लेकिन ऑफ़लाइन निरीक्षण के दौरान नहीं।

प्रश्न: क्या HAR कैप्चर में वेबसॉकेट ट्रैफ़िक शामिल है?

HAR कैप्चर एक स्थापित वेबसॉकेट कनेक्शन के अंदर विनिमयित संदेशों का अभिलेख नहीं रखता है।

जब पृष्ठ एक लाइव सॉकेट फ़ीड पर निर्भर करता है तो वेबसॉकेट फ़्रेम श्रोता का उपयोग करें। HAR तब भी उसी पृष्ठ द्वारा प्रयुक्त सामान्य HTTP ट्रैफ़िक को कवर कर सकता है।

प्रश्न: क्या प्ले राइट HAR रिकॉर्डिंग स्क्रैपलेस सत्र रिकॉर्डिंग के समान है?

नहीं। प्ले राइट HAR रिकॉर्डिंग एक संरचित नेटवर्क आर्काइव बनाती है, जबकि स्क्रैपलेस सत्र रिकॉर्डिंग प्रस्तुत ब्राउज़र सत्र का एक दृश्य पुनरावलोकन बनाती है।

अनुरोध और प्रतिक्रिया विश्लेषण के लिए HAR का उपयोग करें। जब दृश्य पृष्ठ व्यवहार जांच का उद्देश्य हो तो सत्र रिकॉर्डिंग का उपयोग करें।

प्रश्न: क्या urllib उदाहरण प्ले राइट के route_from_har() के समान है?

नहीं। route_from_har() एक लाइव प्ले राइट ब्राउज़र संदर्भ के भीतर किए गए अनुरोधों के लिए रिकॉर्ड की गई प्रतिक्रियाएँ प्रदान करता है।

urllib उदाहरण HAR से एक अनुरोध पढ़ता है और बिना ब्राउज़र शुरू किए लाइव सर्वर पर एक नया अनुरोध प्रस्तुत करता है।

प्रश्न: HAR में :authority और :method जैसे हेडर क्यों होते हैं?

ये नाम HTTP/2 स्यूडो-हेडर फ़ील्ड हैं जो HTTP/2 प्रोटोकॉल के भीतर अनुरोध नियंत्रण डेटा वहन करने के लिए उपयोग किए जाते हैं।

ये साधारण हेडर फ़ील्ड नहीं हैं, इसलिए HTTP/1.1-शैली के क्लाइंट को उनके अर्थ को अनुरोध विधि और URL के माध्यम से प्रतिनिधित्व करना चाहिए बजाय कॉलन-पूर्ववर्ती नामों को कॉपी करने के।

प्रश्न: क्या प्रत्येक कैप्चर किया हुआ अनुरोध को सफलतापूर्वक पुनः जारी किया जा सकता है?

नहीं। एक अनुरोध केवल तब पुनः जारी किया जा सकता है जब लाइव सर्वर पुनर्निर्मित विधि, URL, शरीर, हेडर और क्रेडेंशियल्स को स्वीकार करे।

अनुरोध जो समाप्त हुए कुकीज़, CSRF टोकन, हस्ताक्षरित URLs, या अल्पकालिक धारक क्रेडेंशियल्स पर निर्भर करते हैं, शायद एक नए ब्राउज़र सत्र की आवश्यकता हो।

प्रश्न: क्या इस कार्यप्रवाह के लिए एक अलग प्रॉक्सी की आवश्यकता है?

स्क्रैपलेस स्क्रैपिंग ब्राउज़र कनेक्शन पहले से ही इच्छित प्रॉक्सी देश को निर्दिष्ट करता है, इसलिए कोई अलग प्रॉक्सी कॉन्फ़िगरेशन आवश्यक नहीं है।

उदाहरण में CDP कनेक्शन URL में proxyCountry=US सेट किया गया है, इसलिए ब्राउज़र सत्र उस कॉन्फ़िगर किए गए बाहर निकलने का उपयोग करता है।

प्रश्न: क्या HAR फ़ाइल साझा करना सुरक्षित है?

HAR फ़ाइल को संवेदनशील के रूप में माना जाना चाहिए जब तक कि इसके सामग्रियों की समीक्षा और सफाई नहीं की गई है।

इसमें कुकीज़, अधिकृत हेडर, API कुंजी, आंतरिक एंडपॉइंट, जमा की गई फ़ॉर्म डेटा, या निजी प्रतिक्रिया सामग्री हो सकती है। फ़ाइल साझा करने या संलग्न करने से पहले संवेदनशील मान हटा दें।

प्रश्न: क्या HAR रिकॉर्डिंग केवल स्क्रैपलेस स्क्रैपिंग ब्राउज़र के साथ काम करती है?

नहीं। record_har_path एक प्ले राइट ब्राउज़र-संदर्भ विकल्प है और इसे संगत स्थानीय या दूरस्थ ब्राउज़रों के साथ उपयोग किया जा सकता है।

स्क्रैपलेस स्क्रैपिंग ब्राउज़र कैप्चर चरण के दौरान उपयोग किए जाने वाले प्रबंधित दूरस्थ क्रोमियम वातावरण और प्रॉक्सी कॉन्फ़िगरेशन प्रदान करता है।

स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।

सबसे लोकप्रिय लेख

सूची