一年一度的光棍節又快到了,天貓早已迫不及待放出雙11優惠券認領頁面,用戶可以在該頁面領取心怡店家的優惠券,不過存在手慢會被搶完的情況。
然后是在群里看到了這樣的一段代碼,說是把它粘貼到控制面板上執行就能自動幫你領掉頁面上的優惠券,我瞧了下沒有啥漏洞代碼段就試了試,好家伙還真的生效了:
(function(window, document, undefined) { var interval = 800; var closeDelay = 200; var index = 0; var couponLinks; var getCoupon = function() { if (index >= couponLinks.length) { console.log("領取完畢"); return; } var coponLink = couponLinks[index]; coponLink.click(); index++; console.log("領取 第" + index + " 張"); setTimeout(getCoupon, interval); setTimeout(function() { var close = document.querySelector('.mui-dialog-close'); if (close != null) close.click(); }, closeDelay); }; var _scrollTop = 0; var _scrollStep = document.documentElement.clientHeight; var _maxScrollTop = document.body.clientHeight - document.documentElement.clientHeight; var autoScrollDown = setInterval(function() { _scrollTop += _scrollStep; if (_scrollTop > _maxScrollTop) { clearInterval(autoScrollDown); couponLinks = document.querySelectorAll('.mui-act-item-yhqbtn'); console.log("總共:" + couponLinks.length + "條張優惠券待領取..."); getCoupon(); } else { document.body.scrollTop = _scrollTop; } }, 500); }) (window, document);
如上圖所示,腳本會先每500毫秒就分屏滾動下頁面,讓頁面的懶加載都生效並加載出所有可領取優惠券的區域,這里對應的是 autoScrollDown 方法:
var autoScrollDown = setInterval(function () { _scrollTop += _scrollStep; if (_scrollTop > _maxScrollTop) { //到底了就找出全部領取按鈕 clearInterval(autoScrollDown); couponLinks = document.querySelectorAll('.mui-act-item-yhqbtn'); console.log("總共:" + couponLinks.length + "條張優惠券待領取..."); getCoupon(); } else { document.body.scrollTop = _scrollTop; //還沒到底就滾屏 } }, 500);
然后是通過 getCoupon 方法來遍歷上述獲得的全部領券按鈕,並做點擊觸發:
var getCoupon = function() { if (index >= couponLinks.length) { //領完了就不再執行定時器了 console.log("領取完畢"); return; } var coponLink = couponLinks[index]; coponLink.click(); index++; //遍歷優惠券按鈕並觸發點擊事件 console.log("領取 第" + index + " 張"); setTimeout(getCoupon, interval); setTimeout(function() { //200毫秒后觸發關閉按鈕 var close = document.querySelector('.mui-dialog-close'); if (close != null) close.click(); }, closeDelay); };
這位機智的作者在點擊領券的200毫秒之后也點擊了提示浮層的關閉按鈕:
然后繼續調用 getCoupon 來點擊剩余的優惠券領取按鈕,直到領完為止。
這位程序猿的機智真是可歌可泣,一個頁面的優惠券每次訪問的時候我們都可以調用這段代碼輕松地遍歷一次領取,然后再刷新頁面,再調用腳本再領一遍,然后再刷新頁面。。。。
。。。咦不對,機智的程序猿可是不會允許需要手動去刷新頁面的事情發生的!
於是我把它封裝到 chrome 插件中(點我下載)。
解壓后在 chrome://extensions/ 的左上角點擊“加載已解壓的擴展程序”按鈕,然后選擇解壓后的文件夾即可:
這時候我們再訪問領券頁面,就不單單是自動領券了,在領完之后還會自動刷新頁面!
好了,該玩的都玩了,那么這算不算天貓的一個bug呢?
我覺得應該不算,常規敏感操作,大公司都會做防刷機制處理(用戶的請求間隔不允許小於X秒),但在領券這塊淘寶沒搞這塊功能,相信淘寶也沒太操心這塊(仔細想想也沒啥敏感數據,但有些優惠券是限量的,用工具刷的確有黃牛嫌疑,吃虧了其他用戶)。
二來其實頁面上所展示優惠券對應的店家或產品,不一定能找到一個你喜歡、想購買的東西,如果因為拿到優惠券就硬生生去購買東西,那是你被淘寶玩了~
三來用戶的優惠券其實是有上限的,我掛了一下午刷到了 255 張優惠券,再刷就會提示上限已滿不能再領取,這其實也是一種變相防刷的策略(不過真心沒找到幾張心怡產品的優惠券。。。)
雖然通過插件搶券對於悶宅類的程序猿們來說可能然並卵,不過這種手法自然可以運用到其它的活動上,舉一反三,一來方便自己干事,二來自己做產品的時候也會在腦海里想一下自己的產品是否經得起技術用戶這么刷~
共勉~