2014-05-01 64 views
0

所以,我有一個網頁,我想加載並獲得一些信息。到目前爲止,它變得很好,我使用HttpClient加載網頁,然後使用Jsoup加載一些信息。但是這裏有個問題:這個網頁的一些內容只能通過Javascript加載,Jsoup不會加載它,因爲它不會模擬瀏覽器,它只是一個HTML解析器。加載HTML內的javascript內容

所以,我開始尋找可以爲我做的事情,並找到了HtmlUnit。這是一個非常好的庫,但它似乎與Android不兼容,因爲讓它工作起來非常痛苦(有些網站甚至認爲它與Android不兼容,因爲它使用了一些Swing類)。我還發現了Selenium的Android WebDriver,但它似乎不太好,因爲我需要安裝一個單獨的APK來使它工作,這可能會降低性能。

那麼,有沒有像Jsoup或HtmlUnit這樣可以模擬真實瀏覽器的任何Android兼容庫,或者我可以給它一個帶有HTML內容的字符串,並且它會在其中加載Javascript?

在此先感謝並對任何英語錯誤表示歉意。乾杯。

回答

0

顯然地說,沒有什麼可以模擬瀏覽器,而是瀏覽器本身。

你可以找到的任何庫都可能適合特定目的,也許評估簡單的腳本,但我不認爲有可能找到一個通用的解決方案:現代網頁工作的百萬種方式可以包括數百個內部和外部JS libaries,DOM操作,異步請求...你實際上需要一個完整的瀏覽器來使它工作,而不是一個小型的庫。

因此,如果您正在尋找一個通用的解決方案,我認爲要走的路可能是使用WebView-這確實是一個完整的HTML5瀏覽器 - ,加載您想要提取的網頁並嘗試提取數據你自己與WebView給你的所有互動可能性。請注意,您可以在隱藏的信息WebView中嘗試提取信息。

查看WebView上的文檔。有很多函數可以用來控制它的工作方式:你可以設置鉤子,當頁面嘗試加載腳本,CSS,文件,攔截調用,替換數據,從Android調用JavaScript獲取部分網頁文本或圖像...

http://developer.android.com/reference/android/webkit/WebView.html

看看功能:evaluateJavaScript,loadData和WebChromeClient可以設置與setWebChromeClient

http://developer.android.com/reference/android/webkit/WebChromeClient.html

這個對象有一噸的功能離子,你可以用它來攔截無論是在加載頁面,如onJsalert,onJsTimeout,onReceivedTitle發生,

退房也WebView'ssetWebViewClient,它允許您設置WebClient,它也提供了大量的鉤子一樣onPageFinishedonPageStartedonReceiveError ..

http://developer.android.com/reference/android/webkit/WebViewClient.html