JS脚本自动完成正方教务系统评价教师

啊 已经是大年初一了,之前因为梯子抽风的原因,敲了很久的字全 部 木 大,后来发现这锅CF和我自己得背,合着是一直发JS Challenge造成的,原因是设置了无差别POST Challenge,于是鸽了好久没更新博客,前几天登教务的时候,本来是看一下自己有没有被退学,结果进去先要求评价才能查询,于是恶从心头起怒向胆边生(wdnmd.jpg),折腾了一晚上,折腾出一版自动填写正方教务评价教师的JS,记录在这里,希望可以启发到更多的人,欢迎交流讨论,同时大佬请轻喷~谢大佬不杀之恩

    先放上来脚本。脚本参考了Wim同学的教程  在此致谢~


alert(“Powered By IPP.仅供学习使用~”);
var iframe = window.top.document.getElementById(‘iframeautoheight’);
var ifdocument = iframe.contentWindow.document;
var subLength = ifdocument.getElementById(“pjkc”).length – 1;//评价课程选项个数
console.log(‘共%d个选项’,subLength);
ifdocument.getElementById(“TextBox1”).value = – 1;
function autoexecution()
{
var iframe = window.top.document.getElementById(‘iframeautoheight’);
var ifdocument = iframe.contentWindow.document;
var reg1 = /^DataGrid1__ctl\d+_JS\d+$/i;
var selections = ifdocument.getElementsByTagName(“select”);
var arr = [true, false];
for(var i = 0 ; i< selections.length; i++)
{
if(reg1.test(selections[i].getAttribute(“id”)))
{
if(arr[Math.floor(Math.random()*arr.length)])
selections[i].value = “A”;
else
selections[i].value = “B”;
}
}
ifdocument.getElementById(“Button1”).click();
}

autoexecution();
iframe.onload = function()
{
if(subLength — > 0)
{
console.log(“auto jumping…..”);
console.log(“少女祈祷中…..”);
autoexecution();
}
}


无视中间的某些东西xD,主要思路是把选择框的标签改动成我们需要选择的值,提交即可。所以只需要把当前页面的标签全部遍历一次,修改掉,触发按钮刷新下一个教师评教,当iframe加载的时候重新触发我们的功能实现函数即可。

使用var iframe=window.top.document.getElementById(‘iframeautoheight’);

获取iframe对象, 其中window.top 就是最顶层的window 对象。

使用 var ifdocument = iframe.contentWindow.document;

获取 iframe的document对象,其中contentWindow就是获取 iframe对象嵌套的 window对象。

使用 var subLength = ifdocument.getElementById(“pjkc”).length – 1;

获取课程的数目,执行到最后一门的时候不再循环下去。

获取所有select :  ifdocument.getElementsByTagName(“select”);

正则匹配选择框ID:var reg1 = /^DataGrid1__ctl\d+_JS\d+$/i;

这里修改了正则以匹配我校教务,我在这里坑了好久,因为我们有许多课是不止一个任课教师的,这样导致出来的选择框ID会出现JS1,JS2这种情况,本来开始以为匹配一下JS后面的数字就行了,结果试了下只能匹配掉一半,甚至有的情况根本没法匹配到,我一开始寻思这个过时的教务系统还能有啥高端操作不让我匹配不成?结果后来发现他们部分代码没区分大小写,导致部分结果是js1的形式,正则不忽略大小写是无法匹配到的(行吧,强行操作),于是改了一下顺利解决掉。

到这里页面的选择框就可以自行修改了,调用ifdocument.getElementById(“Button1”).click();方法模拟点击提交按钮即可

(然后就炸了

提示选择的全是A评价,不让提交(噔 噔 咚 ),于是暴力写了个随 机 布 尔 值

if(arr[Math.floor(Math.random()*arr.length)])
selections[i].value = “A”;
else
selections[i].value = “B”;

真香。

原脚本里面有个解除30s限制,我没发现我校的有,但是保留了,未发现影响。

于是变成了评价进去F12 ,console粘贴,坐等自动完成之后提交最终结果即可的情况,我这个大四狗只希望能够造福之后的学弟学妹萌(雾