使用jsoup从webview解析登录网站

时间:2014-11-15 16:38:04

标签: java android webview android-webview jsoup

我使用javascript和用户提示创建了一个WebView应用程序(在webview加载之前的网站外部对话框),我用它来登录该网站。现在我想使用jsoup获取一些信息,但问题是jsoup从未登录的主页获取信息。例如,如果我没有登录网站主页没有像用户名,消息等信息。我想使用jsoup获取这些信息,但我不能,因为jsoup实际上并没有阅读与webview中的页面相同。有什么方法我可以以某种方式"连接" jsoup和webview所以jsoup读取WebView中的页面?我需要这个来制作关于新消息的Android通知......

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以执行javascript,通过注册JavascriptInterface

将已加载回的HTML内容传递回包含该内容的Activity

您可以在Activity中创建一个私有内部类的接口:

private class MyJavaScriptInterface {
    @JavascriptInterface
    public void handleHtml(String html) {
         // Use jsoup on this String here to search for your content.
         Document doc = Jsoup.parse(html);

         // Now you can, for example, retrieve a div with id="username" here
         Element usernameDiv = doc.select("#username").first();
    }
}

然后,将其附加到您的WebView:

webview.addJavascriptInterface(new MyJavaScriptInterface(), "HtmlHandler");

最后,添加一个WebViewClient,每次页面加载完成时都会调用此javascript方法。您必须根据当时页面的内容确定用户何时登录:

webview.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            webview.loadUrl("javascript:window.HtmlHandler.handleHtml" +
                    "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
        }
    });