android webview获取网页源代码,js执行前后

webview获取网页源代码分两种,一种是js执行前,一种是js执行后

1.js执行前

调用getHtml即可
public static String getHtml(String path) throws Exception {
    // 通过网络地址创建URL对象
    URL url = new URL(path);
    // 根据URL
    // 打开连接,URL.openConnection函数会根据URL的类型,返回不同的URLConnection子类的对象,这里URL是一个http,因此实际返回的是HttpURLConnection
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    // 设定URL的请求类别,有POSTGET 两类
    conn.setRequestMethod("GET");
    //设置从主机读取数据超时(单位:毫秒)
    conn.setConnectTimeout(5000);
    //设置连接主机超时(单位:毫秒)
    conn.setReadTimeout(5000);
    // 通过打开的连接读取的输入流,获取html数据
    InputStream inStream = conn.getInputStream();
    // 得到html的二进制数据
    byte[] data = readInputStream(inStream);
    // 是用指定的字符集解码指定的字节数组构造一个新的字符串
    String html = new String(data, "utf-8");
    return html;
}


public static byte[] readInputStream(InputStream inStream) throws Exception {
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len = 0;
    while ((len = inStream.read(buffer)) != -1) {
        outStream.write(buffer, 0, len);
    }
    inStream.close();
    return outStream.toByteArray();
}

2.js执行后

启用js
settings.setJavaScriptEnabled(true); 
定义接口
private final class InJavaScriptLocalObj {
    public void showSource(String html2) {
        html = html2;
    }
}
webview添加自定义接口
webView.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");
添加webviewClient回调,执行指定js
private WebViewClient webViewClient = new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);       
        view.loadUrl("javascript:window.local_obj.showSource(''+" +
                "document.getElementsByTagName('html')[0].innerHTML+'');");        
    }
在需要获取网页源代码的地方后去html变量即可

你可能感兴趣的:(android webview获取网页源代码,js执行前后)