2011-11-25 69 views
3

我正在嘗試使用htmlUnit來執行javascript。執行javascript後,我想檢查頁面是否因JavaScript執行而發生了一些變化。即我想之前和之後執行JavaScript的HTML頁面比較...在htmlUnit中執行Javascript

任何想法我怎麼能做到這一點...

這裏的示例代碼解釋什麼是我真正意圖做...

public static void main(String[] args) { 
    final WebClient webClient = new WebClient(); 

    HtmlPage page; 
    try { 
     page = webClient 
       .getPage("http://www.somepage.com"); 
     System.out.println(page.asXml()); 
     System.out.println(page.getByXPath("//script")); 

     BufferedInputStream buffer = null; 
     // System.out.print("getWebSite " + urlValue + "\n"); 

     URL url = new URL(
       "http://www.somepage.com/someJS.js"); 
     HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
     buffer = new BufferedInputStream(urlc.getInputStream()); 

     StringBuilder builder = new StringBuilder(); 
     int byteRead; 
     while ((byteRead = buffer.read()) != -1) 
      builder.append((char) byteRead); 

     buffer.close(); 

     ScriptResult result = page.executeJavaScript(builder.toString()); 
     Object jsResult = result.getJavaScriptResult(); 

     HtmlPage afterExecution = (HtmlPage) result.getNewPage(); 

     System.out.println(afterExecution.asXml()); 

    } catch (FailingHttpStatusCodeException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 
+0

是htmlUnit的問題還是比較? –

回答

1

「執行」Javascript源代碼不會執行任何操作。我希望你從result.getNewPage()得到很少的回報。嘗試更改示例以創建真實網站,並解釋您期望看到的結果,然後我們可以嘗試執行您的示例。

也就是說,有一件事可能會幫助您將HtmlUnit看作您通過Java控制的瀏覽器。您不會在頁面中「運行」Javascript,HtmlUnit會運行它。你假裝你是一個用戶點擊事物,但你通過Java代碼「點擊」。

在你的榜樣,你會導航DOM在你的,你用它來觸發JavaScript的page找到的東西 - 也許是點擊一個按鈕或圖像。調用click()的結果將爲您提供一個由Javascript執行的新頁面。

+1

嗨Rodney, 感謝您的回覆。是的,我明白htmlUnit是一個無頭java瀏覽器,我必須調用click()事件和其他事件來執行javascript。 我基本上想要做的是: 網站通常會使用