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