用无头浏览器扫描Android网页

我花了一天的时间研究一个可以用来实现以下function的库:

  • 像在后台一样检索网页的完整内容,而不会将结果渲染到视图中。
  • lib应该支持在启动HTML加载之后触发ajax请求加载一些附加结果数据的页面。
  • 从生成的HTML我需要抓住XPath或CSSselect器forms的元素。
  • 在将来,我也可能需要导航到下一个页面(消防事件,提交button/链接等)

这是我没有成功的尝试:

  • Jsoup:很好,但不支持JavaScript / Ajax(所以它不加载整个页面)
  • 在HttpEntity中构build的Android:与javascript / ajax相同的问题作为jsoup
  • HtmlUnit:看起来正是我所需要的,但是经过几个小时后,无法在Android上运行(其他用户尝试加载12MB以上的jar文件失败,我自己加载了完整的源代码并将其引用为项目库,以便find诸如Applets和java.awt(由HtmlUnit使用)之类的东西在Android中不存在)。
  • 犀牛 – 我觉得这很混乱,不知道如何让它在Android的工作,即使这是我在找什么。
  • selenium驱动程序:看起来像它可以工作,但你没有一个简单的方法来实现它在一个无头的方式,让你没有实际的HTML显示到一个视图。

我真的希望HtmlUnit工作,因为它似乎是最适合我的解决scheme。 有没有办法,或者至less有另一个图书馆,我错过了适合我的需求?

我目前正在使用Android Studio 0.1.7,如果需要可以移动到Ellipse。

提前致谢!

Solutions Collecting From Web of "用无头浏览器扫描Android网页"

好了两个星期后,我承认失败,正在使用一个解决方法,这对我来说很好。

问题:
将HTMLUnit移植到Android(或者至less在我的专业水平上)太困难了。 我相信它是一个有价值的项目(而不是那些耗费经验的Java程序员的时间)。 我通过电子邮件向HTMLUnit发送了邮件,他们评论说,他们并没有考虑进入端口,也不会涉及哪些工作,但是build议任何想从这个项目开始的人都应该向邮件列表发送消息,以便让更多的开发人员参与( http: //htmlunit.sourceforge.net/mail-lists.html )。

解决方法:
我使用了内置的WebView中的android,并且覆盖了Webview类的onPageFinished方法,以便在页面完全加载后,注入抓取所有html的Javascript。 Webview也可以用来调用进一步的javascript动作,单击button,填写表单等。

码:

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; } }