【广告去除】百度百科

去除秒懂百科、去除页面底部的广告、去除右侧广告和TA说等;去除置灰默哀效果

目前為 2023-08-16 提交的版本,檢視 最新版本

// ==UserScript==
// @name         【广告去除】百度百科
// @namespace    http://tampermonkey.net/
// @version      1.4
// @description  去除秒懂百科、去除页面底部的广告、去除右侧广告和TA说等;去除置灰默哀效果
// @author       You
// @match        *://baike.baidu.com/
// @match        *://baike.baidu.com/item/*
// @match        *://baike.baidu.com/search/*
// @match        *://baike.baidu.com/usercenter/*
// @match        *://baike.baidu.com/vbaike/*
// @match        *://baike.baidu.com/tashuo/*
// @match        *://baike.baidu.com/tashuolist/*
// @match        *://baike.baidu.com/history/*
// @match        *://baike.baidu.com/historydiff/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=qq.com
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    //*************************************************************************************
    //----------------------------------------广告匹配规则
    //*************************************************************************************
    var url = window.location.href;
    var domain = document.domain;
    var pathSegment = window.location.pathname.split('/')[1]

    var names = [];

    //******************
    //---------百度百科词条
    //******************
    if (url.includes('baike.baidu.com/item')) {
        console.log('[广告去除] 百度百科词条');
        names = [
            ['ad','id','hotspotmining_s'],//概述下方TA说&新闻

            ['ad','class','second-wrapper'],//词条名下方秒懂视频
            ['ad','class','poster-middle'],//影视大图左下秒懂视频
            ['ad','class','related-video-container J-related-video-container'],//信息栏下方秒懂视频
            ['ad','class','lemmaWgt-promotion-slide'],//右侧秒懂百科贴图广告

            ['ad','class','add-video cmn-btn-hover-blue cmn-btn-28 J-add-video-link J-add-video'],//上传视频按键
            ['ad','class','edit-prompt'],//词条名下方编辑提示,例:本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!

            ['ad','class','unionAd union'],//右侧列表广告
            ['ad','class','new-bdsharebuttonbox new-side-share'],//右侧悬浮分享

            ['ad','class','bottom-recommend-wrapper'],//底部猜你喜欢
            ['ad','class','fc-guess-like new-list'],//底部相关搜索
            //'after-content',//底部所有,可能会误伤
            //'contentBottom_HLLJs',记不起来是什么的

            //'clearfix',//概述下方TA说&新闻,有误伤
            ['ad','class','tashuo-right'],//右侧TA说
            ['ad','class','tashuo-bottom'],//页面底部TA说
            //form-item clearfix

            ['ad','class','topA'],//顶部搜索栏右侧活动入口
            ['ad','class','pinzhuanWrap'],//页面底部品牌广告

            ['ad','class','item appdownload'],//顶部“下载百科APP”


            //这些其实不算广告,而是功能模块,如果无需排除可注释掉或删掉代码
            ['ad','class','lemma-structured'],//概述下方相关星图
            ['ad','class','graph-card'],//信息栏下方百科图谱
        ];
    }


    //******************
    //---------百度百科历史&历史对比
    //******************
    else if (url.includes('baike.baidu.com/history')) {
        console.log('[广告去除] 百度百科历史');
        names = [
            ['waterMark','id','water-mark'],//水印,style过长不匹配了
        ];
    }


    //******************
    //---------百度百科搜索
    //******************
    else if (url.includes('baike.baidu.com/search')) {
        console.log('[广告去除] 百度百科搜索');
        names = [
            ['ad','class','J-search-ad'],//搜索结果页广告,例:fc-054d5b35ad1f2c7a J-search-ad
            ['ad','class','ad-container J-search-result-ad'],//搜索结果页广告单个
        ];
    }


    //******************
    //---------百度百科V百科
    //******************
    else if (url.includes('baike.baidu.com/vbaike')) {
        console.log('[广告去除] 百度百科V百科');
        names = [
            ['ad','id',/\bJ-wgt-baikeapp-promote-[0-9a-zA-Z]{7}\b/],//右下角APP二维码,例:J-wgt-baikeapp-promote-28d928c
            ['ad','class','wgt-baikeapp-promote-container'],//右下角APP二维码
            ['ad','class','wgt-side-share'],//右侧悬浮分享
        ];
    }


    //******************
    //---------百度百科TA说
    //******************
    else if (url.includes('baike.baidu.com/tashuo') || url.includes('baike.baidu.com/tashuolist')) {
        console.log('[广告去除] 百度百科TA说');
        names = [
            ['ad','class','new-bdsharebuttonbox new-side-share'],//右侧悬浮分享
            ['ad','id','side-share'],//右侧悬浮分享
        ];
    }


    //******************
    //---------百度百科其他
    //******************
    else {
        console.log('[广告去除] 百度百科其他');
        names = [
            ['ad','class','navbarAdNew'],//主页顶部搜索栏右侧活动入口
            ['ad','class','wgt-baikeapp-promote-container'],//主页右下角下载APP悬浮窗
        ];
    }



    //*************************************************************************************
    //----------------------------------------广告去除函数
    //*************************************************************************************
    function delAd(names) {
        if (names.length) {
            var flag = false;

            for (var name of names) {

                var type = name[0];
                var tagType = name[1];
                var value = name[2];

                var elements = [];

                //属性内容正则
                if (value instanceof RegExp) {
                    var elementsZero = document.querySelectorAll(`[${tagType}]`);
                    elements = Array.from(elementsZero).filter(element => value.test(element.getAttribute(tagType)));
                }
                //只要存在属性
                else if (value === 'anything'){
                    elements = document.querySelectorAll(`[${tagType}]`);
                }
                //其他正常情况
                else{
                    elements = document.querySelectorAll(`[${tagType}="${value}"]`);
                }

                if (elements && elements.length) {
                    for (var i = 0; i < elements.length; i++) {
                        if (type === "ad") {
                            elements[i].remove();
                        }
                        else if (type === "waterMark") {
                            elements[i].setAttribute(tagType, `${value}-del`);
                        }
                    }
                    console.log(`[广告去除] ${name[0]} 元素 ${name[2]} 移除成功!`);
                    flag = true;
                } else {
                    //console.log(`[广告去除] 未发现 ${name} 元素!`);
                }
            }

            if (!flag) {
                //console.log("[广告去除] 未发现要移除的元素!");
            }
        } else {
            //console.log("[广告去除] 暂不支持此站点。");
        }
    }




    //*************************************************************************************
    //----------------------------------------广告去除
    //*************************************************************************************

    // 每隔一秒运行一次函数
    setInterval(delAd(names), 1000);



    //*************************************************************************************
    //----------------------------------------置灰去除
    //*************************************************************************************
    function delFilter() {
        // 获取 <html> 元素
        var htmlElement = document.querySelector('html');

        // 移除原来的样式属性
        htmlElement.removeAttribute('style');

        // 添加新的样式属性
        var headElement = document.querySelector('head');
        var styleElement = document.createElement('style');
        styleElement.innerHTML = 'html { filter: none !important; }';
        headElement.appendChild(styleElement);
    }
    delFilter();

















})();