前幾天是雙十一,各家電商網站都推出了各種活動和現今優惠券,當時在逛 PTT 時看到了有篇文章,提供程式碼教大家用 JS 的方式搶票,看了一下後發現好像很多人好奇這是怎麼做的,於是就想說想一篇文章來講解一下。
我們先來看一下折價券的樣子。
怎麼點都不會有東西對吧?
開啟開發人員選項,選到折價券的位置。
可以看到說是因為 disable
屬性,才沒有辦法點擊
恩?所以只要取消掉就可以點擊了嗎?
當然不是這樣啊!
我們必須等時間到時候再點擊才可以!
那該怎麼做呢?
首先必須用 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 毫秒)。
由於我怕會有誤差,所以設定了每一毫秒就執行一次。
但由於時間不一定跟對方網頁時間值吻合,所以並不是一定每次都能成功。
當然這個只是秉持學術研究才做出來的,千萬別拿來亂用!!
那麼到今天也正式結束鐵人賽了,感謝大家的收看~