2013-10-19 90 views
1

我有一個使用Javascript創建表格的網頁。現在我在我的Java項目中使用JSoup來解析網頁。順便說一下,JSoup無法運行Javascript,因此表格不會生成,並且網頁的來源不完整。 如何包含該腳本創建的HTML代碼以便使用JSoup解析其內容?你能提供一個簡單的例子嗎?謝謝!如何解析包含Javascript的網頁?

網頁例如:

<!doctype html> 
<html> 
    <head> 
    <title>A blank HTML5 page</title> 
    <meta charset="utf-8" /> 
    </head> 
    <body> 
    <script> 
     var table = document.createElement("table"); 
     var tr = document.createElement("tr"); 
     table.appendChild(tr); 
     document.body.appendChild(table); 
    </script> 
    <p>First paragraph</p> 
    </body> 
</html> 

輸出應該是:

<!DOCTYPE html> 
<html> 
    <head> 
     <title> 
      A blank HTML5 page 
     </title> 
     <meta charset="utf-8"></meta> 
    </head> 
    <body> 
     <script> 
      var table = document.createElement("table"); 
      var tr = document.createElement("tr"); 
      table.appendChild(tr); 
      document.body.appendChild(table); 
     </script> 
     <table> 
      <tr></tr> 
     </table> 
     <p> 
      First paragraph 
     </p> 
    </body> 
</html> 

順便說一句,JSoup不包括表的標籤,因爲它是不能夠執行JavaScript。我怎樣才能做到這一點?

+0

您可能最好嘗試與JavaScript用於填充表的AJAX服務接口。 – chrylis

+0

@chrylis我認爲現在有AJAX服務! – Angelo

+0

@ClaudioSantos它不是一個重複的問題,他們問如何從腳本獲取值。我想解析該腳本的HTML輸出,這是不同的! – Angelo

回答

3

第一種可能性

你必須使用一個「真正」的瀏覽器Jsoup,即外部的一些選項,並與之交互。一個很好的選擇是selenium webdriver。有了硒,你可以使用不同的瀏覽器作爲後端,也許在你的情況下,非常輕便的htmlUnit已經可以做到了。如果調用更復雜的JavaScript,那麼運行完整的瀏覽器通常沒有其他選擇。幸運的是,phantomjs在那裏,它的足跡不算太壞(無頭和所有)。

第二種可能性

另一種方法可能是你搶用JSoup JavaScript源,並開始在Java中一個JavaScript解釋器。爲此,您可以使用Rhino。但是,如果你走這條路,你可能會直接使用HtmlUnit,這可能體積稍小一些。