Android:将动态HTML内容解析为String

时间:2016-11-16 18:33:52

标签: java android webview

我需要检索HTML页面such as this的内容并将它们存储到String以使用JSoup进一步解析它。问题是内容是从JavaScript动态生成的,尽管我进行了所有研究,但我似乎无法找到解决方案。

到目前为止,我已尝试使用不可见的WebView并添加JavaScriptInterface以便检索内容,如下所示:

webView = new WebView(this);
webView.setVisibility(View.GONE);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new HTMLListener(), "HTMLOUT");

String UA = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0";
settings.setUserAgentString(UA);

WebViewClient webViewClient = new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            return true;
        }

        @Override
        public void onPageStarted(WebView view, String url,
                                  Bitmap favicon) {
        }

        public void onPageFinished(WebView view, String url) {
            Log.d("Load", "load finished");
            view.loadUrl("javascript:window.HTMLOUT.processHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
        }

    };

webView.setWebViewClient(webViewClient);

HTMLListener类:

private class HTMLListener {

    @android.webkit.JavascriptInterface
    public void processHTML(String html) {

        doSomethingWithHTML(html);
    }
}

现在这已经在API18上工作了(不知何故 - 我知道这个解决方案主要是hackish),但WebView行为在后来的一个API(API 21 IIRC)中发生了变化。看起来onPageFinished方法现在异步执行并且在呈现动态内容之前过早触发。

有什么方法可以解决这个问题?实际上,任何将动态Web内容存储到String的解决方案都非常受欢迎。

0 个答案:

没有答案