在HTML中加载javascript内容

时间:2014-05-01 00:19:22

标签: javascript android html web java

所以,我有一个网页,我想加载并获取一些信息。到目前为止它很好,我使用HttpClient加载网页,然后使用Jsoup加载一些信息。但问题是:这个网页的一些内容只是通过Javascript加载而Jsoup没有加载,因为它不模拟浏览器,它只是一个HTML解析器。

所以,我开始寻找可以为我做这件事并发现HtmlUnit的东西。这是一个非常好的库,但它似乎与Android不兼容,因为让它工作非常痛苦(一些网站甚至说它与Android不兼容,因为它使用了一些Swing类)。我还发现了Selenium的Android WebDriver,但它看起来不太好,因为我需要安装一个单独的APK才能使它工作,这可能会降低性能。

那么,有没有像Jsoup或HtmlUnit这样可以模拟真实浏览器的Android兼容库,或者我可以给它一个带有HTML内容的字符串,它会在里面加载Javascripts吗?

提前致谢并抱歉任何英语错误。欢呼声。

1 个答案:

答案 0 :(得分:0)

简单地说,没有什么可以模仿浏览器而只能模仿浏览器本身。

您可以找到的任何库都可能适合特定用途,可能会评估简单的脚本,但我认为找不到通用解决方案是不可能的:现代网页工作的百万种方式可以包括数百个内部和外部JS库,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's setWebViewClient,这样您就可以设置一个WebClient,它还提供了很多隐私内容,例如onPageFinishedonPageStarted,{{ 1}} ..

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