去除ChatGPT Articles

删除页面上多余的 <article class="w-full"> 标签,只保留前2个和最后8个元素

当前为 2025-04-09 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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 未启动');
    }
})();