各家电商网站都推出了各种活动和现今优惠券,当时在逛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)。
但由于时间不一定跟对方网页时间值吻合,所以并不是一定每次都能成功。
当然这个只是秉持学术研究才做出来的,千万别拿来乱用!!