您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
增强分发系统功能,检验分发系统异常值
当前为
// ==UserScript== // @name SmartPP Helper // @namespace http://minhill.com // @version 0.2 // @description 增强分发系统功能,检验分发系统异常值 // @author Minhill // @include http://10.148.16.64:8080/* // @include http://10.148.16.63:8080/* // @include http://10.148.16.40:8080/* // @grant GM_addStyle // @supportURL https://gf.qytechs.cn/scripts/415457 // @homepage https://gf.qytechs.cn/zh-CN/scripts/415457 // ==/UserScript== (function () { 'use strict'; let config = { keyword: { CN: { tMax: '最高温度', tMin: '最低温度', fcTime: '预报时效', timeSplit: '至', hour08: '08时', hourReg: /(\d{2})时/, }, EN: { tMax: 'Maximum Temperature', tMin: 'Minimum Temperature', fcTime: 'Forecast Period', timeSplit: ' - ', hour08: '08:00', hourReg: /(\d{2}):00/, } } } /** * * @param {Object} table 表 Html DOM */ function validateTemp(table) { let IntlWords; if (table.textContent.includes('预报时效')) { // 中文 IntlWords = config.keyword.CN; } else if (table.textContent.includes('Forecast')) {// 英文 IntlWords = config.keyword.EN; } else { console.log('未识别语言'); return; } var tBody = table.children[0]; let TimeRow, TmaxRow, TminRow; for (let tr of tBody.children) {// 获取高低温行元素 if (tr.textContent.includes(IntlWords.fcTime)) TimeRow = tr;// Forecast Period if (tr.textContent.includes(IntlWords.tMax)) TmaxRow = tr;// Maximum Temperature if (tr.textContent.includes(IntlWords.tMin)) TminRow = tr;// Minimum Temperature } if (!TmaxRow) return;// 没有最高最低温直接返回 let [tMaxList, tMinList, timeList] = [ [], [], [] ]; for (let index = 1; index < TmaxRow.children.length; index++) {// 导入高低温数据 tMinList.push(Number(TminRow.children[index].textContent)); tMaxList.push(Number(TmaxRow.children[index].textContent)); timeList.push(TimeRow.children[index].textContent); } let initHour = NaN,endHour = NaN; var timePeroidList = timeList[0].split(IntlWords.timeSplit); if (timePeroidList.length === 1) throw new Error('未识别的日期分隔符'); let initHourMatched = timePeroidList[0].match(IntlWords.hourReg); if (initHourMatched) { initHour = Number(initHourMatched[1]); } else { throw new Error('未识别的日期格式' + timePeroidList[0]); } let endHourMatched = timePeroidList[1].match(IntlWords.hourReg); if (endHourMatched) { endHour = Number(endHourMatched[1]); } else { throw new Error('未识别的日期格式' + timePeroidList[1]); } let validTmaxList,validTminList; if ((initHour === 8 && endHour === 20) || (initHour === 20 && endHour === 8)) { validTmaxList = new Array(tMaxList.length / 2); validTminList = new Array(tMaxList.length / 2); } else { console.log(`非正点时次${initHour}, ${endHour}`); return; } for (let i = 0; i < validTmaxList.length; i++) {// 判断每一对温度 if (initHour === 8 && endHour === 20) { validTmaxList[i] = tMaxList[i * 2] > tMaxList[i * 2 + 1]; validTminList[i] = tMinList[i * 2] > tMinList[i * 2 + 1]; } else if (initHour === 20 && endHour === 8) { validTmaxList[i] = tMaxList[i * 2] < tMaxList[i * 2 + 1]; validTminList[i] = tMinList[i * 2] < tMinList[i * 2 + 1]; } else { console.log(`非正点时次${initHour}, ${endHour}`); return; } } changeValidStatus(validTmaxList, TmaxRow); changeValidStatus(validTminList, TminRow); } /** * * @param {Array} validList 判断列表 * @param {Object} tempRow 温度行元素 */ function changeValidStatus(validList, tempRow) { validList.forEach((iValid, index) => { if (iValid) { tempRow.children[1 + index * 2].classList.add("valid-success"); tempRow.children[1 + index * 2 + 1].classList.add("valid-success"); tempRow.children[1 + index * 2].classList.remove("valid-error"); tempRow.children[1 + index * 2 + 1].classList.remove("valid-error"); } else { tempRow.children[1 + index * 2].classList.add("valid-error"); tempRow.children[1 + index * 2 + 1].classList.add("valid-error"); tempRow.children[1 + index * 2].classList.remove("valid-success"); tempRow.children[1 + index * 2 + 1].classList.remove("valid-success"); } }); } /** * 获取表格 */ function tableSelector() { var tableList = document.querySelectorAll('table.text_table2'); for (let iTable of tableList) { validateTemp(iTable); } } /** * 模板部分监听器 */ function templateObserver() { const targetNode = document.getElementById('templatePreContent');// 选择需要观察变动的节点 const config = { childList: true, subtree: false };// 观察器的配置(需要观察什么变动) const callback = function (mutationsList, observer) {// 当观察到变动时执行的回调函数 tableSelector(); }; const observer = new MutationObserver(callback);// 创建一个观察器实例并传入回调函数 observer.observe(targetNode, config);// 以上述配置开始观察目标节点 } /** * 主入口函数 */ function main() { var style = '<style>.valid-success{background-color:green;}.valid-error{background-color:orange;}</style>'; var ele = document.createElement('div'); ele.innerHTML = style; document.getElementsByTagName('head')[0].appendChild(ele.firstElementChild); lookUpTarget(); } /** * 处理注入问题 */ function lookUpTarget() { const targetNode = document.getElementById('templatePreContent'); if(targetNode){ return templateObserver() }else{ console.log('未找到目标元素,等待5秒重新查找'); return setTimeout(lookUpTarget, 5000); } } main(); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址