今天水过科目二,=v= 100分~
教练让刷科三网上理论的学时,科二两小时的网上学时也就算了,科三16小时= =还要20分钟点击一次,考个驾照这么麻烦。。难道要挂个按键精灵?那我岂不是4小时不能动电脑= =
太low了,身为CS学生,当然要找直接粗暴一点=v= 伸手党请直接拉到最下方看方法~
分析
直接查看其JS代码,很容易发现stage标示的是科目几,如科三是3,科二为2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| $("#ChapterMenuDivOne1").click(function () { stage = 1; timer(); $('body').stopTime('C'); })
$("#ChapterMenuDivOne2").click(function () { stage = 2; timer(); fjTimer(); fj20(); })
$("#ChapterMenuDivOne3").click(function () { stage = 3; timer(); fjTimer(); fj20(); })
|
可以看到,科二和科三就差了stage - -
我们直接看科三的,调用了如下函数
- timer();
- fjTimer();
- fj20();
timer()函数如下:
1 2 3 4 5 6 7 8 9
| function timer() { $.get("Timer.aspx?Stage="+stage, function (d) { $("#OnlineNumberDiv").html(d); }) .error(function () { $("#OnlineNumberDiv").html("<b style='color:red'>网络故障,请刷新页面!</b>"); }) }
|
可以看出,这是个计算时间的函数,用get向服务器请求,然后 OnlineNumberDiv显示更新学时的时间,如下图
fjTimer()函数如下:
1 2 3 4 5 6 7 8 9
| function fjTimer() { if (isTimer == 0) { $('body').stopTime('A'); $('body').everyTime('60s', 'A', function () { timer(); }); isTimer = 1; } }
|
每60S刷新一次timer()
fj20()函数如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| function fj20() { $('body').stopTime('C'); $('body').oneTime('1810s', 'C', function () { $('body').stopTime('C'); fjDialog(); }); }
|
就是1810S后调用fjDialog();
fjDialog(); 如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| function fjDialog() { var html = '<p id="stopTimeTips">计时将在<b style="color:blue" id="remainTime" >加载中</b>后停止,请问是否需要继续学习?</p><br/><br/><br/>'; html += "<input type=button value=' 是(继续学习) ' onclick=\'startTimer()\' /> "; html += '<input type=button value=" 否(返回首页) " onclick="gotoIndex()" />'; bbq = new Dialog(html); bbq.show();
SysSecond = 120; $('body').stopTime('D'); $('body').everyTime('1s', 'D', function () { SetRemainTime(); });
}
|
就是弹出那个学时停止计时确认的对话框,如果120S不点击继续学习,则进行停止计时
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| function SetRemainTime() { if (SysSecond > 0) { SysSecond = SysSecond - 1; var second = Math.floor(SysSecond % 60); var minite = Math.floor((SysSecond / 60) % 60);
$("#remainTime").html(minite + "分" + second + "秒"); } else { timer(); $('body').stopTime('D'); $('body').stopTime('A'); isTimer = 0; $('body').stopTime('C'); if (stage == 2) { $("#stopTimeTips").html("<b style='color:red'>计时已于" + currentTime() + "停止,若需继续学习请点击“是”</b>"); } else { $("#stopTimeTips").html("<b style='color:red'>计时已于" + currentTime() + "停止,请点击上面的选项继续学习。</b>"); }
} }
|
效果如图
从上面的分析中得出结论,timer()函数用于计时,而它是用get方法向/Timer.aspx?Stage=3刷新计时时间的。
那么,如果我们直接向这个发送请求呢?答案是可行的,请看下面的方法
方法
打开chrome浏览器,访问科三的学习页面,按F12,打开控制台,输入如下代码,回车即可。
1 2 3 4 5
| setInterval(function(){ $.get('http://fj.17qibu.cn:8001/Timer.aspx?Stage=3', function (d) { $("#OnlineNumberDiv").html(d); }) }, 6000);
|
如图
PS:
- 这个方法并不会阻止弹窗说停止计时,但无视就好=v=,还是会继续计时的。
- 如果是科目二,那么把Stage=3改为Stage=2
- 每天只能挂4个小时,这是硬性限制= =
- 有控制台的能跑JS的浏览器就行,不一定得chrome
- 2015.11.05 update code:使得能直接在网页上显示更新的学时
可以在我的学时中查看详细学时记录,会发现还是计时的。
小结
本来是想要python 直接上模拟登陆和提交- -没想到计时的机制这么简单~