您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
按照pixiv小说的文章简介,系列标题,文章标题,作者,tag来屏蔽小说的一个脚本
当前为
// ==UserScript== // @name Pixiv 小说屏蔽 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 按照pixiv小说的文章简介,系列标题,文章标题,作者,tag来屏蔽小说的一个脚本 // @author DeanShaw // @match https://www.pixiv.net/tags/*/novels?*s_mode=s_tag* // @icon https://www.google.com/s2/favicons?sz=64&domain=chrxw.com // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // @license MIT // ==/UserScript== (function() { 'use strict'; const ContentStorageKey = 'blockedContentList'; const authorStorageKey = 'blockedAuthorsList'; const titleStorageKey = 'blockedTitlesList'; const seriesStorageKey = 'blockedSeriesList'; const TagsStorageKey = 'blockedTagsList'; let buttonsGenerated = 1; let currentPageUrl = window.location.href; // Function to get the blocked Tag list from storage function getBlockedTags() { return GM_getValue(TagsStorageKey, "").split(/[,,]/).filter(tag => tag.trim() !== ""); } // Function to set the blocked Tag list in storage function setBlockedTags(list) { GM_setValue(TagsStorageKey, list.join(',')); } // Function to get the blocked Content list from storage function getBlockedContents() { return GM_getValue(ContentStorageKey, "").split(/[,,]/).filter(content => content.trim() !== ""); } // Function to set the blocked Content list in storage function setBlockedContents(list) { GM_setValue(ContentStorageKey, list.join(',')); } // Function to get the blocked authors list from storage function getBlockedAuthors() { return GM_getValue(authorStorageKey, "").split(/[,,]/).filter(author => author.trim() !== ""); } // Function to set the blocked authors list in storage function setBlockedAuthors(list) { GM_setValue(authorStorageKey, list.join(',')); } // Function to get the blocked titles list from storage function getBlockedTitles() { return GM_getValue(titleStorageKey, "").split(/[,,]/).filter(title => title.trim() !== ""); } // Function to set the blocked titles list in storage function setBlockedTitles(list) { GM_setValue(titleStorageKey, list.join(',')); } // Function to get the blocked series list from storage function getBlockedSeries() { return GM_getValue(seriesStorageKey, "").split(/[,,]/).filter(series => series.trim() !== ""); } // Function to set the blocked series list in storage function setBlockedSeries(list) { GM_setValue(seriesStorageKey, list.join(',')); } // Function to create the "Edit List" button function createEditButton(text, storageKey, buttonText, position) { const button = document.createElement('button'); button.innerText = text; button.style.position = 'fixed'; button.style.bottom = '20px'; button.style.left = position; button.style.transform = 'translateX(-50%)'; button.style.zIndex = 1000; button.style.fontFamily = '微软雅黑'; // 设置字体为微软雅黑 button.onclick = () => editList(storageKey, buttonText); document.body.appendChild(button); return button; } // Function to edit the blocked authors, titles, or series list function editList(storageKey, buttonText) { const currentList = storageKey === authorStorageKey ? getBlockedAuthors().join(',') : storageKey === titleStorageKey ? getBlockedTitles().join(',') : storageKey === ContentStorageKey ? getBlockedContents().join(',') : storageKey === TagsStorageKey ? getBlockedTags().join(',') : getBlockedSeries().join(','); const newList = prompt(`编辑${buttonText}(用逗号分隔):`, currentList); if (newList !== null) { storageKey === authorStorageKey ? setBlockedAuthors(newList.split(/[,,]/)) : storageKey === titleStorageKey ? setBlockedTitles(newList.split(/[,,]/)) : storageKey === ContentStorageKey ? setBlockedContents(newList.split(/[,,]/)) : storageKey === TagsStorageKey ? setBlockedTags(newList.split(/[,,]/)) : setBlockedSeries(newList.split(/[,,]/)); location.reload(); } } // Function to hide blocked authors' content function hideBlockedAuthorsContent() { const blockedAuthors = getBlockedAuthors(); const authorElements = document.querySelectorAll('a.sc-d98f2c-0.gtm-novel-searchpage-result-user.sc-1rx6dmq-2.sc-1c4k3wn-15.kghgsn.kkSLPs'); authorElements.forEach(el => { const authorName = el.innerText; if (blockedAuthors.includes(authorName)) { el.closest('li').style.display = 'none'; } }); } // Function to hide blocked titles function hideBlockedTitles() { const blockedTitles = getBlockedTitles(); const titleElements = document.querySelectorAll('a.sc-d98f2c-0.sc-iasfms-7.sc-1c4k3wn-14.jMTyeP.ZgTBh.gtm-novel-searchpage-result-title'); titleElements.forEach(el => { const title = el.innerText; if (blockedTitles.some(keyword => title.includes(keyword))) { el.closest('li').style.display = 'none'; } }); } // Function to hide blocked series function hideBlockedSeries() { const blockedSeries = getBlockedSeries(); const seriesElements = document.querySelectorAll('a.sc-d98f2c-0.sc-1c4k3wn-16.hFkYWC.gtm-novel-searchpage-result-series-title'); seriesElements.forEach(el => { const series = el.innerText; if (blockedSeries.some(keyword => series.includes(keyword))) { el.closest('li').style.display = 'none'; } }); } function hideBlockedContent() { const blockedContents = getBlockedContents(); const contentElements = document.querySelectorAll('div.sc-1utla24-0.kJgShy'); contentElements.forEach(el => { const content = el.innerText; if (blockedContents.some(keyword => content.includes(keyword))) { const articleElement = el.closest('li'); // 获取包含该正文的最接近的 <li> 元素 if (articleElement) { articleElement.style.display = 'none'; } } }); } function hideBlockedTags() { const blockedTags = getBlockedTags(); // 获取屏蔽标签列表 const articleElements = document.querySelectorAll('ul.sc-1c4k3wn-18.kbpYuc'); // 选择每篇文章的标签元素 articleElements.forEach(article => { let tags = []; article.querySelectorAll('a.sc-d98f2c-0.sc-1c4k3wn-19.mmZcW.gtm-novel-searchpage-result-tag span').forEach(tagElement => { tags.push(tagElement.innerText); }); // Check if any of the tags are in the blockedTags list if (tags.some(tag => blockedTags.includes(tag))) { article.closest('li').style.display = 'none'; // Hide the whole article } }); } // Function to add a "Block" button next to each author name function addBlockButtons() { const authorElements = document.querySelectorAll('a.sc-d98f2c-0.gtm-novel-searchpage-result-user.sc-1rx6dmq-2.sc-1c4k3wn-15.kghgsn.kkSLPs'); authorElements.forEach(el => { const authorName = el.innerText; if (!el.nextSibling || el.nextSibling.innerText !== '屏蔽该作者') { const blockButton = document.createElement('button'); blockButton.innerText = '屏蔽该作者'; blockButton.style.marginLeft = '0.5px'; // 缩小左边距 blockButton.style.marginRight = '0.5px'; // 缩小右边距 blockButton.style.padding = '0.1px'; // 缩小按钮大小 blockButton.style.fontSize = '0.5px'; // 缩小字体大小 blockButton.style.fontFamily = '微软雅黑'; // 设置字体为微软雅黑 blockButton.onclick = () => { const blockedAuthors = getBlockedAuthors(); if (!blockedAuthors.includes(authorName)) { blockedAuthors.push(authorName); setBlockedAuthors(blockedAuthors); alert(`${authorName} 已加入屏蔽列表`); location.reload(); } else { alert(`${authorName} 已在屏蔽列表中`); } }; el.parentNode.insertBefore(blockButton, el.nextSibling); // 插入到作者名后面 } }); } // Function to add a "Block" button next to each series name function addBlockSeriesButtons() { const seriesElements = document.querySelectorAll('a.sc-d98f2c-0.sc-1c4k3wn-16.hFkYWC.gtm-novel-searchpage-result-series-title'); seriesElements.forEach(el => { const seriesName = el.innerText; if (!el.nextSibling || el.nextSibling.innerText !== '屏蔽该系列') { const blockButton = document.createElement('button'); blockButton.innerText = '屏蔽该系列'; blockButton.style.marginLeft = '0.5px'; // 缩小左边距 blockButton.style.marginRight = '0.5px'; // 缩小右边距 blockButton.style.padding = '0.1px'; // 缩小按钮大小 blockButton.style.fontSize = '0.5px'; // 缩小字体大小 blockButton.style.fontFamily = '微软雅黑'; // 设置字体为微软雅黑 blockButton.onclick = () => { const blockedSeries = getBlockedSeries(); if (!blockedSeries.includes(seriesName)) { blockedSeries.push(seriesName); setBlockedSeries(blockedSeries); alert(`${seriesName} 已加入屏蔽列表`); location.reload(); } else { alert(`${seriesName} 已在屏蔽列表中`); } }; el.parentNode.insertBefore(blockButton, el.nextSibling); // 插入到系列名后面 } }); } // Function to create and add the "Edit Title List" button next to each title function addEditTitleListButtons() { const titleElements = document.querySelectorAll('a.sc-d98f2c-0.sc-iasfms-7.sc-1c4k3wn-14.jMTyeP.ZgTBh.gtm-novel-searchpage-result-title'); titleElements.forEach(el => { if (!el.nextSibling || el.nextSibling.innerText !== '编辑标题屏蔽关键词列表') { const editButton = document.createElement('button'); editButton.innerText = '编辑标题屏蔽关键词列表'; editButton.style.padding = '0.1px'; // 缩小按钮大小 editButton.style.fontSize = '0.5px'; // 缩小字体大小 editButton.style.fontFamily = '微软雅黑'; // 设置字体为微软雅黑 editButton.onclick = () => editList(titleStorageKey, '标题屏蔽关键词'); el.parentNode.insertBefore(editButton, el.nextSibling); // Insert the button next to the title element } }); } // Function to add a "Block" button next to each content element function addBlockContentButtons() { const contentElements = document.querySelectorAll('div.sc-1utla24-0.kJgShy'); contentElements.forEach(el => { // Check if the parent element has the correct class name to avoid adding button next to title elements const parentElement = el.closest('li'); if (parentElement && parentElement.querySelector('div.sc-1utla24-0.kJgShy')) { // Check if the button already exists to avoid duplication if (!el.nextSibling || el.nextSibling.innerText !== '编辑正文描述屏蔽关键词列表') { const blockButton = document.createElement('button'); blockButton.innerText = '编辑正文描述屏蔽关键词列表'; blockButton.style.marginTop = '5px'; blockButton.style.padding = '2px'; blockButton.style.fontSize = '12px'; blockButton.style.fontFamily = '微软雅黑'; // 设置字体为微软雅黑 blockButton.onclick = () => editList(ContentStorageKey, '屏蔽正文'); el.parentNode.insertBefore(blockButton, el.nextSibling); // Insert the button after the content element } } }); } // Function to add a "Block Tag" button next to each author name function addBlockTagButton() { const blockButtons = document.querySelectorAll('button'); blockButtons.forEach(button => { if (button.innerText === '屏蔽该作者') { const blockTagButton = document.createElement('button'); blockTagButton.innerText = '编辑Tag屏蔽列表'; blockTagButton.style.padding = '0.1px'; // 缩小按钮大小 blockTagButton.style.fontSize = '0.5px'; // 缩小字体大小 blockTagButton.style.marginLeft = '10px'; // Add margin to separate from the "Block" button blockTagButton.onclick = () => editList(TagsStorageKey, '屏蔽Tag'); button.parentNode.insertBefore(blockTagButton, button.nextSibling); // Insert after the "Block" button } }); } // Function to repeatedly execute the script to ensure it remains active function repeatExecution() { setInterval(() => { if (currentPageUrl !== window.location.href) { buttonsGenerated = 0; // Reset the flag when the URL changes currentPageUrl = window.location.href; // Update the current URL } if (buttonsGenerated === 0) { addBlockButtons(); addEditTitleListButtons(); addBlockSeriesButtons(); addBlockContentButtons(); removeIncorrectButtons(); addBlockTagButton(); buttonsGenerated = 1; // Set the flag to indicate buttons have been generated } hideBlockedAuthorsContent(); hideBlockedTitles(); hideBlockedSeries(); hideBlockedContent(); hideBlockedTags(); }, 3000); // Repeat every 3 seconds } // Function to remove incorrect buttons and keep correct ones function removeIncorrectButtons() { const correctButtons = document.querySelectorAll('div.sc-1utla24-0.kJgShy + button'); correctButtons.forEach(button => { // Check if the button's parent node matches the incorrect structure if (button.parentNode.classList.contains('sc-1c4k3wn-20')) { button.remove(); // Remove the button if it's in the incorrect structure } }); } // Initialize the script function init() { createEditButton('编辑正文描述屏蔽列表', ContentStorageKey, '屏蔽正文描述', '30%'); createEditButton('编辑作者屏蔽列表', authorStorageKey, '屏蔽作者', '45%'); createEditButton('编辑标题屏蔽关键词列表', titleStorageKey, '屏蔽标题', '60%'); createEditButton('编辑系列屏蔽关键词列表', seriesStorageKey, '屏蔽系列', '75%'); createEditButton('编辑Tag屏蔽关键词列表', TagsStorageKey, '屏蔽Tag', '15%'); addBlockButtons(); addEditTitleListButtons(); addBlockSeriesButtons(); addBlockContentButtons(); removeIncorrectButtons(); addBlockTagButton(); hideBlockedAuthorsContent(); hideBlockedTitles(); hideBlockedSeries(); hideBlockedContent(); hideBlockedTags(); repeatExecution(); // Start the repeating execution } // Run the script on page load window.addEventListener('load', init); })();