兩年前的中秋節(jié)丈探,阿里巴巴四個程序員編寫了段網頁腳本层亿,搶了公司一百多盒月餅而慘遭辭退桦卒。有人說阿里小題大做,有人說誠信第一匿又,那時我在想他們是如何做到的呢方灾?上個月,二組群里討論Python編程碌更,我忽然想起了搶月餅事件裕偿。問了一圈群里沒人做過,董書云戰(zhàn)友鼓勵我:想做就去學痛单,一定可以學會的嘿棘。一拖再拖,這周終于開啟了學習旭绒。
搜索發(fā)現(xiàn)網絡上已經有不少解決方法鸟妙,但思路基本一致:利用瀏覽器插件實現(xiàn)代碼注入。瀏覽器編程語言為JavaScript(JS)挥吵,與我熟悉的C語言相差挺大重父,在Kindle下載了三本相關的書,快速了解了JS的基本規(guī)則忽匈。按照網絡教程房午,學會了谷歌(Chrome)瀏覽器簡單擴展程序的開發(fā)。這樣就掌握了編寫自動搶購腳本的最少必要知識脉幢。然后歪沃,最好的辦法就是行動起來,去做嫌松,去犯錯吧沪曙。
我這次要寫的這個腳本其實很簡單,就是讓程序自動點擊搶購頁面上的按鈕萎羔,開發(fā)步驟如下液走。
1.設置一個搶購頁面
第一步是做一個搶購頁面,供腳本使用贾陷。代碼如下圖所示缘眶,將其保存為html文件。
頁面顯示十分簡陋髓废,最重要的是設置的“點我搶購”按鈕巷懈。
正常情況下,用戶通過點擊按鈕參與到購買活動慌洪,拼的是手速顶燕。很多時候凑保,我們并不知道也許自己競爭的對手是機器。利用腳本在滿足條件的一瞬間(到預定時間等)迅速出擊涌攻,制造出秒殺欧引、秒光的場景。
2.寫一個自動觸發(fā)程序
開發(fā)一個簡單的谷歌瀏覽器擴展程序恳谎,配置如下圖所示芝此,將其保存為manifest.json文件。
最核心的部分是編寫與其配套的JS文件因痛,但代碼十分簡單:
setInterval(function(){document.getElementById("rush").click()}, 1000)
作用是開啟一個定時1秒的定時器婚苹,在定時到的時候就點擊網頁上Id為"rush"的按鈕,也就是1秒自動點一次搶購按鈕鸵膏。在準備好這兩個文件后租副,打開Chrome,在菜單欄找到擴展程序選項较性,點擊進入擴展程序管理界面,選擇存放這兩個文件的文件夾结胀,即可添加剛開發(fā)的擴展程序赞咙。
打開html文件,不做任何操作糟港,瀏覽器就會彈出搶購成功的提示攀操,也就是腳本已經順利運轉,幫我自動完成了搶購秸抚。
3.場景擴展
為了測試這個腳本對真實網頁的效果速和,隨便打開了瀏覽器收藏夾中的一個網址,瞄準了該頁面上的“搜索”按鈕剥汤,目標是通過腳本自動實現(xiàn)對該按鈕的點擊颠放。通過查看網頁源代碼找到了該按鈕的Id,修改相應的腳本代碼吭敢。重新添加擴展程序碰凶,刷新網頁,預想的情況發(fā)生了鹿驼,“搜索”按鈕被點擊欲低,打開了一個搜索頁面。意想不到的事情也發(fā)生了畜晰,自動打開的頁面越來越多砾莱,甚至來不及關閉原網頁,不得已只得關閉整個瀏覽器凄鼻。
這個腳本初步實現(xiàn)了自動搶購的功能腊瑟,為了能夠滿足實際應用聚假,還需要根據(jù)具體情況進行改進,比如監(jiān)測到按鈕的狀態(tài)從不可用到可用時發(fā)起點擊扫步,或者在預定時間點發(fā)起點擊魔策,或者自動填寫網頁的表格等。
說實話河胎,這個小腳本對于互聯(lián)網開發(fā)者根本不值一提闯袒,但對于只與盒子打交道的嵌入式程序員來說,卻仿佛看到了代碼世界的另一個維度游岳。區(qū)塊鏈開發(fā)者嘲笑互聯(lián)網開發(fā)者為古典程序員政敢,這么說我肯定算是一個遠古程序員了。遠古不可怕胚迫,但如果不懂進化喷户,或許想離滅亡就不久遠了。