更新之后越来越难用了,自己懒得配置nginx,mysql,这些环境,开心版的又怕后门,自己改后端的js文件看的脑瓜子疼,反正都是界面,直接js删掉一些dom元素就行了。有需要的可以拿走。 ```javascript // ==UserScript== // @name 宝塔面板优化 - 界面美化 // @namespace http://tampermonkey.net/ // @version 1.3 // @description 移除指定 class 元素、替换特定 span 文字内容,并删除包含“需求反馈”的 span // @match http://152.136.153.72:9999/* // @grant none // ==/UserScript== (function () { 'use strict'; console.log('⚠ 脚本准备加载'); // 定义需要移除的 class 组合 const selectorsToRemove = [ '.h-auto.mt-\\[1\\.2rem\\]', // h-auto mt-[1.2rem] '.svgtofont-desired.\\!mr-4px.\\!text-\\[16px\\]', // svgtofont-desired !mr-4px !text-[16px] '.icon-end-time-free.icon-unpaid-ltd', // icon-end-time-free icon-unpaid-ltd '.el-card.is-always-shadow.is-always-shadow.\\!border-\\[\\#efefef\\]', // el-card is-always-shadow is-always-shadow !border-[#efefef] '.icon-end-time.icon-unpaid-ltd' // icon-end-time icon-unpaid-ltd ]; // 移除指定 class 的元素 const removeElementsByClass = () => { selectorsToRemove.forEach(selector => { document.querySelectorAll(selector).forEach(el => el.remove()); }); }; // 替换指定 span 的文字内容 const replaceSpanText = () => { const spanSelector = 'span.mr-1rem.ml-\\[-1\\.5rem\\]'; document.querySelectorAll(spanSelector).forEach(span => { span.textContent = '精简版'; }); }; // 删除 span/button 包含 指定字符 的 span 元素 const removeSpansWithText = () => { const spans = document.querySelectorAll('span'); spans.forEach(span => { if (span.textContent.trim() == '需求反馈') { span.remove(); } }); const buttons = document.querySelectorAll('button'); buttons.forEach(span => { if (span.textContent.trim() == '立即体验') { span.remove(); } }); }; // 删除指定class 包含置顶字符的元素 const removeClassWithText =()=>{ const parents = document.querySelectorAll('.header-child-tab'); parents.forEach(span => { if ( span.textContent.trim() == '安全检测' || span.textContent.trim() == '违规词检测' || span.textContent.trim() == 'PHP网站安全' || span.textContent.trim() == '入侵防御' || span.textContent.trim() == '系统加固' || span.textContent.trim() == '扫描感知' || span.textContent.trim() == '日志审计' || span.textContent.trim() == 'SSH登录日志' ) { span.remove(); } }); const classparents = document.querySelectorAll('.el-collapse-item'); classparents.forEach(span => { if ( span.textContent.trim().includes('top5') ) { span.remove(); } }); } // 删除包含特定子元素的 el-col 元素 const removeParentIfChildExists = () => { // 获取所有 el-col.el-col-6.wrapper-item 元素 const parents = document.querySelectorAll('.el-col.el-col-6.wrapper-item'); parents.forEach(parent => { // 检查子元素是否包含指定的 class const child = parent.querySelector('.absolute.-left-1\\.5.-top-1'); if (child) { parent.remove(); // 移除父元素 } }); }; // 综合执行函数 const removeElements = () => { removeElementsByClass(); replaceSpanText(); removeSpansWithText(); removeParentIfChildExists(); removeClassWithText(); }; // 等待dom加载完毕后执行综合函数 let timeoutId; const debouncedRemove = () => { clearTimeout(timeoutId); timeoutId = setTimeout(removeElements, 200); }; let runCount = 0; const maxRuns = 5; const observer = new MutationObserver((mutations, obs) => { if (runCount >= maxRuns) { obs.disconnect(); return; } obs.disconnect(); debouncedRemove(); runCount++; obs.observe(document.body, { childList: true, subtree: true }); }); observer.observe(document.body, { childList: true, subtree: true }); // 点击一次执行一次综合函数 let clickTimeout; document.addEventListener('click', () => { clearTimeout(clickTimeout); clickTimeout = setTimeout(removeElements, 200); }); // 初始执行(延迟 1 秒,等待 DOM 加载) setTimeout(() => { removeElements(); }, 1000); })(); ``` Loading... 更新之后越来越难用了,自己懒得配置nginx,mysql,这些环境,开心版的又怕后门,自己改后端的js文件看的脑瓜子疼,反正都是界面,直接js删掉一些dom元素就行了。有需要的可以拿走。 ```javascript // ==UserScript== // @name 宝塔面板优化 - 界面美化 // @namespace http://tampermonkey.net/ // @version 1.3 // @description 移除指定 class 元素、替换特定 span 文字内容,并删除包含“需求反馈”的 span // @match http://152.136.153.72:9999/* // @grant none // ==/UserScript== (function () { 'use strict'; console.log('⚠ 脚本准备加载'); // 定义需要移除的 class 组合 const selectorsToRemove = [ '.h-auto.mt-\\[1\\.2rem\\]', // h-auto mt-[1.2rem] '.svgtofont-desired.\\!mr-4px.\\!text-\\[16px\\]', // svgtofont-desired !mr-4px !text-[16px] '.icon-end-time-free.icon-unpaid-ltd', // icon-end-time-free icon-unpaid-ltd '.el-card.is-always-shadow.is-always-shadow.\\!border-\\[\\#efefef\\]', // el-card is-always-shadow is-always-shadow !border-[#efefef] '.icon-end-time.icon-unpaid-ltd' // icon-end-time icon-unpaid-ltd ]; // 移除指定 class 的元素 const removeElementsByClass = () => { selectorsToRemove.forEach(selector => { document.querySelectorAll(selector).forEach(el => el.remove()); }); }; // 替换指定 span 的文字内容 const replaceSpanText = () => { const spanSelector = 'span.mr-1rem.ml-\\[-1\\.5rem\\]'; document.querySelectorAll(spanSelector).forEach(span => { span.textContent = '精简版'; }); }; // 删除 span/button 包含 指定字符 的 span 元素 const removeSpansWithText = () => { const spans = document.querySelectorAll('span'); spans.forEach(span => { if (span.textContent.trim() == '需求反馈') { span.remove(); } }); const buttons = document.querySelectorAll('button'); buttons.forEach(span => { if (span.textContent.trim() == '立即体验') { span.remove(); } }); }; // 删除指定class 包含置顶字符的元素 const removeClassWithText =()=>{ const parents = document.querySelectorAll('.header-child-tab'); parents.forEach(span => { if ( span.textContent.trim() == '安全检测' || span.textContent.trim() == '违规词检测' || span.textContent.trim() == 'PHP网站安全' || span.textContent.trim() == '入侵防御' || span.textContent.trim() == '系统加固' || span.textContent.trim() == '扫描感知' || span.textContent.trim() == '日志审计' || span.textContent.trim() == 'SSH登录日志' ) { span.remove(); } }); const classparents = document.querySelectorAll('.el-collapse-item'); classparents.forEach(span => { if ( span.textContent.trim().includes('top5') ) { span.remove(); } }); } // 删除包含特定子元素的 el-col 元素 const removeParentIfChildExists = () => { // 获取所有 el-col.el-col-6.wrapper-item 元素 const parents = document.querySelectorAll('.el-col.el-col-6.wrapper-item'); parents.forEach(parent => { // 检查子元素是否包含指定的 class const child = parent.querySelector('.absolute.-left-1\\.5.-top-1'); if (child) { parent.remove(); // 移除父元素 } }); }; // 综合执行函数 const removeElements = () => { removeElementsByClass(); replaceSpanText(); removeSpansWithText(); removeParentIfChildExists(); removeClassWithText(); }; // 等待dom加载完毕后执行综合函数 let timeoutId; const debouncedRemove = () => { clearTimeout(timeoutId); timeoutId = setTimeout(removeElements, 200); }; let runCount = 0; const maxRuns = 5; const observer = new MutationObserver((mutations, obs) => { if (runCount >= maxRuns) { obs.disconnect(); return; } obs.disconnect(); debouncedRemove(); runCount++; obs.observe(document.body, { childList: true, subtree: true }); }); observer.observe(document.body, { childList: true, subtree: true }); // 点击一次执行一次综合函数 let clickTimeout; document.addEventListener('click', () => { clearTimeout(clickTimeout); clickTimeout = setTimeout(removeElements, 200); }); // 初始执行(延迟 1 秒,等待 DOM 加载) setTimeout(() => { removeElements(); }, 1000); })(); ``` 最后修改:2025 年 07 月 25 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏