2010-06-02 18 views
11

के साथ जावास्क्रिप्ट द्वारा उत्पन्न एचटीएमएल एक्सेस करना मैं एक ऐसी वेबसाइट का परीक्षण करने में सक्षम होने की कोशिश कर रहा हूं जो अधिकांश HTML प्रस्तुत करने के लिए जावास्क्रिप्ट का उपयोग करता है। HTMLUNIT ब्राउज़र के साथ आप जावास्क्रिप्ट द्वारा जेनरेट किए गए एचटीएमएल तक कैसे पहुंच पाएंगे? मैं उनके दस्तावेज देख रहा था लेकिन यह सुनिश्चित नहीं था कि सबसे अच्छा तरीका क्या हो सकता है।HTMLunit -Java

WebClient webClient = new WebClient(); 
HtmlPage currentPage = webClient.getPage("some url"); 
String Source = currentPage.asXml(); 
System.out.println(Source); 

यह एक आसान तरीका पेज के HTML वापस पाने के लिए है, लेकिन आप domNode या जावास्क्रिप्ट के द्वारा उत्पन्न एचटीएमएल तक पहुँचने के लिए एक और तरीका का प्रयोग करेंगे?

उत्तर

1

समस्या का मानना ​​है कि AJAX कॉल के परिणामस्वरूप जावास्क्रिप्ट द्वारा उत्पन्न HTML है, क्या आपने 'AJAX does not work' section in the HtmlUnit FAQ को आजमाया है?

howtos about how to use HtmlUnit with JavaScript में भी एक अनुभाग है।

यदि आपके प्रश्न का उत्तर यहां दिया नहीं गया है, तो मुझे लगता है कि हमें मदद करने में सक्षम होने के लिए कुछ और विशिष्टताओं की आवश्यकता होगी।

9

आपको जावास्क्रिप्ट को निष्पादित करने के लिए कुछ समय देना होगा।

नीचे नमूना कार्य कोड देखें। bucketdiv एस मूल स्रोत में नहीं हैं।

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.util.List; 
import com.gargoylesoftware.htmlunit.*; 
import com.gargoylesoftware.htmlunit.html.HtmlPage; 

public class GetPageSourceAfterJS { 
    public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException { 
     java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF); /* comment out to turn off annoying htmlunit warnings */ 
     WebClient webClient = new WebClient(); 
     String url = "http://www.futurebazaar.com/categories/Home--Living-Luggage--Travel-Airbags--Duffel-bags/cid-CU00089575.aspx"; 
     System.out.println("Loading page now: "+url); 
     HtmlPage page = webClient.getPage(url); 
     webClient.waitForBackgroundJavaScript(30 * 1000); /* will wait JavaScript to execute up to 30s */ 

     String pageAsXml = page.asXml(); 
     System.out.println("Contains bucket? --> "+pageAsXml.contains("bucket")); 

     //get divs which have a 'class' attribute of 'bucket' 
     List<?> buckets = page.getByXPath("//div[@class='bucket']"); 
     System.out.println("Found "+buckets.size()+" 'bucket' divs."); 

     //System.out.println("#FULL source after JavaScript execution:\n "+pageAsXml); 
    } 
} 

आउटपुट:

Loading page now: http://www.futurebazaar.com/categories/Mobiles-Mobile-Phones/cid-CU00089697.asp‌​x?Rfs=brandZZFly001PYXQcurtrayZZBrand 
Contains bucket? --> true 
Found 3 'bucket' divs. 

HtmlUnit संस्करण इस्तेमाल किया:

<dependency> 
    <groupId>net.sourceforge.htmlunit</groupId> 
    <artifactId>htmlunit</artifactId> 
    <version>2.12</version> 
</dependency>