🔥🆕移除百度推广和广告内容🔥

[正常使用 🟢]移除烦人和可能不确信的推广及广告(小浮窗监视屏蔽数量,可手动关闭)

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        🔥🆕移除百度推广和广告内容🔥
// @namespace   http://tampermonkey.net/
// @version     3.0.2
// @author      iemsauce3
// @description [正常使用 🟢]移除烦人和可能不确信的推广及广告(小浮窗监视屏蔽数量,可手动关闭)
// @match       *://*.baidu.com/*
// @license MIT
// ==/UserScript==
//----------------------------------------------------------

//重新封装Storage
class Storage{
    constructor(name){
        this.name = 'storage';
    }
    //设置缓存
    setItem(params){
        let obj = {
            name:'',
            value:'',
            date:todayFormate()//记录何时将值存入缓存,eg: 2022-04-22
        }
        let options = {};
        //将obj和传进来的params合并
        Object.assign(options,obj,params);
        //如果options.expires没有设置,就判断一下value的类型
        let type = Object.prototype.toString.call(params);
        //如果value是对象或者数组对象的类型,就先用JSON.stringify转一下,再存进去
        if(type == '[object Object]' || type == '[object Array]'){
            options = JSON.stringify(options);
        }
        localStorage.setItem(params.name,options);
    }
    setItemValue(name,value){
        let item = this.getItemObj(name);
        let type = Object.prototype.toString.call(item);
        if(item == null || type == '[object Object]' || type == '[object Array]'){
            this.setItem({name:name, value:value});
        }
        else{
            localStorage.setItem(name,value);
        }
    }
    getItemObj(name){
        let item = localStorage.getItem(name);
        //先将拿到的试着进行json转为对象的形式
        try{
            item = JSON.parse(item);
        }catch(error){
            //如果不行就不是json的字符串,就直接返回
            item = item;
        }
        return item;
    }
    //拿到缓存
    getItemValue(name){
        let item = localStorage.getItem(name);
        if(item == null) return item;
        //先将拿到的试着进行json转为对象的形式
        try{
            item = JSON.parse(item);
        }catch(error){
            //如果不行就不是json的字符串,就直接返回
            item = item;
        }
        let type = Object.prototype.toString.call(item);
        if(type == '[object Object]' || type == '[object Array]'){
            return item.value;
        }else{
            return item;
        }
    }
    //移出缓存
    removeItem(name){
        localStorage.removeItem(name);
    }
    //移出全部缓存
    clear(){
        localStorage.clear();
    }
}



var tgTotal=0, ggTotal=0; removeTimes=0;
var todayAds = 0, allAds = 0;
var adsInterval = null;
$(document).ready(function(){
    initStorage(); //初始化
    var uri = window.location.href;
    if(uri.indexOf('baidu.com') < 0) return;
    if(uri.indexOf('fanyi.baidu.com') > 0) {
        $('#footer-products-container').remove();
        $('.follow-wrapper').remove();
    }
    else if(uri.indexOf('www.baidu.com') > 0){
        $('#wrapper_wrapper').before(`<div style="display:none;"><a id="closeView" style="position: fixed; bottom: 25px; right:60px;">关闭浮窗</a><p id="fuck_baidu_ads" style="z-index:999;background-color:white;color:black;width: 140px;position: fixed;padding: 5px;box-shadow: 2px 2px 3px #5072EE;margin: 0 5px;border: 1px solid #5072EE;text-align:center; bottom:50px; right: 10px;">「广告+推广」<br />今日过滤 <b style="color:red;">0</b> 条<br />总计 <b id="allAds" style="color:green;">0</b> 条</p></div><div style="display:none;"><a id="showView" style="position: fixed; bottom: 25px; right:60px;">拦截情况</a></div>`);
    setTimeout(function(){
        if(getCookie("close") == ""){
            $('#closeView').parent().show();
            $('#showView').parent().hide();
        }
        else{
            $('#closeView').parent().hide();
            $('#showView').parent().show();
        }
        removePre();
    },500);
    $('#su').click(function(){
        console.log('点击了搜索');
        removePre();
    });
    
    $('#page div a').click(function(){
        console.log('点击了页码');
        removePre();
    });
    
    $('#closeView').click(function(){
        $(this).parent().hide();
        setCookie("close","true",7*24*3600);
        $('#showView').parent().show();
    });
    $('#showView').click(function(){
        $(this).parent().hide();
        setCookie("close","true",0.1);
        $('#closeView').parent().show();
    });
    }
    
});

// 初始化相关storage
initStorage = function(){
    let initFlag = localStorage.getItem('initFlag');
    if(initFlag == 1) return;
    console.log('【移除百度推广和广告内容】初始化数据...');
    let storage = new Storage();
    storage.setItem({name:'todayAds',value:0});
    storage.setItem({name:'allAds',value:0});
    localStorage.setItem('initFlag',1);
    console.log('【移除百度推广和广告内容】初始化完成!');
}

var removePre = function(){
    //每次手动按“搜索”后广告移除次数阀值清零
    removeTimes = 0;
    adsInterval = setInterval(function(){
        removeTimes++;
        removeAds();
        if(removeTimes==2) reBindEvent();
    },1000);
}

var removeAds = function(){
    getStorageAdCounts();
    var rs='';
    var content = $('#content_left');
    var tuiguang = content.find('.ec-tuiguang');
    var newAds = 0;
    if(tuiguang.length>0){
        tgTotal+=tuiguang.length;
        for(var i=0;i<tuiguang.length;i++){
            let tgDiv = $(tuiguang[i]).parentsUntil('#content_left');
            $(tgDiv).remove();
        }
        newAds++;
    }
    var spans=content.find('a');
//     spans = spans.concat(content.find('span'));
    var ggCounts=0;
    for(var i=0;i<spans.length;i++){
        if($(spans[i]).html()=='广告'){
            let ggDiv = $(spans[i]).parentsUntil('#content_left');
            $(ggDiv).remove();
            ggDiv = $(spans[i]).parentsUntil('.result c-container new-pmd');
            $(ggDiv).remove();
            ggCounts++;
            ggTotal++;
            newAds++;
        }
    }
    todayAds += newAds;
    allAds += newAds;
//     console.log('newAds@'+newAds+'@allAds@'+allAds);
    $('#fuck_baidu_ads b').html(todayAds);
    $('#allAds').html(allAds);
    let storage = new Storage();
    storage.setItemValue('todayAds',todayAds);
    storage = new Storage();
    storage.setItemValue('allAds',allAds);
    if(removeTimes > 10){
        clearInterval(adsInterval);
        removeTimes = 0;
        console.log('Interval Over');
    }
}

//重新绑定事件
reBindEvent = function(){
    console.log('reBindEvent');
    $('#page div a').unbind('click').bind('click',function(){
        console.log('reBindEvent-点击了页码');
        removePre();
    });
    $('#rs_new a').unbind('click').bind('click',function(){
        console.log('reBindEvent-点击了相关搜索下的按钮');
        removePre();
    });
}

function setCookie(cname,cvalue,exdays){
	var d = new Date();
	d.setTime(d.getTime()+(exdays*1000));
	var expires = "expires="+d.toGMTString();
	document.cookie = cname+"="+cvalue+"; "+expires;
}
function getCookie(cname){
	var name = cname + "=";
	var ca = document.cookie.split(';');
	for(var i=0; i<ca.length; i++) {
		var c = ca[i].trim();
		if (c.indexOf(name)==0) { return c.substring(name.length,c.length); }
	}
	return "";
}

var getStorageAdCounts = function(){
    let storage = new Storage();
    let todayAdsObj = storage.getItemObj('todayAds');
    if(todayAdsObj == null || !todayAdsObj.value || todayAdsObj.date != todayFormate()) {
        storage.setItem({name:'todayAds',value:0});
        todayAds = 0;
    }
    else {
        todayAds = todayAdsObj.value
    }
    let allAds_ = storage.getItemValue('allAds');
    allAds = allAds_ == null ? 0 : allAds_;
    storage = new Storage();
    storage.setItem({name:'allAds',value:allAds});
}

String.format = function(src){
    if (arguments.length == 0) return null;
    var args = Array.prototype.slice.call(arguments, 1);
    return src.replace(/\{(\d+)\}/g, function(m, i){
        return args[i];
    });
};

//格式化日期
todayFormate = function(formate = 'yyyy-MM-dd'){
    let today = new Date();
    switch(formate){
        case 'yyyyMMdd':formate='{0}{1}{2}';break;
        default:formate='{0}-{1}-{2}';break;
    }
    return String.format(formate,today.getFullYear(), 
                         today.getMonth() < 9 ? '0'+(today.getMonth() + 1):today.getMonth() + 1, 
                         today.getDate() < 10 ? '0'+today.getDate():today.getDate());
}