Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jsoup从webview解析登录的网站_Java_Android_Webview_Android Webview_Jsoup - Fatal编程技术网

Java 使用jsoup从webview解析登录的网站

Java 使用jsoup从webview解析登录的网站,java,android,webview,android-webview,jsoup,Java,Android,Webview,Android Webview,Jsoup,我已经用javascript和用户提示(WebView加载之前网站外部的对话框)创建了一个WebView应用程序,我使用它登录该网站。现在我想使用jsoup获取一些信息,但问题是jsoup从未登录的主页获取信息。例如,如果我没有登录到网站主页,主页上就没有用户名、消息等信息。我想使用jsoup获取这些信息,但我不能,因为jsoup实际上并没有在webview中读取相同的页面。我有没有办法“连接”jsoup和webview,让jsoup像在webview中一样阅读页面?我需要这个来做关于新消息的a

我已经用javascript和用户提示(WebView加载之前网站外部的对话框)创建了一个WebView应用程序,我使用它登录该网站。现在我想使用jsoup获取一些信息,但问题是jsoup从未登录的主页获取信息。例如,如果我没有登录到网站主页,主页上就没有用户名、消息等信息。我想使用jsoup获取这些信息,但我不能,因为jsoup实际上并没有在webview中读取相同的页面。我有没有办法“连接”jsoup和webview,让jsoup像在webview中一样阅读页面?我需要这个来做关于新消息的android通知


提前谢谢

通过注册
JavascriptInterface

您可以在活动中将接口创建为私有内部类:

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>');");
        }
    });
webview.setWebViewClient(新的WebViewClient(){
@凌驾
公共void onPageFinished(WebView视图,字符串url){
loadUrl(“javascript:window.HtmlHandler.handleHtml”+
(“”+document.getElementsByTagName('html')[0].innerHTML+“”);”;
}
});

我不知道如何使用jsoup检查现场是否存在特定的div?我应该将jsoup连接到什么?你能编辑你的问题,并更深入地解释“handleHtml”部分吗?提前谢谢
handleHtml(stringhtml)
是您的回调,此时将向您传递一个
String
,其中包含页面的完整html内容。您可以像平常一样使用JSoup来解析这个字符串并处理结果。我已经编辑了我的答案以显示对JSoup的第一次调用。现在我得到了以下错误:11-19 04:56:05.787 899-899/ba.gamers.gamersba I/chromium﹕ [信息:控制台(1)]“未捕获类型错误:对象[对象对象]没有“handleHTML”方法,来源:(1)11-19 04:56:05.817 899-899/ba.gamers.gamersba I/chromium﹕ [INFO:CONSOLE(1)]“UncaughtTypeError:无法将属性'value'设置为null”,来源:(1)抱歉,我使用不同的案例编写了该方法。这是区分大小写的,在JavaScript字符串中将handleHTML更改为handleHTML