js脚本自动抢羽毛球场地 您所在的位置:网站首页 如何画羽毛球场地 js脚本自动抢羽毛球场地

js脚本自动抢羽毛球场地

2024-06-28 09:17| 来源: 网络整理| 查看: 265

基于油猴JavaScript脚本自动抢羽毛球场地——以CUC手球馆为例

我们学校只有室内的羽毛球场地,所以手球馆位置十分有限,需要每天8点整准时进入微信链接才能抢,还不一定能抢到。所以不妨写一个简单的脚本来帮助我们抢,也有助于我们锻炼身体。 在这里插入图片描述 我们可以通过微信右上角的复制网址得到相应的url,我们发现这个url会有中传统一身份认证,所以用Python做会比较麻烦,建议使用JavaScript在前端浏览器运行就会方便一些。

环境问题 首先我们需要一个能运行油猴脚本的浏览器,电脑端比如Chrome,edge,360极速浏览器X等,手机端可以用edge,X浏览器等,然后启动TamperMonkey或暴力猴插件(有的需要下载),然后新建一个脚本,名字随便取,需要匹配相应的链接规则,可以使用通配符: // @match *://changguan.cuc.edu.cn/* 定时问题 首先我们需要获得当前时间,然后将当前时间和目标时间作差,来表示需要等待的时间。当到达目标时间了,就执行相应的函数操作,否则继续等待。 // 获取当前时间 now = new Date(); targetTime = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 8, 0, 0); // 设置为当天8点0分0秒 // 计算需要等待的毫秒数 waitTime = targetTime - now; 等待过程函数 我们需要在waitTime秒之后就进入相应的链接进行抢羽毛球操作,所以需要用到setTimeout函数,但是有一个问题,究竟是直接点击元素按钮还是跳转url呢? 在这里插入图片描述 通过F12进行分析,这个按钮调用的是checkTime(‘YMQ01’,‘0’,‘002’)函数,而通过实验发现到了8点checkTime还是无法进入,所以只能用跳转链接的方式。 在这里插入图片描述 if (waitTime > 0) { // 等待指定时间 time1=setTimeout(function() { // 加载指定网址 window.location.href = "https://changguan.cuc.edu.cn/Views/Field/FieldOrderGr.html?VenueNo=002&FieldTypeNo=YMQ01"; }, waitTime); } 跳转后操作函数 由于油猴脚本是打开网页就会从头开始运行函数,所以当3步骤完成后会继续依据时间判断waitTime,由于我们需要抢的是第二天的羽毛球场地,所以需要点击相应元素。 在这里插入图片描述 通过F12可以看到相应元素对应的是getDateData(‘1’)函数,我们直接运行这个函数就可以获得第二天的数据了。 在这里插入图片描述 由于这个getDateData(‘1’)函数调用之后有点卡,我怀疑需要向网络发送请求,而且有很大延时,所以通过F12的网络可以分析出延时大概平均为500毫秒左右。 在这里插入图片描述 所以我们需要等待至少700ms之后才能得到新的数据,才能进行点击操作。

检查是否有空场地 我们需要找到包含可用数的元素,一种是可用数:*,另外一种就是预定已满,但是这里的span只有class属性,没有id,所以需要用到querySelectorAll函数,按照".class名称"来索引。在这里插入图片描述 querySelectorAll返回的是一个数组,我们需要对数组中每一个元素遍历查找span元素的innerText是否包含“可用”两字,同时在for循环中,我们想要倒序先抢最晚的羽毛球场地,用i--操作。

点击提交 首先选中相应的时间段场地,触发onclick事件,可以选择上面的class:col-style,也可以通过getElementById来实现,不过通过源码分析这里的id名会根据当前时间而改变id名称,上午打开网页第一个按钮就是“li上午0”,下午打开网页第一个按钮就是“li下午0”,等等。 在这里插入图片描述 确定预定按钮对应的函数就是comfirmsubmit(),可以直接调用,最后还有确定验证框: 在这里插入图片描述 确定验证框使用的是weui_btn_dialog primary,是很多微信网页都会用到的验证框。 在这里插入图片描述 href="javascript:;"表示用空的js代码替换默认链接,绑定一个隐藏的事件回调,来执行业务,我们需要通过$('.weui_btn_dialog.primary')的方式找到对应的隐藏变量,通过触发器trigger来触发click事件,成功后退出循环break。

else{ getDateData('1'); time2=setTimeout(function() { var elements = document.querySelectorAll('.textsize'); for (var i = elements.length-1; i >= 0; i--) { if (elements[i].innerText.includes('可用')) { document.querySelectorAll('.col-style')[i].onclick(); //document.getElementById("li上午0").onclick(); comfirmsubmit(); $('.weui_btn_dialog.primary').trigger('click'); break; } else { continue; } } }, 700); }

这样就顺利地预定了羽毛球馆,只不过我们需要在8点之前打开场地类别选择的网页,之后到时间就能自动抢到CUC手球馆了,亲测订单时间显示为8点0分0秒或1秒。 在这里插入图片描述 大家可以把相应的页面元素换成自己学校的,然后看还需要进行什么操作,再进行修改。关于安全问题,我们只是做了一个模拟点击的操作,会比手抢快那么一点点,可能会被检测出来,所以在我们想打羽毛球的时候才用,其他时间就让给其他人吧。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有