// ==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();
})();