所以,我有一个网页,我想加载并获取一些信息。到目前为止它很好,我使用HttpClient加载网页,然后使用Jsoup加载一些信息。但问题是:这个网页的一些内容只是通过Javascript加载而Jsoup没有加载,因为它不模拟浏览器,它只是一个HTML解析器。
所以,我开始寻找可以为我做这件事并发现HtmlUnit的东西。这是一个非常好的库,但它似乎与Android不兼容,因为让它工作非常痛苦(一些网站甚至说它与Android不兼容,因为它使用了一些Swing类)。我还发现了Selenium的Android WebDriver,但它看起来不太好,因为我需要安装一个单独的APK才能使它工作,这可能会降低性能。
那么,有没有像Jsoup或HtmlUnit这样可以模拟真实浏览器的Android兼容库,或者我可以给它一个带有HTML内容的字符串,它会在里面加载Javascripts吗?
提前致谢并抱歉任何英语错误。欢呼声。
答案 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
,它还提供了很多隐私内容,例如onPageFinished
,onPageStarted
,{{ 1}} ..
http://developer.android.com/reference/android/webkit/WebViewClient.html