2013-07-01 182 views
22

我已經花了一天時間就研發了可用於圖書館刮完成以下任務:Android網絡與模擬瀏覽器

  • 在後臺檢索網頁的完整內容,就像沒有渲染結果到視圖。
  • lib應該支持頁面,這些頁面會在加載例如初始HTML之後觸發ajax請求來加載一些額外的結果數據。
  • 從生成的html我需要抓住xpath或css選擇器窗體中的元素。
  • 在將來,我還可能需要導航到下一個頁面(脫火事件,提交按鈕/鏈接等)

這裏是我沒有成功嘗試:

  • Jsoup:工程偉大的,但對JavaScript/AJAX(所以它不會加載整個頁面)
  • 的Android內置的HttpEntity不支持:同樣的問題與JavaScript/AJAX作爲jsoup
  • 的HtmlUnit:看起來正是我需要的,但下班後不能得到它在和工作roid(其他用戶嘗試加載價值12MB的jar文件失敗。我自己加載了完整的源代碼,並將其引用爲項目庫,以發現諸如Applets和java.awt(由HtmlUnit使用)之類的東西在Android中不存在)。
  • 犀牛 - 我覺得這很混亂,不知道如何讓它在Android中工作,即使它是我正在尋找的。
  • 硒驅動程序:看起來像它可以工作,但你沒有一種直接的方式來實現它在一個無頭的方式,使你沒有實際的HTML顯示到一個視圖。

我真的希望HtmlUnit工作,因爲它似乎最適合我的解決方案。是否有任何方法或至少有另一個圖書館我錯過了適合我的需求?

我目前使用的是Android Studio 0.1.7,如果需要可以移動到Ellipse。

在此先感謝!

+1

似乎沒有什麼可用於我的方案。我已經開始研究HTMLUnit的Android端口,並希望能夠儘快開展工作。一旦我檢入了任何人都可以下載的HtmlUnit分支,我就會在這裏發佈。希望我能得到HtmlUnit開發者的參與,因爲它似乎對Android端口有很大的興趣。 – Pierre

+0

僅供參考:[PhantomJS.org](http://phantomjs.org)可能對其他人有幫助,就「無頭瀏覽器」而言 – MiStr

+0

已經有4年了,我們還在這裏!我面對同樣的問題! – mehulmpt

回答

19

確定兩週後我承認失敗,並且正在使用一種解決方法,此時對我很有幫助。

問題:
將HTMLUnit移植到Android(或者至少具有我的專業水平)太困難。我相信它是一個有價值的項目(對於有經驗的java程序員來說並不那麼耗時)。我通過電子郵件向HTMLUnit發送電子郵件,他們評論說他們沒有關注端口或將涉及哪些工作,但建議任何想從這個項目開始的人都應該發送一條消息到他們的郵件列表中,讓更多的開發人員參與(http://htmlunit.sourceforge.net/mail-lists.html) 。

解決方法:
我使用android內置的WebView並覆蓋了Webview類的onPageFinished方法,以便在頁面完全加載後注入抓取所有html的Javascript。 Webview也可以用來調用進一步的javascript動作,單擊按鈕,填寫表單等。

代碼:

webView.getSettings().setJavaScriptEnabled(true); 
MyJavaScriptInterface jInterface = new MyJavaScriptInterface(context); 
webView.addJavascriptInterface(jInterface, "HtmlViewer"); 

webView.setWebViewClient(new WebViewClient() { 

@Override 
public void onPageFinished(WebView view, String url) { 

    //Load HTML 
    webView.loadUrl("javascript:window.HtmlViewer.showHTML 
     ('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');"); 
} 

webView.loadUrl(StartURL); 
ParseHtml(jInterface.html); 

public class MyJavaScriptInterface { 

    private Context ctx; 
    public String html; 

    MyJavaScriptInterface(Context ctx) { 
     this.ctx = ctx; 
    } 

    @JavascriptInterface 
    public void showHTML(String _html) { 
     html = _html; 
    } 
} 
+0

我也試圖創建一個android應用程序,但我需要先刮網站才能繼續,並且該網站也啓用了JavaScript(動態加載),有什麼建議嗎?謝謝! – ZdaR

+2

這個問題仍然沒有解決,htmlunit端口爲android將是一個夢想,因爲你可以從頁面中獲取元素並運行.click()方法來生成新頁面,無論如何,你可以使用android webview來做到這一點? –