2014-05-01 63 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