2010-06-02 5 views
11

저는 대부분의 HTML을 렌더링하기 위해 자바 스크립트를 사용하는 웹 사이트를 테스트 할 수 있도록 노력하고 있습니다. HTMLUNIT 브라우저를 사용하면 어떻게 javascript에 의해 생성 된 HTML에 액세스 할 수 있습니까? 나는 그들의 문서를보고 있었지만 가장 좋은 접근법이 무엇인지 확신 할 수 없었다.htmlunit -Java로 자바 스크립트에 의해 생성 된 HTML에 액세스하기

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

이 페이지의 HTML을 다시 얻을 수있는 가장 쉬운 방법입니다하지만 당신은 domNode 또는 자바 스크립트에 의해 생성 된 HTML에 접근하는 또 다른 방법을 사용할 것인가?

답변

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>