删除页面上多余的 <article class="w-full"> 标签,只保留前2个和最后8个元素
当前为
// ==UserScript==
// @name 去除ChatGPT Articles
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 删除页面上多余的 <article class="w-full"> 标签,只保留前2个和最后8个元素
// @match *://*/*
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// 定义网址黑名单
const blacklist = [
'https://chatgpt.com',// 这里可以添加更多网址
'https://www.sinbyte.com.cn'
];
// 获取当前页面的完整 URL
const currentUrl = window.location.href;
// 检查当前 URL 是否在黑名单中
const isInBlacklist = blacklist.some(blacklistedUrl => currentUrl.startsWith(blacklistedUrl));
if (!isInBlacklist) {
console.log('当前网址不在黑名单中,脚本已跳过。');
return; // 不在黑名单中,跳过执行脚本
}
console.log('当前网址在黑名单中,脚本开始执行...');
// 定义删除多余文章的函数
function removeExcessArticles() {
// 精确匹配具有指定 class 和 data-testid 前缀的 <article> 元素
const articles = document.querySelectorAll('article.w-full.text-token-text-primary.focus-visible\\:outline-2.focus-visible\\:outline-offset-\\[-4px\\][data-testid^="conversation-turn-"]');
// 检查文章数量是否大于22
if (articles.length > 30) {
console.log(`共找到 ${articles.length} 个 <article> 元素,开始删除操作...`);
// 保留前2个和最后8个,其他删除
const toRemove = Array.from(articles).slice(2, -30);
toRemove.forEach(article => {
article.remove();
// console.log('已删除 <article class="w-full text-token-text-primary ...">');
});
} else {
//console.log('文章数量少于30..无需删除。');
}
}
// 页面加载后立即执行一次清理操作
window.addEventListener('load', removeExcessArticles);
// 每分钟定时执行一次清理操作
setInterval(removeExcessArticles, 5000); // 每5秒触发一次
// 监听特定 DOM 元素的变化,以捕捉对话切换或新对话的加载
const targetNode = document.querySelector('main .react-scroll-to-bottom--css-sznur-1n7m0yu');
if (targetNode) {
const observer = new MutationObserver(removeExcessArticles);
observer.observe(targetNode, { childList: true, subtree: true });
} else {
console.warn('未找到指定的 DOM 元素,MutationObserver 未启动');
}
})();