您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在页面加载完成后执行,并在DOM更新后再次执行代码
// ==UserScript== // @name B站屏蔽器 // @namespace http://tampermonkey.net/ // @version 0.26 // @description 在页面加载完成后执行,并在DOM更新后再次执行代码 // @author 脚本总是失效啊 // @license MIT // @match https://www.bilibili.com/* // @match https://search.bilibili.com/* // @grant GM_addStyle // @grant GM_xmlhttpRequest // ==/UserScript== (function() { 'use strict'; var words = ["关键词写这里,下面英文不用动", "bili-video-card__info--creative-ad","bili-video-card__info--ad"] //给B站侧边栏添加样式防止删除后自动进行AJAX请求 // var smallcards = document.querySelectorAll(".video-page-card-small") // console.log("这里是smallcards",smallcards); // if(smallcards !== undefined){ // smallcards.forEach(element => { // element.style.width = '350px'; // element.style.height = '32.86px'; // }); // } //获取油管上传者名单及视频标题 function getuploader() { // 获取所有的 <p> 标签 const hTags = document.querySelectorAll("h3") const uploaders = document.querySelectorAll("a") //遍历p标签获取对应的uploader for(var p in hTags){ //判断上传者名称是否为undefined if(hTags[p].innerHTML!== undefined){ //console.log(hTags[p].innerHTML) //检测是否含有关键词 if(Identificationwords(hTags[p].innerHTML)) { console.log("检测成功") //删除相应视频 deleteVideo(hTags[p]) console.log("删除成功") } } } //遍历标题标签获取相应标题 for(var t in uploaders){ if(uploaders[t].innerHTML!==undefined){ //console.log(uploaders[t].innerHTML) if(Identificationwords(uploaders[t].innerHTML)) { console.log("标题含有关键词") deleteVideo(uploaders[t]) } } } } //查找是否包含关键词 function Identificationwords(mainString) { for (var i = 0;i<words.length;i++) { if(mainString.includes(words[i])) { console.log("找到了") return true } } return false } //向上查找并删除视频的父元素 function deleteVideo(deleteword) { if (deleteword.closest(".bili-video-card") !== null){ deleteword.closest(".bili-video-card").style.visibility="hidden" } if (deleteword.closest(".feed-card")!== null){ deleteword.closest(".feed-card").style.visibility="hidden" } if (deleteword.closest(".card-box")!== null){ deleteword.closest(".card-box").style.visibility="hidden" } if (deleteword.closest(".floor-card")!== null){ deleteword.closest(".floor-card").style.visibility="hidden" } if (deleteword.closest(".bili-live-card")!== null){ deleteword.closest(".bili-live-card").style.visibility="hidden" } if (deleteword.closest("#bannerAd")!== null){ deleteword.closest("#bannerAd").style.visibility="hidden" } if (deleteword.closest(".ad-report")!== null){ deleteword.closest(".ad-report").style.visibility="hidden" } if (deleteword.closest("#slide_ad")!== null){ deleteword.closest("#slide_ad").style.visibility="hidden" } if (deleteword.closest(".pop-live-small-mode")!== null){ deleteword.closest(".pop-live-small-mode").style.visibility="hidden" } } // 定义你的功能函数 function yourFunction() { document.querySelectorAll(".floor-single-card").forEach(function(a){ a.style.visibility="hidden" }) document.querySelectorAll(".activity-m-v1").forEach(function(a){ a.style.visibility="hidden" }) document.querySelectorAll(".video-card-ad-small").forEach(function(a){ a.style.visibility="hidden" }) document.querySelectorAll(".ad-floor-cover").forEach(function(a){ a.style.visibility="hidden" }) document.querySelectorAll(".slide-ad-exp").forEach(function(a){ a.style.visibility="hidden" }) // console.log('Function executed!'); // 在这里添加你的代码,例如: // document.querySelectorAll('h1').forEach(el => el.style.color = 'red'); getuploader() } // 页面加载完成后执行一次 window.addEventListener('load', yourFunction); // 保存原始的 open 和 send 方法 const originalOpen = XMLHttpRequest.prototype.open; // 重写 open 方法 XMLHttpRequest.prototype.open = function(method, url, async, user, password) { clearTimeout(x) var x = setTimeout(yourFunction,1000) return originalOpen.apply(this, [method, url, async, user, password]); }; let timeout = null; const DEBOUNCE_DELAY = 500; // 延迟时间,毫秒 // Function to be executed when all new elements are added function onAllElementsAdded() { console.log('All new elements have been added!'); // 在所有新元素添加完毕后执行的函数 yourFunction() } // Function to debounce the execution function debounce(callback, delay) { clearTimeout(timeout); timeout = setTimeout(callback, delay); } // Create a MutationObserver to listen for changes const observer = new MutationObserver((mutations) => { let newNodesAdded = false; mutations.forEach((mutation) => { if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { newNodesAdded = true; } }); if (newNodesAdded) { debounce(onAllElementsAdded, DEBOUNCE_DELAY); } }); // Specify the target node and observer options const targetNode = document.body; // 可以根据需要调整 const observerOptions = { childList: true, subtree: true }; // Start observing the target node observer.observe(targetNode, observerOptions); console.log('MutationObserver is set up.'); // 配置观察选项 const config = { childList: true, subtree: true }; // 开始观察目标节点 observer.observe(document.body, config); })();