之前学校又搞起了评教,觉得每次评教都要鼠标点老半天
实在是不爽,于是想着自己写个快速评教脚本,顺便练习一下久违的 javascript
于是动手,用 chrome 在线调试功能来写
之前只是稍微见过别人调试,没有自己深究过这玩意
现在发现 chrome 的 console 还真是挺强大的一个工具
直接按 F12,然后切换到 console 选项卡就可以呼出控制台
于是下意识来个 “hello world”,哈哈
这个控制台其实就是一个调试 javascript 的控制台
可以用它来交互式的编写 js 脚本,输入一句就执行一句
直接在上面输入 alert(“xxx”),然后回车。接着就会像之前编写 js 一样弹出 xxx 警告消息
上面用到的 console 对象是 chrome 独有的一个对象。
咱常用到他的 log 方法来实现在控制台记录日志,就像其他语言中的 print 函数一样的
chrome 的控制台就说到这里,接下进入正题。
在进入正方教务系统后,我想像之前一样用 dom 内置对象直接获取页面中的下拉菜单
但却弄半天发现获取不到,于是我就奇了怪了,开始怀疑是不是有什么代码能够干扰 DOM 操作
经过反复的测试,终于发现,原来那个表单是在 iframe 内的,从 iframe 那里开始就无法进一步获取到 iframe 内的对象了
用 Google 查了查,才知道,原来 iframe 内的元素相当于重新多了一层 DOM 模型,用我的理解图来解释的话是这样的
所以,要获取 iframe 内的元素的话,必须先获取 iframe,具体代码如下1
2var iframe = document.getElementById('iframeautoheight');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
接着就可以进行 DOM 操作了1
var selects = innerDoc.getElementsByTagName('select');
接着只需要再筛选出 ID 中包含 “DataGrid__” 打头的元素,就能获取到所有的评分下拉列表了1
2
3
4
5
6
7
8var scorelist = [];
// 找到下拉菜单列表
for (var i = 0; i < selects.length; i++) {
if (selects[i].id.indexOf("DataGrid1__") > -1) {
scorelist.push(selects[i]);
}
}
最后,由于评教不能够所有的评分都是一致的,要选出其中一个来改一改,于是用上 random 函数随机产生一个值1
var rid = Math.floor(Math.random()*scorelist.length);
把这个值设成对应的分数即可1
2
3
4
5if (i == rid) {
if (tempValue == '4(良好)') {
ops[j].selected = true;
}
}
其实也可以参考 KK 的做法,直接设置 select 元素的 value 值。提交的时候的数据都是一样的(佩服 KK,揣摩的太透彻)
程序源码已提交至 GitHub