学JS的心路历程 - JS应用

时间:2023-03-09 15:37:38
学JS的心路历程 - JS应用

各家电商网站都推出了各种活动和现今优惠券,当时在逛PTT时看到了有篇文章,提供代码教大家用JS的方式抢票,看了一下后发现好像很多人好奇这是怎么做的,于是就想说想一篇文章来讲解一下。

我们先来看一下折价券的样子。

怎么点都不会有东西对吧?

开启开发人员选项,选到折价券的位置。

可以看到说是因为disable属性,才没有办法点击(leafor)

恩?所以只要取消掉就可以点击了吗?

当然不是这样啊!

我们必须等时间到时候再点击才可以!

那该怎么做呢?

首先必须用JS抓到折价券的DOM元素:

const coupon_list = document.getElementsByClassName(“coupon-list”);

const coupon_250 = coupon_list[0].children[2];

console.log(coupon_250);

再来,我们得设定时间到时执行按下按钮的动作,在JS中时间都是以世界标准时间(UTC)时间计算的,也就是从1970年1月1日开始的毫秒数值来储存时间。

当然可以透过JS的Date()方法转换,但是我这个人比较懒惰,找了个可以直接帮我转的网页。

const coupon_list = document.getElementsByClassName(“coupon-list”);

const coupon_250 = coupon_list[0].children[2];

const endTime = 1541836800 * 1000;

alert ={};

由于网页转出来的是UNIX时间,需要乘上1000才会是JS的时间值。

顺便关闭了弹跳视窗的提醒,不然网页会很难关闭。

接着我们用setInterval()计时,当现在时间-开始抢购时间<= 0时候,再利用setInterval()对折价券的按钮下达按下的指令:

setInterval(waitTime,1)

function waitTime(){

let now = Date.now();

let spanTime = endTime - now;

console.log('剩余时间:',spanTime);

if(spanTime <= 0){

coupon_250.disabled = false;

setInterval(()=>{

console.log(“click”);

coupon_250.click();

},10)

}

}

这样就可以顺利执行了,setInterval(waitTime,10)后面的数字是多少毫秒执行一次(1秒=1000毫秒)。

由于我怕会有误差,所以设定了每一毫秒就执行一次(zflwx)。

但由于时间不一定跟对方网页时间值吻合,所以并不是一定每次都能成功。

当然这个只是秉持学术研究才做出来的,千万别拿来乱用!!