Android获取h5代码

来源:互联网 发布:淘宝男士服装店铺推荐 编辑:程序博客网 时间:2024/06/05 04:50

本文只是提取了一些派派自动答题工具的部分代码进行说明。原理只是原生和js的交换而已,下面就说说我的思路吧。刚开始玩派派的时候,是一个朋友分享了一个二维码给我,通过访问二维码进入答题界面,进去随便答题一下都有几分钱,后来无意中发现这个链接只要刷新就可以重新开始,每次都这样,每次都有几分钱,后来登录上app看,钱是存在的,然后才有了这个自动点击工具。不过后来玩了三天,发现虽然提示有几分钱,但是app上面的余额并没有增长了,可能人家发现了这个漏洞进行修复了,也可能是人家的套路,让你玩多几次先,之后把你耍了,哈哈。

我先是自定义了一个webView

import android.content.Context;import android.net.http.SslError;import android.text.TextUtils;import android.util.AttributeSet;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.webkit.JavascriptInterface;import android.webkit.SslErrorHandler;import android.webkit.WebChromeClient;import android.webkit.WebResourceRequest;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.LinearLayout;import android.widget.ProgressBar;import com.kawa.videoplay.R;/**** * <pre> *  Project_Name:     *  Copyright:       *  Created:         Kawa on 2017/10/27 15:50. *  E-mail:           *  Desc:             * </pre>  ****/public class MyWebView extends LinearLayout {    private Context mContext;    private WebView webView;    private ProgressBar progressBar;    private JsObject jsObject;    public MyWebView(Context context) {        this(context, null, 0);    }    public MyWebView(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public MyWebView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init(context);    }    private void init(Context context) {        mContext = context;        LayoutInflater.from(mContext).inflate(R.layout.wg_web_view, this);        webView = (WebView) findViewById(R.id.wg_web_view);        progressBar = (ProgressBar) findViewById(R.id.wg_web_view_progressBar);        webView.getSettings().setBuiltInZoomControls(false);        webView.getSettings().setUseWideViewPort(false);        webView.getSettings().setJavaScriptEnabled(false);        webView.getSettings().setUseWideViewPort(true);        webView.getSettings().setLoadWithOverviewMode(true);        jsObject = new JsObject();        webView.addJavascriptInterface(jsObject, "local_obj");        webView.loadData("", "text/html", null);        initWebViewClient();    }    /**     * 初始化WebView事件监听     */    private void initWebViewClient() {        webView.setWebViewClient(new WebViewClient() {            @Override            public void onPageFinished(WebView view, String url) {                super.onPageFinished(view, url);                if (listener!=null){                    listener.onInitWebView(view);                }            }            @Override            public boolean shouldOverrideUrlLoading(WebView view, String url) {                return handlerUrl(url);            }            @Override            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {                //super.onReceivedSslError(view, handler, error);                handler.proceed();            }        });        webView.getSettings().setJavaScriptEnabled(true);        //设置进度调        webView.setWebChromeClient(new WebChromeClient() {            @Override            public void onProgressChanged(WebView view, int newProgress) {                super.onProgressChanged(view, newProgress);                if (newProgress == 100) {                    progressBar.setVisibility(View.GONE);                } else {                    progressBar.setVisibility(View.VISIBLE);                    progressBar.setProgress(newProgress);                }            }        });    }    /**     * 设置网页片段     *     * @param data     */    public void setUrl(String data) {        if (TextUtils.isEmpty(data)) {            return;        }        webView.loadUrl(data);    }    class JsObject {        private OnWebViewListener listener1;        @JavascriptInterface        public void showSource(String html) {            if (listener1 !=null){                listener1.onWebViewListener(html);            }        }        @JavascriptInterface        public void showHtml(String html) {            if (listener1 !=null){                listener1.onWebViewHtml(html);            }        }        @JavascriptInterface        public String toString() {            return "local_obj";        }        public void setOnWebViewListener(OnWebViewListener l){            listener1 = l;        }    }    private boolean handlerUrl(String url) {        Log.e("1212", url);        return false;    }    private OnWebViewListener listener;    public void setOnWebViewListener(OnWebViewListener l){        listener = l;        jsObject.setOnWebViewListener(listener);    }    public interface OnWebViewListener{        void onWebViewListener(String content);        void onInitWebView(WebView view);        void onWebViewHtml(String content);    }}


核心代码1:

   jsObject = new JsObject();        webView.addJavascriptInterface(jsObject, "local_obj");

这个JsObject类的代码

class JsObject {        private OnWebViewListener listener1;        @JavascriptInterface        public void showSource(String html) {            if (listener1 !=null){                listener1.onWebViewListener(html);            }        }        @JavascriptInterface        public void showHtml(String html) {            if (listener1 !=null){                listener1.onWebViewHtml(html);            }        }        @JavascriptInterface        public String toString() {            return "local_obj";        }        public void setOnWebViewListener(OnWebViewListener l){            listener1 = l;        }    }

调用JsObject的方法:

  webView.loadUrl("javascript:window.local_obj.showSource(document.getElementById(\"roundTime\").innerHTML);");

上面的调用是获取h5上面id为roundTime的html元素

调用的时候记得local_obj,这个是引用名,一定要跟核心代码1设置的名字一样,之后才接方法名,showSource这个是JsObject的方法,传入值那个,就是一般的js的操作就行了


原创粉丝点击