JS 实现正方教务系统一键评教
JS 实现正方教务系统一键评教烦透的正方,非得找麻烦。
忽然想到一位破解界长辈说过的,许多时候,破解是为了抵抗那些废物商品司理规划的废物需求,如今深有同感
评教有什么用?集体评这个教师欠好就能不给他教了吗?不,还是相同,该如何就如何,存在的仅有理由,即是为了给领导看
初衷
本教程并不是为了破解而破解,朴实归于最近心境欠好,正方恰巧撞枪口罢了,曾经直接运用火狐评教,直接运用 tab 键切换到下一个下拉框,能够节约许多时刻,而且不简单被查出来,而最近挺烦躁的,所以也不想再这么搞下去了,故编写了一个脚本用于一键评教
原理
本来有两种办法:第一种即是改包发包到服务器,直接越过正方的评教界面,可是简单被查出来,而且数据包修正欠好修正,一个欠好简单被发现,而且不适合零根底的人群运用,故暂且不提
第二种便是模仿人为操作的进程,原理本来很简单,稍微剖析一下,评教需要做的,即是修正下拉框的值,然后点击一个按钮,循环这个进程,直到所有的课程评教完结即可,那么首先要处理的是评教次数的疑问,在正方的评教体系中有一个下拉框是用于显现评教触及的课程的,包含了评教的和未评教的,故而能够运用 JS 脚本直接获取这个下拉框的下拉选项数,作为循环次数,也即是:
var li = document.querySelectorAll("ul.nav>li.top").querySelectorAll("ul.sub>li").length;
这句句子即是获取循环次数,也即是课程数的,每次循环的时分将 li 减一即可接下来是获取评教中每个课程的所有的下拉框,本来认为会是 AJAX,那样就比较复杂了,没想到是 iframe 窗体,简单多了,只需要编写一套运用每个课程评教界面的 DOM 操作就行了,直接上代码好了
// 获取课程所有的下拉框
var selects = iframe.contentDocument.querySelectorAll('table.datelist>tbody>tr>td>select');
// 将下拉框的 Index 全部置为 1 也就是评价为 B
for (var i = 0; i < selects.length; i++) {
// 索引为 1 表示为 B,可选值为:0: A,1: B,2: C,3: D...具体看教务系统给多少个等级
selects.selectedIndex = 1
}
// 取一个随机数 index,第 index 个下拉框评价等级修改为 C,避免全部选项相同无法提交
var index = Math.round(Math.random() * (selects.length - 1));
selects.selectedIndex = 2;
// 写评语,可以改为使用随机值的,我比较懒就使用了固定的
iframe.contentDocument.getElementById("pjxx").value = '老师很认真负责';
// 模拟点击保存按钮
iframe.contentDocument.getElementById("Button1").click();
完整的代码
// 获取相关资源
var iframe = document.querySelector('iframe');
// 总共需要评教的课程数
var li = document.querySelectorAll("ul.nav>li.top").querySelectorAll("ul.sub>li").length;
// 信号量/许可证
status = false;
// 评教函数定义
function pj() {
// 判断是否正在执行评教脚本,是则退出,因为重复执行有可能会出 BUG,有的课程评教不全,也就是只修改了部分下拉框,就被提交了
if (status) {
// 结束脚本
return;
}
// 修改标志位,相当于多线程许可证,或者是信号量一般,让脚步互斥执行
status = true;
// 判断是否需要评教,不需要则弹出提示框表示评教完成
if (li == 0) {
iframe.setAttribute('onload', "javascript:dyniframesize('iframeautoheight');");
// 模拟点击提交按钮
iframe.contentDocument.getElementById("Button2").click();
// 提示完成评教
alert("done");
// 结束脚本
return;
}
// 获取课程所有的下拉框
var selects = iframe.contentDocument.querySelectorAll('table.datelist>tbody>tr>td>select');
// 将下拉框的 Index 全部置为 1 也就是评价为 B
for (var i = 0; i < selects.length; i++) {
// 索引为 1 表示为 B,可选值为:0: A,1: B,2: C,3: D...具体看教务系统给多少个等级
selects.selectedIndex = 1
}
// 取一个随机数 index,第 index 个下拉框评价等级修改为 C,避免全部选项相同无法提交
var index = Math.round(Math.random() * (selects.length - 1));
// 修改下拉框,避免所有下拉框的值都相同导致无法保存
selects.selectedIndex = 2;
// 写评语,可以改为使用随机值的,我比较懒就使用了固定的
iframe.contentDocument.getElementById("pjxx").value = '老师很认真负责';
// 模拟点击保存按钮
iframe.contentDocument.getElementById("Button1").click();
// 循环变量 -1
--li;
// 设置脚本运行结束,可以再次执行脚本
status = false;
}
iframe.setAttribute('onload', "javascript:dyniframesize('iframeautoheight'); pj();");
// 开始评教
pj();
直接翻开控制台(按 F12 或许点击开发者东西,挑选控制台),将完好代码粘贴进入,点击执行即可,Chrome 下测验成功,期待反馈 BUG,现在已知的 BUG 如下:
假如评教过程犯错,仍是会持续执行,短少检错机制,但是呈现错误的状况极少,故不持续增加检错机制,防止代码过于臃肿
评语每次都相同,简单被查出来,能够使用随机语录,制造中…
页:
[1]