您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
优化后的极速删除版本,支持Kimi/DeepSeek/ChatGPT,第一次手动点「删除」后自动确认;按 Option/Alt 键可直接删除第一条记录
// ==UserScript== // @name Kimi / DeepSeek / ChatGPT 极速自动删除历史记录 // @namespace Violentmonkey Scripts // @match https://kimi.moonshot.cn/* // @match https://www.kimi.com/* // @match https://chat.deepseek.com/* // @match https://chatgpt.com/* // @license MIT // @grant none // @version 1.11 // @author - // @description 优化后的极速删除版本,支持Kimi/DeepSeek/ChatGPT,第一次手动点「删除」后自动确认;按 Option/Alt 键可直接删除第一条记录 // ==/UserScript== (function () { 'use strict'; /* ---------- 1. 兼容 Option/Alt 键 ---------- */ window.addEventListener('load', () => { document.addEventListener('keydown', (e) => { if (e.altKey) { // Option 键在 Mac 上 = e.altKey,Windows 的 Alt 键也是 e.altKey e.preventDefault(); const btn = findDeleteButton(); // 优先找对话框里的 if (btn) { btn.click(); } else { // 如果对话框没出现,直接点第一条记录的「删除」 const firstDel = findFirstRecordDelete(); if (firstDel) firstDel.click(); } } }); }); /* ---------- 2. 极速自动连点逻辑 ---------- */ let waitingForDelete = false; const fastObserver = new MutationObserver((mutations) => { if (!waitingForDelete) return; // 只检查新增的节点 for (const mutation of mutations) { for (const node of mutation.addedNodes) { if (node.nodeType === 1) { // 只处理元素节点 const btn = findDeleteButtonInNode(node); if (btn) { waitingForDelete = false; btn.click(); return; // 找到按钮后立即返回 } } } } }); fastObserver.observe(document.body, { childList: true, subtree: true, attributes: false, characterData: false }); document.addEventListener('click', (e) => { const isTrigger = e.target.matches('button.kimi-button.danger, .ds-button--error') || e.target.closest('[class*="more"], [class*="dropdown"], [class*="menu"]') || e.target.closest('.opt-name, .ds-dropdown-menu-option__label') || // 直接点击删除文字也能触发 e.target.closest('[data-testid="delete-chat-menu-item"]'); // ChatGPT的删除菜单项 if (isTrigger && !waitingForDelete) { waitingForDelete = true; // 立即尝试查找一次,避免等待观察者触发 setTimeout(() => { const btn = findDeleteButton(); if (btn) { waitingForDelete = false; btn.click(); } }, 50); // 短延时确保DOM更新 } }, true); /* ---------- 优化后的工具函数 ---------- */ function findDeleteButtonInNode(node) { // 1) Kimi 对话框里的「删除」按钮 let btn = node.querySelector('button.kimi-button.danger'); if (!btn) { btn = [...node.querySelectorAll('button')] .find(b => b.textContent.trim() === '删除' && b.offsetParent !== null); } // 2) DeepSeek 对话框里的「删除」按钮 if (!btn) { btn = node.querySelector('div[role="button"].ds-button--error'); } // 3) ChatGPT 对话框里的「删除」按钮 if (!btn) { btn = [...node.querySelectorAll('div.flex.items-center.justify-center')] .find(el => el.textContent.trim() === '删除' && el.offsetParent !== null); } return btn || null; } function findDeleteButton() { return findDeleteButtonInNode(document); } // 优化后的第一条记录删除查找 function findFirstRecordDelete() { // Kimi 的新版界面 const kimiBtn = [...document.querySelectorAll('.opt-name')] .find(span => span.textContent.trim() === '删除' && span.offsetParent !== null); // DeepSeek 的删除按钮 const deepSeekBtn = [...document.querySelectorAll('.ds-dropdown-menu-option__label')] .find(span => span.textContent.trim() === '删除' && span.offsetParent !== null); // ChatGPT 的删除按钮 const chatGPTBtn = [...document.querySelectorAll('[data-testid="delete-chat-menu-item"]')] .find(el => el.textContent.includes('删除') && el.offsetParent !== null); return kimiBtn || deepSeekBtn || chatGPTBtn; } })();