各家电商网站都推出了各种活动和现今优惠券,当时在逛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)。

 

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

 

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