2012-07-09 7 views
10

में स्क्रिप्ट्स चलाना मैं एक विशेष वेबपृष्ठ को स्क्रैप करने की कोशिश कर रहा हूं जो निम्नानुसार काम करता है।HtmlAgilityPack

पहला पृष्ठ लोड होता है, फिर यह पेज को पॉप्युलेट करने के लिए आवश्यक डेटा लाने के लिए किसी प्रकार का जावास्क्रिप्ट चलाता है। मुझे उस डेटा में दिलचस्पी है।

यदि मुझे HtmlAgilityPack वाला पृष्ठ प्राप्त होता है - स्क्रिप्ट नहीं चलती है तो मुझे यह अनिवार्य रूप से अधिकतर खाली पृष्ठ मिलता है।

क्या कोई स्क्रिप्ट चलाने के लिए इसे मजबूर करने का कोई तरीका है, इसलिए मैं डेटा प्राप्त कर सकता हूं?

+0

http://phantomjs.org/ –

उत्तर

9

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

आपकी सबसे अच्छी शर्त WebBrowser नियंत्रण का उपयोग करना है और वास्तव में प्रोग्राम को स्वचालित रूप से इंटरनेट एक्सप्लोरर में प्रोग्रामेटिक नियंत्रण के तहत लोड और चलाने के लिए है। यह तेज़ या सुंदर नहीं होगा, लेकिन यह वही करेगा जो आपको करने की ज़रूरत है।

भी इसी तरह के प्रश्न का मेरा उत्तर देखें: Load a DOM and Execute javascript, server side, with .Net जो ऐसा करने के लिए .NET में उपलब्ध तकनीक पर चर्चा करता है। अधिकांश टुकड़े अभी मौजूद हैं लेकिन अभी तक काफी कुछ नहीं हैं या दुर्भाग्यवश, सही तरीके से एकीकृत नहीं किए गए हैं।

+0

पर एक नज़र डालें वेबब्राउज़र नियंत्रण के कारण जीडीआई + हैंडल/मेमोरी रिसाव मुझे विकल्प तलाशने के लिए प्रेरित कर रहा है। मुझे खेद है कि इस समस्या का कोई उचित समाधान नहीं है। – Aabela

+0

बमर। हाँ यह उन स्थानों में से एक है जो अभी तक काफी नहीं हैं, कम से कम अगर आप इसे .NET के भीतर रखते हैं। यदि आप हाइब्रिड ऐप के साथ रह सकते हैं, तो ऐसा करने के लिए निश्चित रूप से तरीके हैं, लेकिन यह अधिक जटिल होगा। मैं आशा करता हूं कि कोई भी वास्तविक एकीकृत हेडलेस ब्राउज़र पर पूरी तरह से .NET में बनाने के लिए काम करेगा। लेकिन यह निश्चित रूप से कोई छोटा काम नहीं है। जैसे मैंने कहा कि बहुत सारे टुकड़े हैं लेकिन किसी को उन्हें एक साथ रखने की जरूरत है। –

3

आप इसके लिए Awesomium का उपयोग कर सकते हैं, http://www.awesomium.com/। यह काफी अच्छी तरह से काम करता है लेकिन x64 के लिए कोई समर्थन नहीं है और धागा सुरक्षित नहीं है। मैं इसे कुछ वेब साइट्स 24x7 स्कैन करने के लिए उपयोग कर रहा हूं और यह पंक्ति में कम से कम दो दिनों के लिए ठीक चल रहा है लेकिन फिर यह आमतौर पर दुर्घटनाग्रस्त हो जाता है।

संबंधित मुद्दे