一個(gè)簡(jiǎn)易的自動(dòng)搶購腳本

兩年前的中秋節(jié),阿里巴巴四個(gè)程序員編寫了段網(wǎng)頁腳本,搶了公司一百多盒月餅而慘遭辭退。有人說阿里小題大做,有人說誠(chéng)信第一,那時(shí)我在想他們是如何做到的呢?上個(gè)月,二組群里討論P(yáng)ython編程,我忽然想起了搶月餅事件。問了一圈群里沒人做過,董書云戰(zhàn)友鼓勵(lì)我:想做就去學(xué),一定可以學(xué)會(huì)的。一拖再拖,這周終于開啟了學(xué)習(xí)。

搜索發(fā)現(xiàn)網(wǎng)絡(luò)上已經(jīng)有不少解決方法,但思路基本一致:利用瀏覽器插件實(shí)現(xiàn)代碼注入。瀏覽器編程語言為JavaScript(JS),與我熟悉的C語言相差挺大,在Kindle下載了三本相關(guān)的書,快速了解了JS的基本規(guī)則。按照網(wǎng)絡(luò)教程,學(xué)會(huì)了谷歌(Chrome)瀏覽器簡(jiǎn)單擴(kuò)展程序的開發(fā)。這樣就掌握了編寫自動(dòng)搶購腳本的最少必要知識(shí)。然后,最好的辦法就是行動(dòng)起來,去做,去犯錯(cuò)吧。

我這次要寫的這個(gè)腳本其實(shí)很簡(jiǎn)單,就是讓程序自動(dòng)點(diǎn)擊搶購頁面上的按鈕,開發(fā)步驟如下。

1.設(shè)置一個(gè)搶購頁面

第一步是做一個(gè)搶購頁面,供腳本使用。代碼如下圖所示,將其保存為html文件。


搶購頁面html代碼

頁面顯示十分簡(jiǎn)陋,最重要的是設(shè)置的“點(diǎn)我搶購”按鈕。


搶購頁面

正常情況下,用戶通過點(diǎn)擊按鈕參與到購買活動(dòng),拼的是手速。很多時(shí)候,我們并不知道也許自己競(jìng)爭(zhēng)的對(duì)手是機(jī)器。利用腳本在滿足條件的一瞬間(到預(yù)定時(shí)間等)迅速出擊,制造出秒殺、秒光的場(chǎng)景。

2.寫一個(gè)自動(dòng)觸發(fā)程序

開發(fā)一個(gè)簡(jiǎn)單的谷歌瀏覽器擴(kuò)展程序,配置如下圖所示,將其保存為manifest.json文件。


谷歌瀏覽器擴(kuò)展程序配置

最核心的部分是編寫與其配套的JS文件,但代碼十分簡(jiǎn)單:

setInterval(function(){document.getElementById("rush").click()}, 1000)

作用是開啟一個(gè)定時(shí)1秒的定時(shí)器,在定時(shí)到的時(shí)候就點(diǎn)擊網(wǎng)頁上Id為"rush"的按鈕,也就是1秒自動(dòng)點(diǎn)一次搶購按鈕。在準(zhǔn)備好這兩個(gè)文件后,打開Chrome,在菜單欄找到擴(kuò)展程序選項(xiàng),點(diǎn)擊進(jìn)入擴(kuò)展程序管理界面,選擇存放這兩個(gè)文件的文件夾,即可添加剛開發(fā)的擴(kuò)展程序。

打開html文件,不做任何操作,瀏覽器就會(huì)彈出搶購成功的提示,也就是腳本已經(jīng)順利運(yùn)轉(zhuǎn),幫我自動(dòng)完成了搶購。


搶購成功了

3.場(chǎng)景擴(kuò)展

為了測(cè)試這個(gè)腳本對(duì)真實(shí)網(wǎng)頁的效果,隨便打開了瀏覽器收藏夾中的一個(gè)網(wǎng)址,瞄準(zhǔn)了該頁面上的“搜索”按鈕,目標(biāo)是通過腳本自動(dòng)實(shí)現(xiàn)對(duì)該按鈕的點(diǎn)擊。通過查看網(wǎng)頁源代碼找到了該按鈕的Id,修改相應(yīng)的腳本代碼。重新添加擴(kuò)展程序,刷新網(wǎng)頁,預(yù)想的情況發(fā)生了,“搜索”按鈕被點(diǎn)擊,打開了一個(gè)搜索頁面。意想不到的事情也發(fā)生了,自動(dòng)打開的頁面越來越多,甚至來不及關(guān)閉原網(wǎng)頁,不得已只得關(guān)閉整個(gè)瀏覽器。


充分證明了一句話:不作死就不會(huì)死

這個(gè)腳本初步實(shí)現(xiàn)了自動(dòng)搶購的功能,為了能夠滿足實(shí)際應(yīng)用,還需要根據(jù)具體情況進(jìn)行改進(jìn),比如監(jiān)測(cè)到按鈕的狀態(tài)從不可用到可用時(shí)發(fā)起點(diǎn)擊,或者在預(yù)定時(shí)間點(diǎn)發(fā)起點(diǎn)擊,或者自動(dòng)填寫網(wǎng)頁的表格等。

說實(shí)話,這個(gè)小腳本對(duì)于互聯(lián)網(wǎng)開發(fā)者根本不值一提,但對(duì)于只與盒子打交道的嵌入式程序員來說,卻仿佛看到了代碼世界的另一個(gè)維度。區(qū)塊鏈開發(fā)者嘲笑互聯(lián)網(wǎng)開發(fā)者為古典程序員,這么說我肯定算是一個(gè)遠(yuǎn)古程序員了。遠(yuǎn)古不可怕,但如果不懂進(jìn)化,或許想離滅亡就不久遠(yuǎn)了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容