2010-06-02 15 views
11

ile Javascript tarafından oluşturulan html erişim HTML'nin çoğunu oluşturmak için javascript kullanan bir web sitesini test edebilmek için çalışıyorum. HTMLUNIT tarayıcısında javascript tarafından oluşturulan html'ye nasıl erişebilirsiniz? Onların belgelerini araştırıyordum ama en iyi yaklaşımın ne olabileceğinden emin değildim.htmlunit -Java

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

Bu sayfanın html geri almak için kolay bir yoldur ancak DOMNode veya javascript tarafından oluşturulan html erişmek için başka bir yol kullanmak istiyorsunuz?

cevap

9

JavaScript'in çalışması için biraz zaman ayırmalısınız.

Aşağıdaki örnek çalışma kodunu kontrol edin. bucketdiv s orijinal kaynağında değildir.

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); 
    } 
} 

Çıktı:

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'in versiyonu kullanıldı:

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