2012-06-28 68 views
2

當我執行這個簡單的代碼來獲取網站的內容作爲文本時,它顯示我無法理解的錯誤。使用HtmlUnit時出錯

import java.io.IOException; 
import java.net.MalformedURLException; 

import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; 
import com.gargoylesoftware.htmlunit.ScriptException; 
import com.gargoylesoftware.htmlunit.WebClient; 
import com.gargoylesoftware.htmlunit.html.HtmlPage; 

public class sd { 
    public static void main(String[] args) { 
     sd vip=new sd(); 
     try { 
      vip.homePage(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     System.out.print("sssss"); 
    } 

    public void homePage() throws Exception, ScriptException { 
     final WebClient webClient = new WebClient(); 
     final HtmlPage page =  
    (HtmlPage)webClient.getPage("http://timesofindia.indiatimes.com/"); 
     String pageAsText = page.asText(); 
     String pageAsXML = page.asXml(); 

     // System.out.println(pageAsXML); 
     System.out.println("////////////////////output//////////////////////////"); 
     System.out.println(pageAsText); 
     // System.out.println(pageAsXML); 
     System.out.println("////////////////////output ends//////////////////////////"); 
    } 

} 

錯誤,我得到:

 
    ======= EXCEPTION START ======== 
Exception class=[com.gargoylesoftware.htmlunit.ScriptException] 
com.gargoylesoftware.htmlunit.ScriptException: Exception invoking jsxFunction_write 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:595) 
Caused by: java.lang.RuntimeException: Exception invoking jsxFunction_write 
Caused by: com.gargoylesoftware.htmlunit.ScriptException: Exception invoking jsxFunction_write 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:595) 

回答

4

設置你的Web客戶端,以不丟的JavaScript異常

webClient.setThrowExceptionOnScriptError(假);

如果沒有,請在初始化您的webclient時將FF設置爲客戶端行爲。

Web客戶端=新Web客戶端(BrowserVersion.FIREFOX_3_6); webClient =新的WebClient(BrowserVersion.FIREFOX_10); //取決於版本的HtmlUnit

22

WebClient::setThrowExceptionOnScriptError方法由於版本的HtmlUnit 2.11棄用。在新版本中使用以下內容:

webClient.getOptions().setThrowExceptionOnScriptError(false); 
0

即使我有這個錯誤。這個設置WebClient來抑制錯誤的選項適用於基本網站。但隨着網站變得複雜,它的字面意思是失敗

經過多次試驗後,我終於選擇了Phantomjs。它是用C++編寫的。我不得不寫一些scripts,然後execute它使用phantomjs。腳本將加載url並將數據寫入文件。

一旦這個文件準備好了,我會寫一個Java程序來加載文件數據,然後對該文件進行操作。爲了加載和抓取數據,我使用了Jsoup。如你所見,HtmlUnit,Jaunt,Jsoup支持完整的HTML,CSS。他們缺少的是他們完全不支持Javascript。這是導致錯誤的主要原因,例如拋出的異常,完整的頁面沒有被加載等等。