La la, la la la... Hush, don’t speak When you spit your venom, keep it shut I hate it When you hiss and preach About your new messiah ’cause your theories catch fire I can’t find those silver linings I don’t mean to judge But when you read your speech, it’s tiring Enough is enough I’m covering my ears like a kid When your words mean nothing, I go la la la I’m turning off the volume when you speak Cause if my heart can’t stop it, I find a way to block it I go La la, la la la... La la, la la la... I find a way to block it I go La la, la la la... La la, la la la... Yes our love is running out of time I won’t count the hours, rather be a coward When our words collide I’m gonna drown you out before I lose my mind I can’t find those silver linings I don’t mean to judge But when you read your speech, it’s tiring Enough is enough I’m covering my ears like a kid When your words mean nothing, I go la la la I’m turning off the volume when you speak Cause if my heart can’t stop it, I find a way to block it I go La la la la la... La la la la la... I find a way to block it I go La la la la la... La la la la la... I find a way to block you, oh La la la la la... La la la la la... I find a way to block it I go La la la la la... La la la la la... I’m covering my ears like a kid When your words mean nothing, I go la la la I’m turning off the volume when you speak Cause if my heart can’t stop it, I find a way to block it I go I’m covering my ears like a kid When your words mean nothing, I go la la la I’m turning off the volume when you speak Cause if my heart can’t stop it, I find a way to block it I go La la la la la... La la la la la... La la la la la...

之前学校又搞起了评教,觉得每次评教都要鼠标点老半天

实在是不爽,于是想着自己写个快速评教脚本,顺便练习一下久违的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,具体代码如下

var iframe = document.getElementById('iframeautoheight');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;

接着就可以进行DOM操作了

var selects = innerDoc.getElementsByTagName('select');

接着只需要再筛选出ID中包含"DataGrid__"打头的元素,就能获取到所有的评分下拉列表了

var scorelist = [];

// 找到下拉菜单列表
for (var i = 0; i < selects.length; i++) {
    if (selects[i].id.indexOf("DataGrid1__") > -1) {
        scorelist.push(selects[i]);
    }
}

最后,由于评教不能够所有的评分都是一致的,要选出其中一个来改一改,于是用上random函数随机产生一个值

var rid = Math.floor(Math.random()*scorelist.length);

把这个值设成对应的分数即可

if (i == rid) {
      if (tempValue == '4(良好)') {
            ops[j].selected = true;
      }
}

其实也可以参考KK的做法,直接设置select元素的value值。提交的时候的数据都是一样的(佩服KK,揣摩的太透彻)



程序源码已提交至GitHub