——本文为博主原创,转载请注明出处
声明:本文为博主脚本编写的练手心得,一定程度上破坏了我校场地预定的公平性,在未经作者允许情况下请勿传播
虽然综体、气膜馆、西体有很多的羽毛球场,然我清贵为体校,一直以来都一场难求,往往开始预约30秒后除了6点半的场次就都没有了。于是作为手残的程序员,笔者决定发挥自己的主观能动性嘿嘿嘿:)
首先,我打开了预约场地的网页,然后就发现了一件非常重要的事情!它的url是这样的
http://50.tsinghua.edu.cn/gymbook/gymBookAction.do?ms=viewGymBook&gymnasium_id=3998000&item_id=4045681&time_date=2016-12-03&userType=
里面居然有预定日期、场馆、场地!果然天下码农是一家,还是同行好!于是我们就可以根据设置这三个参数,任意的直接访问特定的预约网页。
于是就坚定了我写脚本抢场地的信念:)
然后我通过chrome F12大法找到了源码里的几个关键函数,调用selectFieldTime(obj)就可以直接选中预约表格中的obj单元格,点击预约按钮的时候触发的是saveOdder()函数,确认预约信息并选择支付方式的函数式changeSelected()。
那么现在就是万事俱备只欠东风了。
具体步骤
首先,在浏览器中创建一个书签栏的书签,修改书签,把书签地址改为下面的代码,并保存(按照需要自行修改)当然你也可以选择在浏览器的console里直接复制粘贴运行脚本代码。
javascript: selectFieldTime(document.getElementById("overlayView").contentWindow.document.getElementById(‘resourceTable‘).rows[1].cells[2]); saveOdder(); changeSelected(); void(0);
上述代码中的rows[n]表示预定表格的第n行,cells[n]表示第n格(下标从0开始),比如我的代码只单选第1行第2格,需要多选单元格就复制粘贴一下selectFieldTime函数的调用,更改rows和cells的下标即可。
像这样
点击保存
然后就可以进入页面,登录到预约网站后,新建标签页在浏览器地址栏输入以下网址(根据需要自行修改)
其中的time_date=后的日期改成你要预定的日期,这是气膜馆羽毛球场的预定地址,综体、西体或者其他场地类型的地址自行到网页中获取,就是进入预约该场地的页面(日期无所谓),把网页的地址复制下来,修改预定日期即可,再粘贴上去就行了,如果没开始预定网页会提示你预定还没开始,如果已经开始预定,则会出现下图的表格
然后就是在预约开始的时候,刷新页面等页面显示完毕(页面中显示上述表格),直接点击你创建的脚本书签(考虑到网络问题,以及不想做得太傻瓜化以免更严重地破坏预约的公平性,没有采用计时器循环,这里用手动的方式)
如果成功了会显示两个框,一个是选择支付方式,一个是确认支付,在选择支付方式的框点击取消(因为脚本已经帮你调用了changeSelected()函数,当然你想要现场支付也可以用dom操作在脚本调用changeSelected()函数之前更改一下支付方式的选项),然后在另一个框输入订场的信息,点击直接or稍后支付,之后就可以在订单中看到你刚才抢到的场地了。
同时建议先提前在网页上试一试(第二天6:30的场次基本都会有剩余的,可以用来测试)
三花
2016-11-30