2012-02-02 64 views
5

我需要從網站獲取代碼,部分代碼爲「純HTML」,部分代碼使用AJAX生成HTML代碼,Javascript。Java-如何從URL獲取HTML代碼,包括使用Firebug或任何Java庫的AJAX生成代碼

由於最簡單的方式來獲取它似乎使用Firebug,我以爲它必須存在一種方式來使用Firebug或它的一些插件能夠從Java代碼中完成它。

我遇到的問題是,通過搜索很多網站和門戶網站後,我什麼也沒找到。

任何人都知道某種方式/一些插件...這使得這個AJAX生成的代碼與靜態HTML混合在一起成爲可能,就像Firebug那樣?

謝謝,請原諒我的英語。

+0

我不確定你在問什麼。這個解釋是否正確?你想用Java來加載一個URL的內容,該URL包含任何動態生成的內容,如果URL已經使用Web瀏覽器加載,那麼這些內容將會生成。 – Aatch 2012-02-02 01:20:30

+0

不完全;我需要獲取返回的代碼,即Firebug,包括使用AJAX生成的代碼;如果我在一個簡單的瀏覽器中觀察代碼,而不是使用AJAX生成的DIV「示例」中的表格,我只能看到DIV,而不是動態生成的代碼。 Firebug也顯示這個AJAX生成的代碼。 – 2012-02-02 02:06:50

+0

這就是我說的基本上。當你做一個視圖源代碼時,你會看到頁面的源代碼HTML,但是螢火蟲不會顯示HTML的來源,而是DOM的當前結構。 AJAX和JavaScript改變了DOM,但螢火蟲仍然可以顯示當前頁面的「有效」源代碼。 – Aatch 2012-02-02 02:40:40

回答

2

Abhijeet有點不錯,但我會花時間解釋瀏覽器如何處理網頁並幫助您理解您的請求如此困難的原因。

警告這是相當粗糙,我捏造了簡潔和清晰

瀏覽器連接到服務器,並使用HTTP檢索您請求的頁面的一些細節。下載該頁面後,瀏覽器將搜索頁面中引用的任何其他資源並檢索它們。然後執行從頂部到底部的任何JavaScript,包括任何引用的腳本。這個JavaScript可以操縱頁面,但是到了這一步,瀏覽器並不關心頁面的原始源代碼,將它內化爲DOM或文檔對象模型。 JavaScript實際上只是在操縱這個DOM,因爲DOM只是一個樹形結構,而不是做任何源代碼操作。因此,firebug(或webkit檢查器)實際上並不顯示源代碼,它們顯示DOM的當前狀態的表示。

您的請求的問題在於,您希望使用單獨的系統來加載url,然後執行上面的整個過程,不幸的是,這需要您在Java中實現整個JavaScript引擎。

但是,一切都不會丟失。 HTMLUnit(由其他人提到)是用Java編寫的工作的無頭瀏覽器,因此可以將它集成到您​​的程序中。實際上,這超出了本答案的範圍,但主頁爲here,API文檔爲here

+0

是的,這就是爲什麼我最終決定在這裏問一下它的原因,因爲我不明白這樣有用的東西還沒有實現,至少不是用它作爲庫或插件。它真的不可用。 – 2012-02-02 03:53:39

2

您可以做到這一點的唯一方法是嗅探所有GET/POST請求正在做什麼。因此,請啓動Firebug &查看正在進行的GET/POST請求。

然後,您可以使用URLConnection類在Java代碼中執行該操作。

您還可以嘗試使用像htmlunit這樣的無頭瀏覽器。