// ==UserScript==
// @name 【广告去除】百度百科
// @namespace http://tampermonkey.net/
// @version 2.2
// @description 去除秒懂百科、去除页面底部的广告、去除右侧广告和TA说等;去除置灰默哀效果
// @author You
// @match *://baike.baidu.com/
// @match *://baike.baidu.com/item/*
// @match *://baike.baidu.com/search/*
// @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/*
// @match *://baike.baidu.com/usercenter/userpage*
// @match *://baike.baidu.com/planet/talk*
// @icon https://www.google.com/s2/favicons?sz=64&domain=qq.com
// @grant none
// @run-at document-start
// @license MIT
// ==/UserScript==
/*
1.8
扩大适配范围
*/
(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',/\bunionAd_[0-9a-zA-Z]{5}\b/],//右侧列表广告unionAd_dNc3R
['ad','class','new-bdsharebuttonbox new-side-share'],//右侧悬浮分享
['ad','class','right-ad'],//右下悬浮知识专题
['ad','class','bottom-recommend-wrapper'],//底部猜你喜欢
['ad','class','fc-guess-like new-list'],//底部相关搜索
['ad','class','relatedSearch_gAuve'],//relatedSearch_gAuve
//<div class="relatedSearch_gAuve" id="J-related-search">
['ad','class',/\brelatedSearch_[0-9a-zA-Z]{5}\b/],//relatedSearch_gAuve
//'after-content',//底部所有,可能会误伤
//'contentBottom_HLLJs',记不起来是什么的
//'clearfix',//概述下方TA说&新闻,有误伤
['ad','class','tashuo-right'],//右侧TA说
//slideAdBox_E5DMr
['ad','class',/\bslideAdBox_[0-9a-zA-Z]{5}\b/],//右侧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'],//信息栏下方百科图谱
//20231030新增
['ad','class',/\bvideoListWrap_[0-9a-zA-Z]{5}\b/],//信息栏下方视频videoListWrap_pYfbS
['ad','id','J-lemma-video-list'],//信息栏下方视频J-lemma-video-list
['ad','class',/\bshare_[0-9a-zA-Z]{5} z-index-fixed-content\b/],//右侧悬浮分享share_vNR96 z-index-fixed-content
['ad','class',/\bguessLike_[0-9a-zA-Z]{5}\b/],//底部猜你喜欢guessLike_SnZDT
['ad','id','J-bottom-recommend-wrapper'],//底部猜你喜欢J-bottom-recommend-wrapper
['ad','class',/\bappDownload_[0-9a-zA-Z]{5}\b/],//右上APP广告appDownload_OfsOt
['ad','class',/\bcontentBottom_[0-9a-zA-Z]{5}\b/],//词条名下秒懂视频contentBottom_lEzGh
['ad','class',/\btashuoWrap_[0-9a-zA-Z]{5}\b/],//ta说tashuoWrap_LZDYa
['ad','id','J-bottom-tashuo'],//ta说J-bottom-tashuo
//手机端
['ad','id','J-declare'],//顶部提醒【声明:百度百科是免费编辑平台,无收费代编服务】
['ad','id','qtqy_container'],//底部大家还在搜
['ad','id','tashuo_list'],//底部他说
//['ad','class','second-summary J-invoke-2ndvideoflow'],//概述视频
['ad','id','J-lemma-videos'],//更多视频
['ad','id','J-tashuo-button-fixed'],//右下TA说按钮
['ad','id','J_yitiao_container'],//下方广告
['ad','class','sw-383__scroll-image-box sw-383__J-scroll-item'],//底部他说
['ad','class',' sw-136__lemma-attention sw-136__no-title '],
['ad','id','_7152007'],
];
}
//******************
//---------百度百科历史&历史对比
//******************
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 if (url.includes('baike.baidu.com/usercenter/userpage')) {
console.log('[广告去除] 百度百科用户主页');
names = [
['ad','class','navbarAdNew'],//主页顶部搜索栏右侧活动入口
['ad','class','wgt-baikeapp-promote-container'],//主页右下角下载APP悬浮窗
];
}
//******************
//---------百度百科科星球
//******************
else if (url.includes('baike.baidu.com/planet/talk')) {
console.log('[广告去除] 百度百科科星球');
names = [
['ad','class','wgt-baikeapp-promote-container'],//主页右下角下载APP悬浮窗
];
}
//******************
//---------百度百科首页
//******************
else if (url.includes('baike.baidu.com/') && pathSegment === "") {
console.log('[广告去除] 百度百科首页');
names = [
['ad','class','wgt-baikeapp-promote-container'],//主页右下角下载APP悬浮窗
['ad','id','navbarAdNew'],//顶部搜索栏右侧活动入口
['ad','class','navbarAdNew'],//顶部搜索栏右侧活动入口
];
}
//******************
//---------通用
//******************
if (url) {
console.log('[广告去除] 通用');
names.push(...[
['ad','src',/\b[^ ]*pos.baidu.com[^ ]*\b/],//通用
['ad','src',/\b[^ ]*dup.baidustatic.com[^ ]*\b/],//通用
['ad','src',/\b[^ ]*cpro.baidustatic.com[^ ]*\b/],//通用
['ad','src',/\b[^ ]*c.gdt.qq.com[^ ]*\b/],//通用
['ad','herf',/\b[^ ]*c.gdt.qq.com[^ ]*\b/],//通用
['ad','src',/\b[^ ]*sina.cn\/check\?[^ ]*\b/],//通用
['ad','src',/\b[^ ]*googleads.g.doubleclick.net[^ ]*\b/],//通用
['ad','src',/\b[^ ]*pagead2.googlesyndication.com[^ ]*\b/],//通用
['ad','class',/\bappDownload_[0-9a-zA-Z]{5}\b/],//右上APP广告appDownload_OfsOt
//src="https://qgnu18wo.sina.cn/check?src=https%3A%2F%2Fmjs.sinaimg.cn%2Fwap%2Fcustom_html%2Fwap%2F20230511%2F645c9e2002215.html%3Fpdps%3DPDPS000000067809"
//blogbf
])
}
//*************************************************************************************
//----------------------------------------广告去除函数
//*************************************************************************************
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("[广告去除] 暂不支持此站点。");
}
}
//*************************************************************************************
//----------------------------------------广告去除
//*************************************************************************************
// 定义要运行的函数
function runDelAd() {
delAd(names);
}
var counter = 0; // 计数器变量
var interval = setInterval(function() {
runDelAd();
counter++; // 每次执行时计数器加一
if (counter === 100) { // 在达到指定次数后停止执行
clearInterval(interval);
}
}, 50);
// 每隔一秒运行一次函数
setInterval(runDelAd, 1000);
//*************************************************************************************
//----------------------------------------置灰去除
//*************************************************************************************
function delFilter() {
//memorial
//20231030新规则
//var bodyElement = document.querySelector('body');
// 移除原来的样式属性
//if (bodyElement) {
//bodyElement.removeAttribute('class');
//}
let box = document.getElementsByClassName('memorial');
console.log(box);
for (var i = 0; i < box.length; i++) {
box[i].className = box[i].className.replace(/memorial/g, '');
}
}
delFilter();
})();