1. 程式人生 > 程式設計 >Python之京東商品秒殺的實現示例

Python之京東商品秒殺的實現示例

1 環境

作業系統:Windows 10
Python版本:3.9.0
Google Chrome87.0.4280.88
ChromeDriver87.0.4280.88
PyCharm 2020.2.3 x64

2 需求分析&前期準備

2.0 需求分析

目標是秒殺京東的訂單,這裡面有幾個關鍵點,首先需要登入京東,其次你需要準備好訂單,最後要在指定時間快速提交訂單。
登入京東,這裡就要用到一個爬蟲利器Selenium,它是一個自動化測試工具,利用它我們可以驅動瀏覽器執行特定的動作,如點選、下拉等等操作,所見即所得。另外對於一些 JavaScript 渲染的頁面來說,此種抓取方式非常有效。

2.1 Selenium的安裝

Selenium 的安裝很簡單,dos命令列:

pip3 install selenium

Python之京東商品秒殺的實現示例

Selenium安裝好之後,並不能直接使用,它需要與瀏覽器進行對接。這裡拿Chrome瀏覽器為例。若想使用Selenium成功呼叫Chrome瀏覽器完成相應的操作,需要通過ChromeDriver來驅動。

2.2 ChromeDriver的安裝

這裡是ChromeDriver的官方下載地址。

連結:https://chromedriver.storage.googleapis.com/index.html
下載之前先來確認下我們使用的Chrome瀏覽器版本。

Python之京東商品秒殺的實現示例

通過ChromeDriver的下載連結,找到與之對應的Chrome瀏覽器版本,根據你電腦系統的平臺型別進行下載。

Python之京東商品秒殺的實現示例

下載完成之後,解壓,將其放置在Python安裝路徑下Scripts資料夾中即可

Python之京東商品秒殺的實現示例

用PyCharm執行如下程式碼:

from selenium import webdriver
# 開啟Chrome瀏覽器
driver = webdriver.Chrome()

成功開啟瀏覽器,則證明ChromeDriver版本沒問題,即可正常使用Selenium。

from selenium import webdriver
import datetime
import time
# 開啟Chrome瀏覽器
driver = webdriver.Chrome()
 
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_index") # 開啟購物車並選中商品
          # 如果沒有全選,點選全選
          if not driver.find_element_by_class_name('jdcheckbox').is_selected():
            driver.find_element_by_class_name('jdcheckbox').click()
          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)  #提交訂單前必須等待幾秒【感覺跟電腦效能快慢有關,不卡的電腦可以適當降低嘗試】
          if driver.find_element_by_id("order-submit"):
            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-12-25 10:00:00","2020-12-25 10:00:01","2020-12-25 10:00:02","2020-12-25 10:00:03","2020-12-25 10:00:04","2020-12-25 10:00:05",]
auto_buy('帳號','密碼',purchase_list_time)

預約商品到購物車——>修改程式碼搶購時間——>用PyCharm執行程式碼即可。

到此這篇關於Python之京東商品秒殺的實現示例的文章就介紹到這了,更多相關Python 京東商品秒殺內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!