js脚本自动抢羽毛球场地

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

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

  1. 环境问题
    首先我们需要一个能运行油猴脚本的浏览器,电脑端比如Chrome,edge,360极速浏览器X等,手机端可以用edge,X浏览器等,然后启动TamperMonkey或暴力猴插件(有的需要下载),然后新建一个脚本,名字随便取,需要匹配相应的链接规则,可以使用通配符:
// @match       *://changguan.cuc.edu.cn/*
  1. 定时问题
    首先我们需要获得当前时间,然后将当前时间和目标时间作差,来表示需要等待的时间。当到达目标时间了,就执行相应的函数操作,否则继续等待。
// 获取当前时间
now = new Date();
targetTime = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 8, 0, 0); // 设置为当天8点0分0秒
// 计算需要等待的毫秒数
waitTime = targetTime - now;

  1. 等待过程函数
    我们需要在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);
}
  1. 跳转后操作函数
    由于油猴脚本是打开网页就会从头开始运行函数,所以当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秒。
在这里插入图片描述
大家可以把相应的页面元素换成自己学校的,然后看还需要进行什么操作,再进行修改。关于安全问题,我们只是做了一个模拟点击的操作,会比手抢快那么一点点,可能会被检测出来,所以在我们想打羽毛球的时候才用,其他时间就让给其他人吧。

  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
自动JS脚本是一种通过编程自动执行一系列操作的技术,通过精确定义的脚本来模拟人工操作,以实现自动购华为商城的商品。 首先,我们需要分析华为商城的网页结构和购流程。通过浏览器开发者工具,可以查看到网页元素的代码和交互逻辑。我们需要关注商品页面中的“立即购”按钮和购物车页面中的“提交订单”按钮。 接下来,我们可以使用JS脚本通过定时器来执行以下操作: 1. 打开华为商城的商品页面,并确保已登录账户。 2. 通过DOM操作获取“立即购”按钮的元素,并模拟点击事件。 3. 等待一段时间,以确保商品已添加到购物车。 4. 跳转到购物车页面,并通过DOM操作获取“提交订单”按钮的元素,并模拟点击事件。 5. 等待一段时间,以确保订单已提交。 需要注意的是,为了避免被识别为自动程序而被封禁,我们可以在脚本中加入一些随机的时间延迟、鼠标移动操作、人类行为模式等来模拟真实的用户操作。 然而,使用自动JS脚本存在一定的风险。网站可能会采取一些反爬虫措施,如验证码、限制访问频率等,这可能导致自动脚本的失效。此外,自动购可能违反网站的使用规则,可能会导致账户被封禁或商品被取消订单。 总的来说,自动JS脚本可以帮助我们自动化购华为商城的商品,但需要谨慎使用,遵守网站规则和法律法规,避免造成不必要的麻烦。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清洄KAKA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值