// ==UserScript==
// @name bilibili净化
// @namespace evalcony
// @version 0.4.5
// @description bilibili净化脚本,屏蔽各种不需要的页面元素、关键字、直播、广告
// @author evalcony
// @match https://*.bilibili.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=bilibili.com
// @grant none
// @license MIT
// @homepageURL https://github.com/evalcony/better-bilibili
// ==/UserScript==
(() => {
'use strict';
new MutationObserver(() => {
// 首页 屏蔽词 list
var blackList = [
// 首页屏蔽关键字 示例
'对局','页游','国服','国标','破防','好看','好听','打野','逆风','射手','下头','戒','女朋友',
];
// 个人动态页面 屏蔽词 list
var dynBlackList = [
// 个人动态页屏蔽关键字 示例
'进口','转+评','拼多多','精美','券后','版型','官方店','库存','先拍','预告','治愈','投票','公示','VLOG','好货','实习生',
'直播','猫咪','党校','转发有奖','巡礼','预约','分享动态','恭喜','中奖','甄别','还有谁','炎热','万粉','手气','封面',
'即将','泰裤辣','安康','不见不散','分享视频','福利','转发','里程碑','UP主','快乐','按摩','冲牙器','实惠','便宜','豪礼',
'到手','内裤','好好选'
];
// 动态、热门、频道
const channelIconsElement = document.querySelector('div.channel-icons');
if (channelIconsElement) {
channelIconsElement.remove();
}
const channelFixedLeftElement = document.querySelector('div.header-channel-fixed-left');
if (channelFixedLeftElement) {
channelFixedLeftElement.remove();
}
// 导航栏右侧
const channelRightElement = document.querySelector('a.channel-link__right');
if (channelRightElement) {
channelRightElement.remove();
}
// 推荐
const recommendedSwipeElement = document.querySelector('div.recommended-swipe.grid-anchor');
if (recommendedSwipeElement) {
recommendedSwipeElement.remove();
}
// // grid
// const videoCardSkeletonElement = document.querySelector('div.bili-video-card__skeleton');
// if (videoCardSkeletonElement) {
// videoCardSkeletonElement.remove();
// }
// // grid封面
// const cardImageElement = document.querySelector('div.bili-video-card__image.__scale-player-wrap');
// if (cardImageElement) {
// cardImageElement.remove();
// }
// 直播card
const floorCardSingleCardElement = document.querySelector('div.floor-card.single-card');
if (floorCardSingleCardElement) {
floorCardSingleCardElement.remove();
}
// 直播card 带有直播标签的视频
//class="bili-live-card is-rcmd"
const liveCardElement = document.querySelector('div.bili-live-card');
if (liveCardElement) {
liveCardElement.remove();
}
// 点赞数量标签
const videoCardInfoIconTextElement = document.querySelector('div.bili-video-card__info--icon-text');
if (videoCardInfoIconTextElement) {
videoCardInfoIconTextElement.remove();
}
// 页面滑动板块
const channelSwiperElement = document.querySelector('div.channel-swiper.channel-swiper-client');
if (channelSwiperElement) {
channelSwiperElement.remove();
}
// 热门
const asideWrapElement = document.querySelector('div.aside-wrap');
if (asideWrapElement) {
asideWrapElement.remove();
}
// 根据屏蔽词过滤grid
const cardInfoElementList = document.querySelectorAll('div.bili-video-card')
if (cardInfoElementList) {
var max_len = 20
cardInfoElementList.forEach(card => {
// var links = card.getElementsByTagName('a')
var videoCardInfoRight = card.querySelector('div.bili-video-card__info--right')
if (videoCardInfoRight) {
var links = videoCardInfoRight.getElementsByTagName('a')
if (links) {
for (var i = 0; i < links.length; i++) {
var title = links[i].textContent || links[i].innerText;
var flag = false;
for (var j = 0; j < blackList.length; ++j) {
if (title.indexOf(blackList[j]) !== -1) {
console.log("屏蔽词:" + blackList[j] + " title=" + title);
flag = true;
break;
}
}
if (flag) {
card.remove();
break;
}
// 标题缩减
if (title.length > max_len) {
links[i].innerHTML = title.substring(0, max_len)
}
}
}
}
// 广告
var svg = card.querySelector('svg.bili-video-card__info--ad')
if (svg) {
card.remove();
}
})
}
//--------------------------
// 删除动态搜索栏的占位文字
const navSearchInputElement = document.querySelector('input.nav-search-input')
if (navSearchInputElement) {
navSearchInputElement.removeAttribute('placeholder');
navSearchInputElement.removeAttribute('title');
}
// 删除搜索历史
const searchPanelElement = document.querySelector('div.search-panel');
if (searchPanelElement) {
searchPanelElement.remove();
}
// 菜单栏
const leftEntryElement = document.querySelector('ul.left-entry');
if (leftEntryElement) {
//leftEntryElement.remove();
}
// 右边菜单栏
const rightEntryVipElement = document.querySelector('a.right-entry__outside.right-entry--vip');
if (rightEntryVipElement) {
rightEntryVipElement.remove();
}
// 右边菜单栏-个人消息
const rightEntryMessageElement = document.querySelector('li.v-popover-wrap.right-entry__outside.right-entry--message');
if (rightEntryMessageElement) {
//rightEntryMessageElement.remove();
}
const headerUploadEntryElement = document.querySelector('div.header-upload-entry');
if (headerUploadEntryElement) {
headerUploadEntryElement.remove();
}
// up头像
const upAvatarElement = document.querySelector('div.up-avatar-wrap');
if (upAvatarElement) {
upAvatarElement.remove();
}
// 充电
const chargeBtnElement = document.querySelector('div.default-btn.new-charge-btn.charge-btn-loaded');
if (chargeBtnElement) {
chargeBtnElement.remove();
}
// //删除视频弹幕发送
//const videoPlayerSendingElement = document.querySelector('div.bpx-player-sending-bar');
//if (videoPlayerSendingElement) {
//videoPlayerSendingElement.remove();
//}
// 投诉
const videoComplaintElement = document.querySelector('div.video-toolbar-right-item.toolbar-right-complaint');
if (videoComplaintElement) {
videoComplaintElement.remove();
}
// 笔记
const videoNoteElement = document.querySelector('div.video-note.video-toolbar-right-item.toolbar-right-note');
if (videoNoteElement) {
videoNoteElement.remove();
}
// share
const videoShareBtnElement = document.querySelector('div.video-share-wrap.video-toolbar-left-item');
if (videoShareBtnElement) {
videoShareBtnElement.remove();
}
// 下方
const leftContainerUnderPlayerElement = document.querySelector('div.left-container-under-player');
if (leftContainerUnderPlayerElement) {
//leftContainerUnderPlayerElement.remove();
}
//删除视频下方标签
const tagWrapElement = document.querySelector('div.tag-wrap');
if (tagWrapElement) {
tagWrapElement.remove();
}
// 广告
const adReportElement = document.querySelector('div.ad-floor-cover.b-img');
if (adReportElement) {
adReportElement.remove();
}
// 直播
const popLivePartElement = document.querySelector('div.pop-live-small-mode.part-undefined');
if (popLivePartElement) {
popLivePartElement.remove();
}
// 评论区
const commentElement = document.querySelector('.comment');
if (commentElement) {
//commentElement.remove();
}
// 右侧上方广告
const slideGgElement = document.querySelector('.slide-gg');
if (slideGgElement) {
slideGgElement.remove();
}
// 右侧广告
const slideAdElement = document.querySelector('.slide_ad');
if (slideAdElement) {
slideAdElement.remove();
}
// 右侧直播推荐
const popLiveSmallModeElement = document.querySelector('.pop-live-small-mode');
if (popLiveSmallModeElement) {
popLiveSmallModeElement.remove();
}
// 说明:bibili 这里做了关联,屏蔽了推荐列表,会导致选集列表数据无法展示,所以要屏蔽就都屏蔽
// 这里改动这里的 false / true 即可
// false: 不屏蔽
// true: 屏蔽
// 推荐设置为 false。
if (false) {
// 右侧视频选集列表
const videoPageCardElement = document.querySelector('#multi_page');
if (videoPageCardElement) {
videoPageCardElement.remove();
}
// 右侧视频推荐列表
const recommendListElement = document.querySelector('.recommend-list-v1');
if (recommendListElement) {
recommendListElement.remove();
}
}
// 视频播放中出现的问题面板
const bpxPlayerCmdDmElement = document.querySelector('.bpx-player-cmd-dm-inside');
if (bpxPlayerCmdDmElement) {
bpxPlayerCmdDmElement.remove();
}
//-------------------------- 动态
// 个人动态
const biliDynItemsList = document.querySelectorAll('div.bili-dyn-item__main');
if (biliDynItemsList) {
biliDynItemsList.forEach(item => {
// 投票
var voteElement = item.querySelector('.bili-dyn-card-vote__body')
if (voteElement) {
console.log('屏蔽投票')
item.remove();
return;
}
// 预约
var reserveElement = item.querySelector('.bili-dyn-card-reserve')
if (reserveElement) {
console.log('屏蔽预约')
item.remove();
return;
}
// 正文
var richTextContent = item.querySelector('div.bili-rich-text__content')
if (richTextContent) {
var textElementList = richTextContent.getElementsByTagName('span')
if (textElementList) {
for (var i = 0; i < textElementList.length; i++) {
var text = textElementList[i].textContent || textElementList[i].innerText;
var flag = false;
for (var j = 0; j < dynBlackList.length; ++j) {
if (text.indexOf(dynBlackList[j]) !== -1) {
console.log("包含指定字符串:" + dynBlackList[j]);
flag = true;
break;
}
}
if (flag) {
item.remove();
break;
}
}
}
}
// 转发、评论、点赞
var itemFooterElement = item.querySelector('.bili-dyn-item__footer')
if (itemFooterElement) {
//itemFooterElement.remove();
return;
}
})
}
// 右侧话题栏
const biliDynTopicBoxElement = document.querySelector('.bili-dyn-topic-box');
if (biliDynTopicBoxElement) {
biliDynTopicBoxElement.remove();
}
// 右侧话题栏banner
const dynBannerElement = document.querySelector('.bili-dyn-banner');
if (dynBannerElement) {
dynBannerElement.remove();
}
// --------------- 直播间
// 直播房间-礼物栏
const giftControlPanelElement = document.querySelector('.gift-control-panel');
if (giftControlPanelElement) {
giftControlPanelElement.remove();
}
// 直播房间-视频下方区域
const sectionBlockElement = document.querySelector('.section-block');
if (sectionBlockElement) {
sectionBlockElement.remove();
}
// 直播房间-视频上方信息区
const headInfoLowerRowElement = document.querySelector('.head-info-section .lower-row');
if (headInfoLowerRowElement) {
headInfoLowerRowElement.remove();
}
// 直播房间-页面底部bilibili公司信息区域
const linkFooterElement = document.querySelector('#link-footer-vm');
if (linkFooterElement) {
linkFooterElement.remove();
}
// 直播房间-bilibili娘
const harunaElement = document.querySelector('.haruna-ctnr');
if (harunaElement) {
harunaElement.remove();
}
// 直播房间-pk
const awesomePkBoxElement = document.querySelector('.awesome-pk-box');
if (awesomePkBoxElement) {
awesomePkBoxElement.remove();
}
// 直播房间-pk
const pkProcessBoxElement = document.querySelector('.pk-process-box');
if (pkProcessBoxElement) {
pkProcessBoxElement.remove();
}
// 直播房间-pk结果
const pkAnimationBoxElement = document.querySelector('.pk-animation-box');
if (pkAnimationBoxElement) {
pkAnimationBoxElement.remove();
}
// 直播房间-横幅特效
const announcementElement = document.querySelector('.announcement-wrapper');
if (announcementElement) {
announcementElement.remove();
}
// 直播房间-弹幕欢迎特效
const bubbleListElement = document.querySelector('.bubble-list');
if (bubbleListElement) {
bubbleListElement.remove();
}
// 直播房间-粉丝牌
const fansMedalItemElement = document.querySelector('.fans-medal-item-ctnr');
if (fansMedalItemElement) {
fansMedalItemElement.remove();
}
const wealthMedalElement = document.querySelector('.wealth-medal-ctnr');
if (wealthMedalElement) {
wealthMedalElement.remove();
}
const rankIconElement = document.querySelector('.rank-icon');
if (rankIconElement) {
rankIconElement.remove();
}
const titleLabelElement = document.querySelector('.title-label');
if (titleLabelElement) {
titleLabelElement.remove();
}
// 直播房间-舰长列表
const rankListElement = document.querySelector('#rank-list-ctnr-box');
if (rankListElement) {
rankListElement.remove();
}
// 直播房间-小游戏
const gameElement = document.querySelector('#game-id');
if (gameElement) {
gameElement.remove();
}
}).observe(document.querySelector('body'), {
childList: true,
attributes: true,
subtree: true,
});
})();