मैं थोड़ी देर के लिए HtmlAgilityPack का उपयोग कर रहा हूं, लेकिन जिस वेब संसाधन के साथ मैं अभी काम कर रहा हूं, उसमें एक (ऐसा लगता है) jQuery प्रोटोकॉल है जिससे ब्राउज़र गुजरता है। मैं जो लोड करने की अपेक्षा करता हूं वह एक उत्पाद पृष्ठ है लेकिन वास्तव में जो लोड होता है (वेबब्राउज़र नियंत्रण और वेब क्लाइंट डाउनलोडस्ट्रिंग द्वारा सत्यापित) एक रीडायरेक्ट है, जो आगंतुक को सलाहकार चुनने और उनके साथ साइन अप करने के लिए कहता है।

दूसरे शब्दों में, क्रोम के निरीक्षण >> तत्व उपकरण का उपयोग करके, मुझे मिलता है:

<div data-v-1a7a6550="" class="product-extra-images">
  <img data-v-1a7a6550="" src="https://vw-xerophane.storage.googleapis.com:443/thumbnails/products/10174_1MainImage-White-9-14_1.jpg.100x100_q85_crop_upscale.jpg" width="50">
  <img data-v-1a7a6550="" src="https://vw-xerophane.storage.googleapis.com:443/thumbnails/products/10174_2Image2-White-9-14_1.jpg.100x100_q85_crop_upscale.jpg" width="50">

लेकिन WebBrowser और HTMLAgilityPack केवल प्राप्त करते हैं:

<div class="container content">
  <div class="alert alert-danger " role="alert">
    <button type="button" class="close" data-dismiss="alert">
      <span aria-hidden="true">&times;</span>
    </button>
    <h2 style="text-align: center; background: none; padding-bottom: 0;">It looks like you haven't selected a Consultant yet!</h2>
    <p style="text-align: center;"><span>...were you just wanting to browse or were you looking to shop and pick a Consultant to shop under?</span></p>
      <div class="text-center">
        <form action="/just-browsing/" method="POST" class="form-inline">
   ...

सिर में वर्ग परिभाषाओं में खुदाई करने के बाद, मैंने पाया कि पृष्ठ उचित लोडिंग को संभालने के लिए jQuery का उपयोग करता है, और विज़िटर पृष्ठ को ब्राउज़ करते समय क्रियाओं (स्क्रॉलिंग, आकार बदलना, छवियों पर होवर करना, अन्य छवियों का चयन करना आदि) को संभालने के लिए करता है। यहाँ jQuery के प्रमुख से है:

/*!
* jQuery JavaScript Library v2.1.4
* http://jquery.com/
*
* Includes Sizzle.js
* http://sizzlejs.com/
*
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2015-04-28T16:01Z
*/

मैंने यहां वर्णित के अनुसार स्क्रेपीशर्प की कोशिश की: C# .NET: स्क्रैपिंग डायनामिक (JS) वेबसाइट्स

लेकिन वह बस सभी उपलब्ध स्मृति का उपभोग कर रहा था और कभी भी कुछ भी नहीं बना रहा था।

यह भी: htmlagilitypack और गतिशील सामग्री समस्या जैसा कि ऊपर बताया गया है, गलत रीडायरेक्ट लोड किया गया।

मैं अधिक स्रोत प्रदान कर सकता हूं जिसे मैं निकालने का प्रयास कर रहा हूं, यदि आवश्यक हो तो पूर्ण jQuery सहित।

1
Xero Phane 24 अक्टूबर 2018, 17:06

1 उत्तर

सबसे बढ़िया उत्तर

पुनर्निर्देशन पृष्ठ को बायपास करने के लिए CaptureRedirect = false; का उपयोग करें। यह मेरे लिए आपके द्वारा उल्लिखित पृष्ठ के साथ काम करता है:

var web = new HtmlWeb();
web.CaptureRedirect = false;
web.BrowserTimeout = TimeSpan.FromSeconds(15);

अब पेज पर "उत्पाद विवरण" टेक्स्ट देखने तक प्रयास करते रहें।

var doc = web.LoadFromBrowser(url, html =>
{
    return html.Contains("Product Description");
});

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

1
Daniel Manta 24 अक्टूबर 2018, 15:35