您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
对AI研判内容有问题点击选择问题
// ==UserScript== // @name 标注平台辅助校准 // @version 0.5 // @description 对AI研判内容有问题点击选择问题 // @author my // @match *://qgpt-mark.skyeye.qianxin-inc.cn/* // @require http://libs.baidu.com/jquery/2.0.0/jquery.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js // @require https://cdn.jsdelivr.net/npm/[email protected]/lib/index.min.js // @require https://unpkg.com/react-trigger-change/dist/react-trigger-change.js // @license MIT // @namespace https://greasyfork.org/users/1362442 // ==/UserScript== class MarkTool { constructor() { console.log("这是构造函数"); } run() { var that = this; // 设置定时器,定时添加各种按钮 window.setInterval(function () { if (window.location.href.indexOf("/data-management/mark-data/list/calibrate/") != -1) { that.addRemoveEmptyLineBtn(); that.addSuggestionSelect(); } }, 1000); } addSuggestionSelect() { // 级联选择器 const template = ` <div class="suggestion-select1"> <el-cascader v-model="value" :options="options" :props="{ expandTrigger: 'hover' }" @change="handleChange" clearable></el-cascader> </div> `; if (!document.querySelector(".suggestion-select1")) { var header = document.querySelector( "#pane-model > div > div:nth-child(4) > div.header > div > div.item-header-left" ); if (header) { var that = this; console.log("找到元素"); const div = document.createElement("div"); div.innerHTML = template; header.append(div); } } } // 增加去除空行按钮 addRemoveEmptyLineBtn() { var that = this; if (!document.querySelector(".my-remove-empty-line")) { let header = document.querySelector( "#pane-model > div > div:nth-child(4) > div.header > div > div.item-header-left" ); if (header) { //var div = document.createElement('div') let removeEmptyLineBtn = document.createElement("button"); removeEmptyLineBtn.type = "button"; removeEmptyLineBtn.onclick = function () { //this.preventDefault(); console.log("点击了去除空行"); that.del_suggestion_empty_line(); }; removeEmptyLineBtn.className = "q-button q-button--primary q-button--mini my-remove-empty-line"; let span = document.createElement("span"); span.textContent = "删除空行&序号重排"; removeEmptyLineBtn.appendChild(span); header.append(removeEmptyLineBtn); } } } del_suggestion_empty_line() { var that = this; let value = that.get_suggestion(); console.log("1211:", value); if (value.length == 0) { } else { // 去掉开头的空格 value = value.trim(); // 将连续的多个换行符替换为一个换行符 value = value.replace(/\n+/g, "\n"); // 重新计算编号 let n = 1; value = value.replace(/^\d{1,2}\.\s/gm, () => { return `${n++}. `; }); console.log("del_suggestion_empty_line:", value); that.setSuggestion(value); } } setSuggestion(selectedValue) { const textarea = document.querySelector("#pane-model > div > div:nth-child(5) > div > textarea"); if (textarea) { console.log("textarea:", textarea); // 清空文本框内容 textarea.value = ''; // 更新文本区域的值 textarea.focus(); document.execCommand('insertText', false, selectedValue); // 可选:在控制台打印最终内容以进行调试 console.log("Final content:", selectedValue); } else { console.log("没有找到textarea"); } } get_suggestion() { let suggestionMarkdownEle = document.querySelector( "#pane-model > div > div:nth-child(5) > div > textarea" ); if (suggestionMarkdownEle) { let value = suggestionMarkdownEle.value; return value; } else { return ""; } } } function addElementUICSS() { const link = document.createElement("link"); link.rel = "stylesheet"; link.type = "text/css"; link.href = "https://cdn.jsdelivr.net/npm/[email protected]/lib/theme-chalk/index.min.css"; document.head.appendChild(link); } function findyanpanSelectElement() { console.log("油猴脚本测试"); // 建议选择器的vue渲染 const element = document.querySelector(".suggestion-select1"); const vue_element = document.querySelector(".el-input.el-input--suffix"); const jiaozhun_btn = document.querySelector( "#pane-model > div > div:nth-child(2) > div.header > div > div.radio > div > label:nth-child(1) > span.q-radio__label" ); if (jiaozhun_btn && element && !vue_element) { console.log("渲染建议选择"); var Main = { data() { return { currentNumber: 1, showLoading: false, value: [], options: [ { value: "缺少信息", label: "缺少信息", children: [ { value: "缺少Payload分析", label: "缺少Payload分析", }, { value: "缺少Payload对应的攻击者意图判断", label: "缺少Payload对应的攻击者意图判断", }, { value: "缺少Payload攻击成功的判断原理", label: "缺少Payload攻击成功的判断原理", }, { value: "缺少判断报文中的Payload是否攻击成功", label: "缺少判断报文中的Payload是否攻击成功", }, { value: "缺少结论", label: "缺少结论", }, ], }, { value: "分析错误", label: "分析错误", children: [ { value: "告警介绍内容错误", label: "告警介绍内容错误", }, { value: "payload分析错误", label: "payload分析错误", }, { value: "攻击者意图分析错误", label: "攻击者意图分析错误", }, { value: "成功原理分析错误", label: "成功原理分析错误", }, { value: "报文中的Payload是否攻击成功分析错误", label: "报文中的Payload是否攻击成功分析错误", }, { value: "结论错误", label: "结论错误", }, ], }, { value: "模型问题", label: "模型问题", children: [ { value: "模型幻觉", label: "模型幻觉", }, { value: "模型异常错误", label: "模型异常错误", } ], }, { value: "其他", label: "其他", children: [ { value: "解码错误", label: "解码错误", }, { value: "计算错误", label: "计算错误", }, { value: "格式错误", label: "格式错误", }, { value: "非脆弱性类告警", label: "非脆弱性类告警", }, { value: "非业务/误报类告警", label: "非业务/误报类告警", }, { value: "非需要核实类告警", label: "非需要核实类告警", }, { value: "非情报类告警", label: "非情报类告警", }, { value: "非攻击类告警", label: "非攻击类告警", }, ], }, ], }; }, methods: { handleChange(value) { this.setSuggestion(value); }, get_suggestion() { let suggestionMarkdownEle = document.querySelector( "#pane-model > div > div:nth-child(5) > div > textarea" ); if (suggestionMarkdownEle) { let value = suggestionMarkdownEle.value; return value; } else { return ""; } }, setSuggestion(selectedValue) { const textarea = document.querySelector("#pane-model > div > div:nth-child(5) > div > textarea"); if (textarea) { console.log("textarea:", textarea); // 将选中的值转换为字符串,并用冒号分隔 const selectedText = selectedValue.join(':'); finalContent = `${this.currentNumber}. ${selectedText}\n` // 更新文本区域的值 textarea.focus(); document.execCommand('insertText', false, finalContent); // 递增编号,以便下次添加时使用 this.currentNumber++; // 可选:在控制台打印最终内容以进行调试 console.log("Final content:", finalContent); } else { console.log("没有找到textarea"); } }, }, }; var Ctor = Vue.extend(Main); new Ctor().$mount(".suggestion-select1"); } } function get_answerResultEle() { let answerResultEle = document.querySelector( '#pane-answer > div > div.ai-judgment-result > div > form > div:nth-child(1) > div > div > span' ); if (answerResultEle) { let value = answerResultEle.textContent; // 使用 textContent 获取文本内容 // console.log("answerResultEle text: ", value); return value; // 返回文本内容 } else { return ""; } } function get_jiaozhunResultEle() { let jiaozhunResultEle = document.querySelector( '#pane-model > div > div.result > form > div:nth-child(1) > div:nth-child(1) > div > span' ); if (jiaozhunResultEle) { let value = jiaozhunResultEle.textContent; // 使用 textContent 获取文本内容 // console.log("jiaozhunResultEle text: ", value); return value; // 返回文本内容 } else { return ""; } } function get_resultShenheEle() { let resultShenhe = document.querySelector( '#pane-model > div > div.result > form > div:nth-child(1) > div:nth-child(2) > div > div > label.q-radio.q-radio--small.is-checked > span.q-radio__label' ); if (resultShenhe) { let value = resultShenhe.textContent; // 使用 textContent 获取文本内容 // console.log("resultShenhe text: ", value); return value; // 返回文本内容 } else { return ""; } } function get_answerBusinessEle() { let answerBusinessEle = document.querySelector( '#pane-answer > div > div.ai-judgment-result > div > form > div:nth-child(2) > div > div > span' ); if (answerBusinessEle) { let value = answerBusinessEle.textContent; // 使用 textContent 获取文本内容 // console.log("answerResultEle text: ", value); return value; // 返回文本内容 } else { return ""; } } function get_jiaozhunBusinessEle() { let jiaozhunBusinessEle = document.querySelector( '#pane-model > div > div.result > form > div:nth-child(2) > div:nth-child(1) > div > span' ); if (jiaozhunBusinessEle) { let value = jiaozhunBusinessEle.textContent; // 使用 textContent 获取文本内容 // console.log("jiaozhunResultEle text: ", value); return value; // 返回文本内容 } else { return ""; } } function get_businessShenheEle() { let businessShenhe = document.querySelector( '#pane-model > div > div.result > form > div:nth-child(2) > div:nth-child(2) > div > div > label.q-radio.q-radio--small.is-checked > span.q-radio__label' ); if (businessShenhe) { let value = businessShenhe.textContent; // 使用 textContent 获取文本内容 // console.log("resultShenhe text: ", value); return value; // 返回文本内容 } else { return ""; } } function get_markIDEle() { let markID = document.querySelector( '#pane-model > div > div.info > div > span:nth-child(2)' ); if (markID) { let value = markID.textContent; // 使用 textContent 获取文本内容 // console.log("markID text: ", value); return value; // 返回文本内容 } else { return ""; } } function addAlert(markID) { let answerResult = get_answerResultEle(); let jiaozhunResult = get_jiaozhunResultEle(); let resultShenhe = get_resultShenheEle().trim(); // 使用 trim() 去除空格 let answerBusiness = get_answerBusinessEle(); let jiaozhunBusiness = get_jiaozhunBusinessEle(); let businessShenhe = get_businessShenheEle().trim(); // 使用 trim() 去除空格 // console.log(answerResult); // console.log(jiaozhunResult); // console.log(resultShenhe); // console.log(answerBusiness); // console.log(jiaozhunBusiness); // console.log(businessShenhe); if ((answerResult === jiaozhunResult && resultShenhe === "错误") || (answerResult !== jiaozhunResult && resultShenhe === "正确") || (answerBusiness === jiaozhunBusiness && businessShenhe === "错误") || (answerBusiness !== jiaozhunBusiness && businessShenhe === "正确")) { // console.log("2222"); if (confirm("校准攻击结果以及业务触发和标准答案不一致")) { // console.log("3333:", markID); return markID; // 只返回更新后的 strmarkID } else { console.log("用户点击了取消"); // 如果取消,则不返回或更新任何值(或者可以返回当前的 strmarkID) return markID; // 仍然返回当前的 strmarkID } } return -1 } var strmarkID = -1; var markTool = new MarkTool(); (function () { "use strict"; addElementUICSS(); markTool.run(); window.setInterval(function () { if (window.location.href.indexOf("/data-management/mark-data/list/calibrate/") != -1) { findyanpanSelectElement(); } let markID = get_markIDEle(); // console.log("now markid", markID); // console.log("old markid", strmarkID); if (markID != strmarkID) { // 调用 addAlert 并更新 strmarkID(如果需要) strmarkID = addAlert(markID); } }, 1000); })();