【注意更新:抱歉,測試過是不支持熱銷商品秒殺的。發現京東改變了策略,不能直接在購物車中結算了;秒殺商品必須是到商品頁下單,提交訂單,結算,支付。所有有需要有條件的同學可以自行測試改變下流程即可】
1.前言:大表哥最近想買一台筆記本電腦聯想R7000P,但需求量太大,供不應求,每次京東搶購都撲得一場空,2020-10-16 00:00:00又有新的一輪搶購,希望這次能逮着它。想着人為搶購估計還是搶不過那些黃牛,於是用python寫個自動搶購的試試看,看看是否能成功搶到,這也是無奈中的一次嘗試吧。
2.環境配置:
pip3 install selenium geckodriver-v0.27.0-win64.zip #下載地址:https://github.com/mozilla/geckodriver/releases
安裝火狐瀏覽器,自行百度下載即可
3.配置geckodriver
下載解壓
拷貝geckodriver.exe到火狐瀏覽器安裝目錄C:\Program Files\Mozilla Firefox\ 下
4.編寫python代碼
#!/usr/bin/env python# # -*- coding:utf-8 -*- from selenium import webdriver import datetime import time driver = webdriver.Firefox() def auto_buy(username, password, purchase_list_time): print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "打開登陸界面") driver.get("https://passport.jd.com/new/login.aspx") print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "開始填寫賬號密碼") driver.find_element_by_link_text("賬戶登錄").click() driver.find_element_by_name("loginname").send_keys(username) driver.find_element_by_name("nloginpwd").send_keys(password) driver.find_element_by_id("loginsubmit").click() print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "手動拼圖驗證") time.sleep(10) #此處睡眠時間用來手動拼圖驗證 print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),"登陸成功") print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "等待時間到達搶購時間:",purchase_list_time, "......") while True: count = 0 for buytime in purchase_list_time: nowtime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') if nowtime == buytime: try: count += 1 print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "開始第 %s 次搶購......"%count) print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "打開購物車並選中商品") driver.get("https://cart.jd.com/cart.action") # 打開購物車並選中商品 print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "點擊去結算") driver.find_element_by_link_text("去結算").click() # 去結算 print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "點擊提交訂單") time.sleep(5) #提交訂單前必須等待幾秒【感覺跟電腦性能快慢有關,不卡的電腦可以適當降低嘗試】 driver.find_element_by_id('order-submit').click() #提交訂單 print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),"訂單提交成功,請前往訂單中心待付款付款") print("") continue except Exception as e: print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "搶購出現異常,重新搶購: ", e) continue time.sleep(0.001) purchase_list_time = [ "2020-10-16 00:00:00", "2020-10-16 00:00:01", "2020-10-16 00:00:02", "2020-10-16 00:00:03", "2020-10-16 00:00:04", "2020-10-16 00:00:05", ] auto_buy('賬號', '密碼', purchase_list_time)
5.注意事項:需要將購物車清空,只留下要買的那一個商品,不然訂單會一下子買完你購物車的商品【條件允許的情況下,還是很舒服的】
6.效果
手動拼圖驗證