首页 > 网站开发 > JavaScript >
-
JavaScript教程之一个基于chrome扩展的自动答题器(5)
逻辑很简单,
1 遍历所有题目标签
2 {
3 找到题干;
4 在题库中匹配题干;
5 如果未匹配到
6 {
7 就用alert弹出提示
8 错题标记+1
9 }
10 如果匹配到
11 {
12 获取所有选项并进行遍历
13 {
14 如果是单选并且选项等于该题目的答案
15 {
16 选中该选项;
17 continu;
18 }
19 如果是多选并且选项在该题目的答案中
20 {
21 选中该选项;
22 }
23 }
24 }
25 }
26 如果没有错误标记则自动交卷;
以上,就是整个答题器中最重要的popup,content 和 inject 中的js代码。
5、几个功能迭代。
从4月份期,为增加作弊难度,考试系统在每天都会增加几道新题。根据观察,是20道题中,在基础题库中抽取18道,在当日新题中抽取2道。
当时的对策是每天更新一次答题器,为了便于答题,答题器的所有用户每天都需要重新下载更新答题器。(群成员数暴涨)
5月13日,我重写了自定义新题的功能,可以批量添加多个新题。这样每天我只需要更新新题字符串,答题器用户将新题字符串导入答题器即可。
5月14日,在重新学了了小茗同学教程之后,实现了在线更新的功能。自定义新题字符串仅仅使用了两天便被淘汰。
服务器端代码:
1 <?php
2
3 //当前版本号
4 $_v='060303';
5
6 //当前新题字符串
7 $date='
8 十九大报告指出,要建立全面规范透明、标准科学、约束有力的预算制度,全面实施()。
9 绩效管理
10 党组的设立,一般应当由()或者本级党的地方委员会审批。党组不得审批设立党组。
11 党的中央委员会
12 ';
13
14 //客户端版本号
15 $v=$_GET['v'];
16
17 //版本号不一致的话,就反馈更新数据
18 if($v<>$_v)
19 //echo '{"date_varsion":"'.$_v.'","update":"'.$date.'"}';
20 {
21 echo '//'.$_v;
22 echo $date;
23
24 }
25 ?>
服务器端代码很简单,答题器将当前版本号发送至服务器,如果版本号一致则服务器返回空白页,如果不一致则返回新题数据。
数据的第一行是当前数据版本,后面则是题目/答案。依托于重写的自定义新题功能,自动更新非常顺利的实现了。
4月20日,经确认,考试系统加入了防作弊功能,原理是当鼠标点击“上一题”“下一题”或者题号时执行函数ClickButton,保存当前鼠标坐标,在交卷时同时传给服务器。
一开始我考虑的伪造回传数据,但数据经过了一点简单的计算,实在懒得跟他算计,
然后考虑的伪造下一题按钮的点击事件,但通过脚本触发的点击事件没有鼠标坐标信息,
最后忽然发现,我只要每次题目切换时,伪造一个事件(Event)作为参数传给反作弊的模块即可
var posx=Math.floor(800+Math.random()*200);
var posy=Math.floor(400+Math.random()*140);
ClickButton({'button':0,'clientX':Math.floor(posx+Math.random()*50),'clientY':Math.floor(posy+Math.random()*15)});
6、写在最后
这个答题器功能实用,逻辑清晰,难度不算大,非常适合chrome扩展的学习和练手。
当前,本次竞赛的线上部分已经结束,经历了几个月的学习和使用,我也收获的4个微信群,所有群内用户近2000人。最高安装量6000,最高惠及党员80000余人(一人一块钱我就发了!)
最后,还是感谢小茗同学的教程。
以上!