wushaominkk 发表于 2021-1-12 10:51

使用webView屏蔽广告(实操版)

本帖最后由 wushaominkk 于 2021-1-12 10:55 编辑

快过年了,准备刷一波剧,发现以前写的
【Android】利用爬虫将电影网站打包成一个APP(8.26更新)
这个已经失效了,准备再搞一波.这次不写界面了太麻烦,直接用webView嵌套网页.
嵌套进去发现广告贼特多,各种悬浮页面根本无法用.在浏览器上输入网址按F12调整手机模式

各种恶心的广告就弹出来了,在网页上找到下面广告的标签

webView.setWebViewClient(new WebViewClient() {
            @Override
            public WebResourceResponse shouldInterceptRequest(WebView webView, String url) {
                //判断是否是广告相关的资源链接
                if (!AdFilterTool.isAd(context, url)) {
                  //这里是不做处理的数据
                  return super.shouldInterceptRequest(webView, url);
                } else {
                  //有广告的请求数据,我们直接返回空数据,注:不能直接返回null
                  return new WebResourceResponse(null, null, null);
                }
            }
public class AdFilterTool {
    public static boolean isAd(Context context, String url) {
      Resources res = context.getResources();
      String[] filterUrls = res.getStringArray(R.array.adUrls);
      for (String adUrl : filterUrls ) {
            if (url.contains(adUrl)) {
                return true;
            }
      }
      return false;
    }

    public static String getClearAdDivJs(Context context){
      String js = "javascript:";
      Resources res = context.getResources();
      String[] adDivs = res.getStringArray(R.array.adBlockDiv);
      for(int i=0;i<adDivs.length;i++){

            js += "var adDiv"+i+"= document.getElementById('"+adDivs+"');if(adDiv"+i+" != null)adDiv"+i+".parentNode.removeChild(adDiv"+i+");";
      }
      return js;
    }
}

重写shouldInterceptRequest方法过滤链接



刚开始我是简单粗暴把.gif给过滤掉,发现图片是没有了但是便签还在,你点击还是会弹到广告页面
第二步骤 动态加载js移除网页广告的标签
重写onPageFinished方法,当页面加载完注入js代码移除标签

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                Log.i("Finished:", url);
                String js = AdFilterTool.getClearAdDivJs(context);
                Log.v("adJs",js);
                view.loadUrl(js);

            }

只要找到广告标签的ID就可以移除,测试后发现这个网站还是挺流氓的,广告的标签是动态加载的,每次加载的ID是不一样的.改方法不可行
第三步 调试NetWork看到底加载那些流氓的代码,这不叫费时间,只能一个个找了
发现一个很奇怪的文件130798,点击看看有段 var c = 'abcdefhijkmnprstwxyzABCDEFGHIJKLMNOPQRSTWXYZ';这个代码
以经验来看,这个极有可能是,




我们来搜索下那个广告的标签video,找到了
      vs.innerHTML += `video[${vn}]{background-size:100% 100%;background-image:url(${param.a_3});position: fixed;left: 0;${param.c_5}:${param.o}px;z-index:2147483647;height: ${param.d_2}px;width: 100vw;object-fit:fill}`;
就是他没错了,动态加载的标签




我们再看看这个文件请求头




找到这个链接直接在第一步给他屏蔽了,这样他就不会动态加载标签了
按照这个方法把其他的部位的广告都给屏蔽掉
最后放一张效果图



q314956820 发表于 2021-1-12 10:59

js学得好 有没有快速ES6的进阶视频

王成 发表于 2021-1-12 11:00

这通操作太牛了!支持一下!

宜城小站 发表于 2021-1-12 11:07

看起来很好{:1_921:}
复杂了些:lol

First丶云心 发表于 2021-1-12 11:09

wuboxun 发表于 2021-1-12 11:15

楼主牛逼,收藏学习了

testqkl 发表于 2021-1-12 11:19

牛X,有想法

Cool_Breeze 发表于 2021-1-12 11:32

这是网站的视频爬下来直接合并就可以播放,这也太好获取了吧!

damer 发表于 2021-1-12 11:48

让我有了别的想法

怼你个小娘炮 发表于 2021-1-12 11:49

大佬666666
页: [1] 2
查看完整版本: 使用webView屏蔽广告(实操版)