// ==UserScript== // @name 移除 Bilibili 推广广告卡片 // @description 移除 Bilibili 首页的左上角 banner、信息流里的推广卡片、视频播放页面右上角的推广卡片等广告 // @author xuejianxianzun // @version 1.4 // @namespace saber.love // @run-at document-body // @match https://www.bilibili.com/* // @match https://www.bilibili.com/video/* // @icon https://www.google.com/s2/favicons?sz=64&domain=bilibili.com // @grant none // @license MIT // @downloadURL none // ==/UserScript== (function () { 'use strict'; // 对于有标记的广告元素,通过样式表隐藏,体验更好 function addStyle () { const selectors = [ // 移除左上角的切换 banner 'div.recommended-swipe', // 首页推流的直播间 'div.bili-live-card', // 卡片下方有几层阴影的,都是推流 '.floor-single-card', // 视频页面里,评论区上方的广告横幅 '.ad-floor-cover', // 视频页面里,右侧弹幕列表下方的广告,会标注“广告”字样 '#slide_ad', // 视频页面里,右侧弹幕列表下方的广告,有小火箭图标,经常看到些逆天的玩意 '.video-card-ad-small', ] selectors.forEach(selector => { const el = document.querySelectorAll(selector) el.forEach(e => e.remove()) }) const style = document.createElement('style') style.textContent = `${selectors.join(',')}{display:none !important;}` document.body.append(style) } // 对于本身没有标记的广告,先查找子元素,再移除其父元素的 function removeAD () { if (document.hidden) { return } // 先查找具有特征的子元素,再查找父元素(整个卡片) const childrenSelectors = [ // 1. 小火箭图标 'svg.bili-video-card__info--creative-ad', // 2. 小火箭图标 'svg.vui_icon.bili-video-card__stats--icon', // 3. 标题前面带“广告”的,其“广告”二字的图标 '.bili-video-card__info--ad', // 4. 图片右下角带“广告”二字的,看起来都是游戏。点击会尝试打开小程序 // 它和视频卡片的不同之处在于:正常的视频卡片这里是一个 a 标签,而这种是 div 'div.bili-video-card__image--link', // 5. 图片右下角带“广告”二字的,看起来都是游戏。点击会跳转到外部链接 'a.bili-video-card__info--owner.disable-hover', ] childrenSelectors.forEach(selector => { const array = document.querySelectorAll(selector) for (const el of array) { const card = el.closest('.feed-card') || el.closest('.bili-video-card') // console.log(card) card?.remove() } }) } // 监听页面变化 let timer function ob () { const observer = new MutationObserver(() => { window.clearTimeout(timer) timer = window.setTimeout(removeAD, 0) }) observer.observe(document.body, { childList: true, subtree: true, }) } addStyle() removeAD() ob() })()