更多精彩內容,歡迎關注公眾號:數量技術宅,也可新增技術宅個人微訊號:sljsz01,與我交流。
對於淘寶、天貓,相信大家已經無比的熟悉,在每年的雙十一、雙十二,或是其他購物節,平臺都會上架價效比超高的一些商品,商品的價效比越高,自然吸引購買者的眼光也越多。不知道你是否有這樣的經歷,半夜卡著點等待心儀商品放出,狂點手機,卻一秒庫存不足。這是因為,背後有許許多多的搶購機器人,在與你競爭,在程式面前,眼睛看到+手工點選的速度,無疑是慢了。
本次的文章,技術宅將分享一個淘寶/天貓的秒殺指令碼,這個指令碼用Python編寫,使用到了Python的三方庫selenium,並且通過selenium + chromedriver,用程式控制chrome瀏覽器,完成搶購的一系列操作。有了這個指令碼,大家至少可以與其他的機器人站在同一起跑線上,公平的搶購喜歡的寶貝。
selenium 安裝與 chromedriver安裝
我們前文提到,Python指令碼中使用了selenium庫,而selenium又通過chromedriver來控制瀏覽器的滑鼠點選等操作。所以,我們的第一步,是正確的安裝與配置selenium以及chromedriver。
selenium的安裝很簡單,與其他Python三方庫一樣,我們直接用pip安裝。
pip install selenium
chromedriver的安裝,首先,chromedriver的版本很關鍵,我們需要選擇的chromedriver版本,一定要與Chrome的版本一致。因此, 我們需要檢視Chrome版本,在瀏覽器中輸入chrome://version/
這個示例中Chrome的版本是 72.0.3626, 我們再到以下兩個網站的其中之一,去下載對應版本的chromedriver。
1、http://chromedriver.storage.googleapis.com/index.html
2、https://npm.taobao.org/mirrors/chromedriver/
下載完成後,解壓壓縮包,找到chromedriver.exe複製到chrome的安裝目錄(其實也可以隨便放一個資料夾)。複製chromedriver.exe檔案的路徑並加入到電腦的環境變數中去。具體的:
進入環境變數編輯介面,新增到使用者變數即可,雙擊PATH,將檔案位置(例如我們的是 C:\Program Files (x86)\Google\Chrome\Application\)新增到後面。
完成安裝後,我們到cmd介面, 輸入chromedriver,如果下方給出了chromedriver的版本號,說明已經安裝成功。
我們再通過Python庫selenium,來呼叫chromedriver,以此來簡單測試chromedriver的功能。如果我們未配置環境變數,可用如下程式碼進行測試
from selenium import webdriver
import time
def main():
chrome_driver = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe' #chromedriver的檔案位置
b = webdriver.Chrome(executable_path = chrome_driver)
b.get('https://www.google.com')
time.sleep(5)
b.quit()
if __name__ == '__main__':
main()
而如果我們已經配置好了環境變數,可以通過另一端程式碼來進行測試
from selenium import webdriver
import time
def main():
b = webdriver.Chrome()
b.get('https://www.baidu.com')
time.sleep(5)
b.quit()
if __name__ == '__main__':
main()
核心模組程式碼解析
安裝、配置完selenium與chromedriver之後,我們就可以開始編寫秒殺指令碼的核心邏輯了。核心邏輯,我們通過封裝函式來實現各個步驟。
第一步,啟動chromedriver,並登陸淘寶。這裡需要注意的是,我們通過控制chromedriver開啟淘寶主頁,進入到登陸介面後,需要手工掃碼進行登陸。這一步驟無法做到全自動。
第二步,登陸後,我們仍然是通過chromedriver控制,進入購物車介面,並設定一個60秒的定時重新整理,即每隔60秒重新整理一遍購物車介面,使得我們的淘寶賬戶保持在登陸狀態。直到當前的時間與我們所設定寶貝的搶購時間相差小於100秒,再進入下一步。
第三步,通過chromedriver選中購物車全部商品,將本地時間與淘寶伺服器時間校準,以淘寶伺服器返回時間作為標準時間,一旦淘寶時間到達我們搶購的時間,立即從購物車提交訂單。此時有兩種情況,如果我們提交訂單的任務傳送的太早,提交訂單按鈕還沒有出現,此時我們重複提交訂單步驟,一直到按鈕出現;另一種情況,提交訂單按鈕在我們傳送提交請求的時候已經可用了,那麼直接提交成功。
第四步,付款,由於部分搶購是以付款為順序為優先順序的,我們將付款操作也加入秒殺指令碼的流程,並作為最後一步,當我們提交訂單成功後,指令碼將自動幫助我們執行支付寶的付款。此處需要注意的是,我們需要在指令碼中提前設定好正確的6位數支付密碼。
秒殺指令碼使用示例
介紹完了秒殺指令碼的核心邏輯,接下來,我們以天貓超市搶購茅臺酒為例,來為大家演示這個秒殺指令碼的執行流程。我們以茅臺舉例,並不意味著這個指令碼只能搶購茅臺,任何加入購物車的商品,在任何的時間,都可以用這個指令碼來執行到點的秒殺。茅臺由於天貓超市每天的量很有限,加上各類搶購的外掛很多,成功率比較低,但對於其他商品來說,這個秒殺指令碼經過我們的對比測試,相比較手工搶購,成功率將提高一個量級。
我們執行main.py主程式指令碼,程式會通過chromdriver控制,啟動chrome自動開啟淘寶主頁,並進入登陸介面。可用看到網頁上方有一行提示:Chrome正受到自動測試軟體的控制。
然後,我們通過手機淘寶掃碼登陸進入,登陸後,程式會自動進入購物車的介面,並每分鐘重新整理一次,以防止登陸超時。
臨近搶購時間,程式選中購物車商品,並在搶購時間到達時,自動點選結算、提交訂單。
提交訂單成功後,進入付款環節,如果付款成功,代表我們的這一次秒殺成功搶到心儀的商品了,而如果付款失敗,說明此次秒殺我們運氣不佳,有人先一步搶到了。不過總體來說,我們有了秒殺指令碼,已經超越了90%使用者的搶購速度了。
如果你想要獲取這個Python秒殺指令碼,歡迎掃碼新增數量技術宅個人微信,領取完整程式碼。
往期乾貨分享推薦閱讀
Omega System Trading and Development Club內部分享策略Easylanguage原始碼
【數量技術宅|量化投資策略系列分享】基於指數移動平均的股指期貨交易策略
AMA指標原作者Perry Kaufman 100+套交易策略原始碼分享
【數量技術宅|金融資料系列分享】套利策略的價差序列計算,恐怕沒有你想的那麼簡單
【數量技術宅|量化投資策略系列分享】成熟交易者期貨持倉跟隨策略
【數量技術宅|金融資料分析系列分享】為什麼中證500(IC)是最適合長期做多的指數
商品現貨資料不好拿?商品季節性難跟蹤?一鍵解決沒煩惱的Python爬蟲分享
【數量技術宅|金融資料分析系列分享】如何正確抄底商品期貨、大宗商品