iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 30
0
自我挑戰組

學JS的心路歷程系列 第 30

學JS的心路歷程 Day30 - JS 應用 - 搶優惠券

前幾天是雙十一,各家電商網站都推出了各種活動和現今優惠券,當時在逛 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 毫秒)。

由於我怕會有誤差,所以設定了每一毫秒就執行一次。

但由於時間不一定跟對方網頁時間值吻合,所以並不是一定每次都能成功。

當然這個只是秉持學術研究才做出來的,千萬別拿來亂用!!

那麼到今天也正式結束鐵人賽了,感謝大家的收看~


上一篇
學JS的心路歷程 Day29 - PixiJS - 基礎(三)
系列文
學JS的心路歷程30

尚未有邦友留言

立即登入留言