2011-09-07 21 views
5

में किसी URL से सामग्री पढ़ने से पहले पृष्ठ लोड होने तक प्रतीक्षा करें, मैं अपने जावा कोड में एक यूआरएल से पढ़ रहा हूं लेकिन जिस पेज को मैं पढ़ना चाहता हूं उसे लोड करने के दौरान एक आदेश निष्पादित करता है और इनपुटस्ट्रीम रीडर पूरी तरह से लोड होने से पहले पृष्ठ को पढ़ता है, इसलिए वास्तविक सामग्री लोड होने से पहले मेरे buffered पाठक केवल पृष्ठ पर HTML एकत्र करता है।जावा

मेरा मुख्य लक्ष्य पृष्ठ पर "बिक्री" शब्द ढूंढना है, लेकिन अगर मैं खोला गया स्ट्रीम पूर्ण पृष्ठ लोड होने से पहले कनेक्ट होता है तो मैं ऐसा नहीं कर सकता। क्या इसे लोड करने या कुछ करने का इंतजार करने का कोई तरीका है?

URL url = new URL("http://urlgoeshere.com?"+ withAParam); 
     URLConnection uc = url.openConnection(); 
     uc.connect(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream())); 
     String inputLine = in.readLine(); 
     int index = -1;    
     while ((inputLine = in.readLine()) != null){ 
      index=inputLine.toLowerCase().indexOf("sales"); 
      if(index>=0){ 
      log.info("Found sales!"); 
       break;     
      } 
     } 
     if (in != null){ 
      in.close(); 
     } 
+0

यह समझ में नहीं आता है। 'BufferedReader' अनुक्रमिक रूप से पृष्ठ को तब तक पढ़ेगा जब तक स्ट्रीम में कोई और सामग्री न हो। पृष्ठ लिखने वाले कुछ भी पढ़े जाएंगे। यदि पृष्ठ गतिशील है, तो यह अभी भी सामग्री उठाएगा। यदि पोस्ट-लोडिंग क्रिया जावास्क्रिप्ट में की जाती है, तो यह दृष्टिकोण कभी काम नहीं करेगा क्योंकि यह जावास्क्रिप्ट निष्पादित या यहां तक ​​कि नहीं लाएगा। – jiggy

उत्तर

1

अब पहले कुछ जावा कोडिंग सुझावों कि आपकी समस्या तो एक टिप है कि हो सकता है हल नहीं होगा:

यहाँ मेरी कोड है।

आपको अपना कोड दोबारा करना चाहिए और try-finally का उपयोग करना चाहिए जहां आप अंततः ब्लॉक को बंद कर देते हैं ताकि यह सुनिश्चित किया जा सके कि यह हमेशा अपवाद फेंकने पर भी बंद हो जाता है। फिर मैं एक int के साथ indexOf का उपयोग नहीं करता। कोड को अधिक तेज़, पठनीय और कम वर्बोज़ लिखने के लिए if(inputLine.toLowerCase().contains("sales")){ सीधे अपने if स्टेटमेंट में और सभी इंडेक्स कोड को निकालने के लिए।

आप होमपेज लाने के लिए अपाचे एपीआई http://hc.apache.org/httpcomponents-client-ga/index.html आज़मा सकते हैं।

+0

युक्तियों के लिए धन्यवाद! हालांकि मैंने apache httpcomponents में देखा और जब मैं मूल यूआरएल ओपनस्ट्रीम दृष्टिकोण के समान डेटा प्राप्त कर सकता था - यह अभी भी केवल पृष्ठ का हिस्सा लोड किया गया था। मैंने स्रोत का उपयोग किया: http://hc.apache.org/httpclient-3.x/tutorial.html। हममम .. – Chris