从加载的 WebView 中获取 HTML 代码 [重复]

Posted

技术标签:

【中文标题】从加载的 WebView 中获取 HTML 代码 [重复]【英文标题】:Get the HTML code from loaded WebView [duplicate] 【发布时间】:2013-10-31 09:17:33 【问题描述】:

我有这样的事情

final WebView w=(WebView)findViewById(R.id.webView1);
w.loadUrl("http://somepage.com");

有什么方法可以在某个时刻获取 WebView 中显示的 html 页面? 我想把这个 html 页面作为字符串变量。

关键是我想在客户端执行javascript之后获取html代码...

有什么指导方针吗?

【问题讨论】:

我已经尝试过那个解决方案,但它对我不起作用,可能是android版本的问题...... 考虑到您刚刚接受了与副本相同的答案,我觉得您的回答令人惊讶。 好吧,人们说这是个愚蠢的问题,他们要求关闭所以...,我仍然无法从 webview 读取 html 文本,但我想这只是我手机上的问题,因为其他人都说效果很好,这就是我标记为已回答的原因。 请记住,如果您的应用程序将 android:targetVersionSdk 设置为 17 或更高,您需要将 @JavascriptInterface 注释添加到您希望通过 addJavascriptInterface() 公开给 JavaScript 的任何方法(例如,您在此处接受的答案中的processHTML() 方法)。 【参考方案1】:

我知道的一种方式;

在您的活动中声明 javascript 处理程序

class LoadListener
    public void processHTML(String html)
    
        Log.e("result",html);
    

配置你的 webview 之后;

webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new LoadListener(), "HTMLOUT");

比webview客户端;

    webView.setWebViewClient(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) 
            view.loadUrl("javascript:window.HTMLOUT.processHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
        
);

【讨论】:

谢谢,这就是我要找的 对于17以上的API,需要添加@JavascriptInterface注解才能生效,否则不会被调用。 这在 API 21 和 Adroid 4.2.2 中有效吗?似乎不适用于带有 API 21 的 Android 4.2.2。但它确实适用于 android 4.4.2 和 API 21。 我试过代码。 onPageFinished() 中的 view.loadUrl() 完成后,不会调用 onPageFinished()。我们怎么知道内部的 loadUrl() 已经完成了? 您的网址是否在等待请求字符串?也许相同的参数?可以发一下申请地址吗?【参考方案2】:

获取代码的一种方法是使用给定的here HttpClient。下面blog给出了另一种解决方案。

【讨论】:

这不会带来cookies等

以上是关于从加载的 WebView 中获取 HTML 代码 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 javafx 从 webview 获取内容

安卓如何使用WebView组件加载HTML代码

当WebView加载的是非HTML网页内容时,如何获取它的内容?

Android WebView从资源原始文件夹加载html文件

webview中有没有办法获取到网页源代码,加载AJAX后的

如何在flutter中获取html内容表单flutterWebViewPlugin(webview)