दिलचस्प पोस्ट
सॉफ्ट कीबोर्ड के आयामों को प्राप्त करना वेब स्क्रैपिंग जावास्क्रिप्ट पेज पायथन के साथ मैं किस तरह के साथ एसिंक का उपयोग कर सकता हूं? क्या जावास्क्रिप्ट (node.js) में चर आयात करना संभव है? .gitignore फ़ाइल को स्वयं अनदेखा करें 100% डीआईवी चौड़ाई वास्तव में 100% नहीं है एंड्रॉइड कलर एक्सएमएल संसाधन फ़ाइल में वेब रंग मैं पर्यावरण के चर के जरिए जावा की न्यूनतम और अधिकतम आकार का आकार कैसे निर्धारित करूं? सी ++ में एक्सेसर तरीके (गेटर्स और सेटर्स) के लिए सम्मेलन .NET से SSIS पैकेज को कैसे निष्पादित करें? संदर्भ जेनेरिक के साथ अस्पष्ट है जावास्क्रिप्ट ऊँट सीज़ टू रेगुलर फॉर्म JavaScript ऑब्जेक्ट में कन्स्ट्रक्टर्स AppSettings बनाम ऐप्लिकेशन सैटिंग्स के पेशेवरों और विपक्ष (.NET app.config / Web.config) कस्टम सूची दृश्य एंड्रॉइड

पृष्ठ की सामग्री को जावास्क्रिप्ट से लोड किया गया है और जेस्उप इसे देख नहीं पाया

पृष्ठ पर एक ब्लॉक javascript द्वारा सामग्री से भरा हुआ है और Jsoup साथ पृष्ठ को लोड करने के बाद उस Jsoup से कोई भी नहीं है। Jsoup साथ पृष्ठ को पार्स करते समय javascript जेनरेटेड सामग्री प्राप्त करने का कोई तरीका क्या है?

मार्सिन के लिए विशेष यूपीडी:
यहां पृष्ठ कोड पेस्ट नहीं किया जा सकता, क्योंकि यह बहुत लंबा है: http://pastebin.com/qw4Rfqgw

यह तत्व है जो मुझे आवश्यक सामग्री है: <div id='tags_list'></div>

मुझे जावा में यह जानकारी प्राप्त करने की आवश्यकता है I जीएसओयूपी का प्रयोग करना। तत्व javascript मदद से फ़ील्ड है:

 <div id="tags_list"> <a href="/tagsc0t20099.html" style="font-size:14;">разведчик</a> <a href="/tagsc0t1879.html" style="font-size:14;">Sr</a> <a href="/tagsc0t3140.html" style="font-size:14;">стратегический</a> </div> 

जावा कोड:

 import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; public class Test { public static void main( String[] args ) { try { Document Doc = Jsoup.connect( "http://www.bestreferat.ru/referat-32558.html" ).get(); Elements Tags = Doc.select( "#tags_list a" ); for ( Element Tag : Tags ) { System.out.println( Tag.text() ); } } catch ( IOException e ) { e.printStackTrace(); } } } 

Solutions Collecting From Web of "पृष्ठ की सामग्री को जावास्क्रिप्ट से लोड किया गया है और जेस्उप इसे देख नहीं पाया"

JSoup एक HTML पार्सर है, जो किसी भी तरह के एम्बेडेड ब्राउज़र इंजन नहीं है। इसका मतलब यह है कि प्रारंभिक पृष्ठ लोड के बाद जावास्क्रिप्ट द्वारा DOM में जोड़ी गई कोई भी सामग्री पूरी तरह से अनजान है।

उस प्रकार की सामग्री तक पहुंच प्राप्त करने के लिए आपको एक एम्बेडेड ब्राउज़र घटक की आवश्यकता होगी, उस प्रकार के घटक के बारे में SO पर बहुत से चर्चाएं हैं, उदाहरण के लिए जावा में एक ब्राउज़र को एम्बेड करने का कोई तरीका क्या है?

Com.codeborne.phantomjsdriver के साथ मेरे मामले में हल नोट: यह groovy कोड है।

pom.xml

  <dependency> <groupId>com.codeborne</groupId> <artifactId>phantomjsdriver</artifactId> <version> <here goes last version> </version> </dependency> 

PhantomJsUtils.groovy

 import org.jsoup.Jsoup import org.jsoup.nodes.Document import org.openqa.selenium.WebDriver import org.openqa.selenium.phantomjs.PhantomJSDriver class PhantomJsUtils { private static String filePath = 'data/temp/'; public static Document renderPage(String filePath) { System.setProperty("phantomjs.binary.path", 'libs/phantomjs') // path to bin file. NOTE: platform dependent WebDriver ghostDriver = new PhantomJSDriver(); try { ghostDriver.get(filePath); return Jsoup.parse(ghostDriver.getPageSource()); } finally { ghostDriver.quit(); } } public static Document renderPage(Document doc) { String tmpFileName = "$filePath${Calendar.getInstance().timeInMillis}.html"; FileUtils.writeToFile(tmpFileName, doc.toString()); return renderPage(tmpFileName); } } 

ClassInProject.groovy

 Document doc = PhantomJsUtils.renderPage(Jsoup.parse(yourSource)) 

आपको यह समझने की आवश्यकता है कि क्या हो रहा है:

  • जब आप किसी वेबसाइट से किसी पृष्ठ की क्वेरी करते हैं, तो क्या आप जेएसओयूपी या आपके ब्राउज़र का उपयोग कर रहे हैं, जो आपको वापस भेजा जाता है वह कुछ HTML है जेसूप उस पार्स को पार्स करने में सक्षम है
  • हालांकि, अधिकांश वेबसाइटों में उस HTML में जावास्क्रिप्ट शामिल है, या उस HTML से लिंक किया गया है, जो सामग्री के साथ पेज को पॉप्युलेट करेगा आपका ब्राउज़र जावास्क्रिप्ट निष्पादित करने में सक्षम है, और इस प्रकार पृष्ठ को पॉप्युलेट करता है। जेसूप नहीं है

इसे समझने का तरीका निम्न है: HTML कोड पार्स करना आसान है। जावास्क्रिप्ट कोड निष्पादित करना और संबंधित HTML कोड को अद्यतन करना बहुत अधिक जटिल है, और यह एक ब्राउज़र का काम है।

इस प्रकार की समस्याओं के लिए यहां कुछ समाधान दिए गए हैं:

  1. यदि आप पा सकते हैं कि जावास्क्रिप्ट कोड जो अजाक्स कॉल कर रहा है, जो सामग्री लोड कर रहा है, आप जेएसओयूपी के साथ इन कॉल्स के यूआरएल का इस्तेमाल कर सकते हैं। ऐसा करने के लिए, अपने ब्राउज़र से डेवलपर टूल का उपयोग करें। लेकिन यह काम करने की गारंटी नहीं है:

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

मैं वास्तव में एक "रास्ता" है! हो सकता है कि यह एक "तरीके से" एक "वैकल्पिक हल" होता है … नीचे दिए गए कोड मेटा विशेषता "रीफ्रेश" और जावास्क्रिप्ट रीडायरेक्ट दोनों के लिए जांचता है … अगर उनमें से कोई भी RedirectedUrl चर सेट है तो आप अपने लक्ष्य को जानते हैं … तब आप लक्ष्य पृष्ठ पुनः प्राप्त कर सकते हैं और आगे बढ़ सकते हैं …

  String RedirectedUrl=null; Elements meta = page.select("html head meta"); if (meta.attr("http-equiv").contains("REFRESH")) { RedirectedUrl = meta.attr("content").split("=")[1]; } else { if (page.toString().contains("window.location.href")) { meta = page.select("script"); for (Element script:meta) { String s = script.data(); if (!s.isEmpty() && s.startsWith("window.location.href")) { int start = s.indexOf("="); int end = s.indexOf(";"); if (start>0 && end >start) { s = s.substring(start+1,end); s =s.replace("'", "").replace("\"", ""); RedirectedUrl = s.trim(); break; } } } } } ... now retrieve the redirected page again... 

Jsoup के साथ पृष्ठ को पार्स करते समय जावास्क्रिप्ट जेनरेटेड सामग्री प्राप्त करने का कोई तरीका क्या है?

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

प्रयत्न:

 Document Doc = Jsoup.connect(url) .header("Accept-Encoding", "gzip, deflate") .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0") .maxBodySize(0) .timeout(600000) .get();