您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动在动态页面,删去不想看到的动态,包括屏蔽特定UP主和反选屏蔽规则
// ==UserScript== // @name B站动态页面根据关键词屏蔽 // @namespace http://tampermonkey.net/ // @version beta // @description 自动在动态页面,删去不想看到的动态,包括屏蔽特定UP主和反选屏蔽规则 // @author ChatGPT 和 伊吹dv子 // @match https://t.bilibili.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=bilibili.com // @grant none // @license MIT // ==/UserScript== //我的B站:https://space.bilibili.com/500400048 //代码全是一个一个功能通过ChatGPT写的,我一点都不会懂JavaScript,感谢GPT~ //如果有会做油猴脚本的大佬,能继续完善这个脚本的功能的话,那真是太好了 (function() { 'use strict'; let keywords = JSON.parse(localStorage.getItem('biliKeywords')) || []; let upBlockList = JSON.parse(localStorage.getItem('biliUpBlockList')) || []; let upInverseBlockList = JSON.parse(localStorage.getItem('biliUpInverseBlockList')) || []; function saveKeywords() { localStorage.setItem('biliKeywords', JSON.stringify(keywords)); } function saveUpBlockList() { localStorage.setItem('biliUpBlockList', JSON.stringify(upBlockList)); } function saveUpInverseBlockList() { localStorage.setItem('biliUpInverseBlockList', JSON.stringify(upInverseBlockList)); } function createKeywordManager() { const managerDiv = document.createElement('div'); managerDiv.style.position = 'fixed'; managerDiv.style.bottom = '10px'; managerDiv.style.right = '10px'; managerDiv.style.backgroundColor = 'rgba(255, 255, 255, 0.5)'; managerDiv.style.padding = '10px'; managerDiv.style.border = '1px solid #ccc'; managerDiv.style.zIndex = '9999'; managerDiv.style.width = '300px'; managerDiv.style.display = 'none'; managerDiv.id = 'keywordManager'; managerDiv.style.borderRadius = '20px'; // 设置圆角 const closeButton = document.createElement('button'); closeButton.innerText = '关闭管理'; closeButton.style.position = 'absolute'; closeButton.style.top = '-40px'; closeButton.style.right = '0px'; closeButton.style.backgroundColor = 'rgba(0, 0, 0, 0.5)'; closeButton.style.color = '#fff'; closeButton.style.border = 'none'; closeButton.style.padding = '10px'; closeButton.style.cursor = 'pointer'; closeButton.style.backgroundColor = '#f77399'; // 设置按钮背景色f77399 closeButton.style.borderRadius = '20px'; // 设置圆角 managerDiv.appendChild(closeButton); const title = document.createElement('h4'); title.innerText = '屏蔽关键词管理'; title.style.margin = '0 0 10px 0'; managerDiv.appendChild(title); const keywordSection = document.createElement('div'); managerDiv.appendChild(keywordSection); const input = document.createElement('input'); input.type = 'text'; input.placeholder = '输入关键词'; input.style.width = '100%'; input.style.marginBottom = '10px'; keywordSection.appendChild(input); const addButton = document.createElement('button'); addButton.innerText = '添加关键词'; addButton.style.backgroundColor = '#f77399'; // 设置按钮背景色f77399 addButton.style.color = 'white'; // 设置按钮文字颜色 addButton.style.border = 'none'; // 去掉边框 addButton.style.width = '100%'; addButton.style.marginBottom = '10px'; addButton.style.cursor = 'pointer'; keywordSection.appendChild(addButton); const keywordList = document.createElement('ul'); keywordSection.appendChild(keywordList); const upBlockSection = document.createElement('div'); upBlockSection.style.marginTop = '20px'; const upTitle = document.createElement('h4'); upTitle.innerText = '特定UP主屏蔽'; upBlockSection.appendChild(upTitle); const upNameInput = document.createElement('input'); upNameInput.type = 'text'; upNameInput.placeholder = '输入UP主名字'; upNameInput.style.width = '100%'; upNameInput.style.marginBottom = '10px'; upBlockSection.appendChild(upNameInput); const upKeywordInput = document.createElement('input'); upKeywordInput.type = 'text'; upKeywordInput.placeholder = '输入关键词'; upKeywordInput.style.width = '100%'; upKeywordInput.style.marginBottom = '10px'; upBlockSection.appendChild(upKeywordInput); const addUpBlockButton = document.createElement('button'); addUpBlockButton.innerText = '添加屏蔽规则'; addUpBlockButton.style.backgroundColor = '#f77399'; // 设置按钮背景色f77399 addUpBlockButton.style.color = 'white'; // 设置按钮文字颜色 addUpBlockButton.style.border = 'none'; // 去掉边框 addUpBlockButton.style.width = '100%'; addUpBlockButton.style.cursor = 'pointer'; upBlockSection.appendChild(addUpBlockButton); const upBlockListDisplay = document.createElement('ul'); upBlockSection.appendChild(upBlockListDisplay); const upInverseBlockSection = document.createElement('div'); upInverseBlockSection.style.marginTop = '20px'; const upInverseTitle = document.createElement('h4'); upInverseTitle.innerText = '特定UP主反选屏蔽'; upInverseBlockSection.appendChild(upInverseTitle); const upInverseNameInput = document.createElement('input'); upInverseNameInput.type = 'text'; upInverseNameInput.placeholder = '输入UP主名字'; upInverseNameInput.style.width = '100%'; upInverseNameInput.style.marginBottom = '10px'; upInverseBlockSection.appendChild(upInverseNameInput); const upInverseKeywordInput = document.createElement('input'); upInverseKeywordInput.type = 'text'; upInverseKeywordInput.placeholder = '输入反选关键词'; upInverseKeywordInput.style.width = '100%'; upInverseKeywordInput.style.marginBottom = '10px'; upInverseBlockSection.appendChild(upInverseKeywordInput); const addUpInverseBlockButton = document.createElement('button'); addUpInverseBlockButton.innerText = '添加反选屏蔽规则'; addUpInverseBlockButton.style.width = '100%'; addUpInverseBlockButton.style.cursor = 'pointer'; addUpInverseBlockButton.style.backgroundColor = '#f77399'; // 设置按钮背景色f77399 addUpInverseBlockButton.style.color = 'white'; // 设置按钮文字颜色 addUpInverseBlockButton.style.border = 'none'; // 去掉边框 upInverseBlockSection.appendChild(addUpInverseBlockButton); const upInverseBlockListDisplay = document.createElement('ul'); upInverseBlockSection.appendChild(upInverseBlockListDisplay); managerDiv.appendChild(upBlockSection); managerDiv.appendChild(upInverseBlockSection); document.body.appendChild(managerDiv); closeButton.addEventListener('click', () => { managerDiv.style.display = 'none'; openButton.style.display = 'block'; }); addButton.addEventListener('click', addKeyword); input.addEventListener('keypress', (e) => { if (e.key === 'Enter') { addKeyword(); } }); function addKeyword() { const keyword = input.value.trim(); if (keyword && !keywords.includes(keyword)) { keywords.push(keyword); saveKeywords(); renderKeywordList(); input.value = ''; hidePostsWithKeyword(); } } function renderKeywordList() { keywordList.innerHTML = ''; keywords.forEach((keyword, index) => { const listItem = document.createElement('li'); listItem.innerText = keyword; const deleteButton = document.createElement('button'); deleteButton.innerText = '删除'; deleteButton.style.marginLeft = '10px'; deleteButton.style.cursor = 'pointer'; deleteButton.addEventListener('click', () => { keywords.splice(index, 1); saveKeywords(); renderKeywordList(); hidePostsWithKeyword(); }); listItem.appendChild(deleteButton); keywordList.appendChild(listItem); }); } addUpBlockButton.addEventListener('click', addUpBlock); function addUpBlock() { const upName = upNameInput.value.trim(); const upKeyword = upKeywordInput.value.trim(); if (upName && upKeyword && !upBlockList.some(block => block.upName === upName && block.keyword === upKeyword)) { upBlockList.push({ upName, keyword: upKeyword }); saveUpBlockList(); renderUpBlockList(); upNameInput.value = ''; upKeywordInput.value = ''; hidePostsWithSpecificBlock(); } } function renderUpBlockList() { upBlockListDisplay.innerHTML = ''; upBlockList.forEach((block, index) => { const listItem = document.createElement('li'); listItem.innerText = `UP主: ${block.upName},关键词: ${block.keyword}`; const deleteButton = document.createElement('button'); deleteButton.innerText = '删除'; deleteButton.style.marginLeft = '10px'; deleteButton.style.cursor = 'pointer'; deleteButton.addEventListener('click', () => { upBlockList.splice(index, 1); saveUpBlockList(); renderUpBlockList(); hidePostsWithSpecificBlock(); }); listItem.appendChild(deleteButton); upBlockListDisplay.appendChild(listItem); }); } addUpInverseBlockButton.addEventListener('click', addUpInverseBlock); function addUpInverseBlock() { const upName = upInverseNameInput.value.trim(); const upInverseKeyword = upInverseKeywordInput.value.trim(); if (upName && upInverseKeyword && !upInverseBlockList.some(block => block.upName === upName && block.keyword === upInverseKeyword)) { upInverseBlockList.push({ upName, keyword: upInverseKeyword }); saveUpInverseBlockList(); renderUpInverseBlockList(); upInverseNameInput.value = ''; upInverseKeywordInput.value = ''; hidePostsWithInverseBlock(); } } function renderUpInverseBlockList() { upInverseBlockListDisplay.innerHTML = ''; upInverseBlockList.forEach((block, index) => { const listItem = document.createElement('li'); listItem.innerText = `UP主: ${block.upName},反选关键词: ${block.keyword}`; const deleteButton = document.createElement('button'); deleteButton.innerText = '删除'; deleteButton.style.marginLeft = '10px'; deleteButton.style.cursor = 'pointer'; deleteButton.addEventListener('click', () => { upInverseBlockList.splice(index, 1); saveUpInverseBlockList(); renderUpInverseBlockList(); hidePostsWithInverseBlock(); }); listItem.appendChild(deleteButton); upInverseBlockListDisplay.appendChild(listItem); }); } renderKeywordList(); renderUpBlockList(); renderUpInverseBlockList(); } function hidePostsWithKeyword() { const posts = document.querySelectorAll('.bili-dyn-item'); posts.forEach(post => { const textContent = post.innerText || post.textContent; if (keywords.some(keyword => textContent.includes(keyword))) { hidePostWithButton(post); } }); } function hidePostsWithSpecificBlock() { const posts = document.querySelectorAll('.bili-dyn-item'); posts.forEach(post => { const upNameElement = post.querySelector('.bili-dyn-title__text'); const textContent = post.innerText || post.textContent; if (upNameElement) { const upName = upNameElement.innerText.trim(); upBlockList.forEach(block => { if (upName === block.upName && textContent.includes(block.keyword)) { hidePostWithButton(post); } }); } }); } function hidePostsWithInverseBlock() { const posts = document.querySelectorAll('.bili-dyn-item'); posts.forEach(post => { const upNameElement = post.querySelector('.bili-dyn-title__text'); const textContent = post.innerText || post.textContent; if (upNameElement) { const upName = upNameElement.innerText.trim(); upInverseBlockList.forEach(block => { if (upName === block.upName && !textContent.includes(block.keyword)) { hidePostWithButton(post); } }); } }); } function hidePostWithButton(post) { if (post.style.display !== 'none') { post.style.display = 'none'; const revealButton = document.createElement('button'); revealButton.innerText = '显示被隐藏的内容'; revealButton.classList.add('reveal-btn'); revealButton.style.margin = '10px auto'; revealButton.style.cursor = 'pointer'; revealButton.style.display = 'block'; revealButton.style.fontSize = '14px'; revealButton.style.borderRadius = '15px'; // 增加圆角值,设置为20px以实现更圆滑的效果 revealButton.style.backgroundColor = '#f77399'; revealButton.style.border = 'none'; // 去掉边框 revealButton.style.color = 'white'; // 设置按钮文字颜色 revealButton.addEventListener('click', () => { post.style.display = ''; revealButton.remove(); }); post.parentElement.insertBefore(revealButton, post); } } const observer = new MutationObserver((mutationsList) => { mutationsList.forEach(mutation => { if (mutation.addedNodes.length > 0) { hidePostsWithKeyword(); hidePostsWithSpecificBlock(); hidePostsWithInverseBlock(); } }); }); observer.observe(document.body, { childList: true, subtree: true }); const openButton = document.createElement('button'); openButton.innerText = '屏蔽词管理面板'; openButton.style.position = 'fixed'; openButton.style.bottom = '10px'; openButton.style.right = '10px'; openButton.style.backgroundColor = '#f77399'; openButton.style.color = '#fff'; openButton.style.border = 'none'; openButton.style.padding = '10px'; openButton.style.cursor = 'pointer'; openButton.style.zIndex = '9999'; openButton.style.borderRadius = '20px'; // 增加圆角值,设置为20px以实现更圆滑的效果 openButton.addEventListener('click', () => { document.getElementById('keywordManager').style.display = 'block'; openButton.style.display = 'none'; }); document.body.appendChild(openButton); createKeywordManager(); hidePostsWithKeyword(); hidePostsWithSpecificBlock(); hidePostsWithInverseBlock(); })();