用Python做一個中秋搶購月餅的腳本

来源:https://www.cnblogs.com/hahaa/archive/2022/09/05/16659179.html
-Advertisement-
Play Games

序言 每逢佳節倍思親,想買個東西給家裡,結果發現手速不夠,網速不夠快,沒有時間下單等等各種原因導致最後想買的東西售罄了… 甚至跟你一起搶購的可能是腳本,太真實了! 今天就給大家分享一個python版搶購月餅的腳本,我們要用魔法打敗魔法!話不多說,直接開搞! 準備工作 今天要用的是一個測試工具的庫:S ...


序言

每逢佳節倍思親,想買個東西給家裡,結果發現手速不夠,網速不夠快,沒有時間下單等等各種原因導致最後想買的東西售罄了…

甚至跟你一起搶購的可能是腳本,太真實了!

今天就給大家分享一個python版搶購月餅的腳本,我們要用魔法打敗魔法!話不多說,直接開搞!

準備工作

今天要用的是一個測試工具的庫:Selenium

Selenium是一個用於測試網站的自動化測試工具,支持各種瀏覽器包括Chrome、Firefox、Safari等主流界面瀏覽器,同時也支持phantomJS無界面瀏覽器。
它支持多種操作系統如Windows、Linux、IOS、Android等。
今天我們就是用它去實現自動化搶購月餅,其實就是用這個工具"模擬"人為操作瀏覽器相應的操作,比如登陸,勾選購物車商品,下單購買等等操作。

安裝 Selenium

方式1

pip install Selenium

 

方式2

pip 安裝不成功的話,可以使用pycharm工具進行下載

國內可以採用以下這些數據源:

選擇一個可用的數據源的Selenium進行

安裝瀏覽器驅動

下載

Selenium3.x調用瀏覽器必須有一個webdriver驅動文件, 選擇以下 對應系統的chrome進行下載即可
Chrome驅動文件下載

配置環境變數


我的電腦–>屬性–>系統設置–>高級–>環境變數–>系統變數–>Path


將你下載chromexxx.zip文件的目錄添加到Path的值中。比如:Path欄位 F:\download

代碼展示

from selenium import webdriver
import datetime
import time
# Python學習交流群:279199867 完整源碼其它資料都放在群里了
class Seckill(): def __init__(self,startTime, choose): self.startTime = startTime self.choose = choose def login(self,browser): browser.get("https://www.taobao.com") time.sleep(2) if browser.find_element_by_link_text("親,請登錄"): browser.find_element_by_link_text("親,請登錄").click() print("請在15秒內完成掃碼") time.sleep(15) browser.get("https://cart.taobao.com/cart.htm") time.sleep(3) now = datetime.datetime.now() print('登陸成功:', now.strftime('%Y-%m-%d %H:%M:%S')) def buy(self,browser): if self.choose == 2: print("請手動在瀏覽器中勾選需要秒殺的商品") while True: now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') # 對比時間,時間到的話就點擊結算 if now > self.startTime: if self.choose == 1: while True: try: if browser.find_element_by_id("J_SelectAll2"): browser.find_element_by_id("J_SelectAll2").click() break except: print("error : cant find buy button") # 點擊結算按鈕 while True: try: if browser.find_element_by_link_text("結 算"): browser.find_element_by_link_text("結 算").click() print("結算成功") break except: pass while True: try: if browser.find_element_by_link_text('提交訂單'): browser.find_element_by_link_text('提交訂單').click() now1 = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') print("搶購成功時間:%s" % now1) except: print("再次嘗試提交訂單") time.sleep(0.01) def main(): pkTime = input("請輸入秒殺時間,格式如(2022-09-03 15:40:00.000000):") choose = int(input("到時間自動勾選購物車請輸入“1”,否則輸入“2”:")) browser = webdriver.Chrome() browser.maximize_window() sk = Seckill(pkTime, choose) # step1: 登陸 sk.login(browser) # step2: 購買 sk.buy(browser) if __name__ == "__main__": main()

 

測試

請輸入搶購時間,格式如(2022-09-03 15:40:00.000000):2022-09-03 16:17:00.000000
到時間自動勾選購物車請輸入“1”,否則輸入“2”:1
請在15秒內完成掃碼
登陸成功: 2022-09-03 16:14:45
結算成功
再次嘗試提交訂單
再次嘗試提交訂單
再次嘗試提交訂單
再次嘗試提交訂單
再次嘗試提交訂單
再次嘗試提交訂單
再次嘗試提交訂單
搶購成功時間:2022-09-03 16:17:15.498106

 

輸入搶購時間後,會自動彈出測試的瀏覽器界面,自動調整到登錄界面,此時需要你自己操作進行登錄:

登錄後,跳轉到購物車

如果你選擇的是自動化勾選購物車就不需要手動勾選,等程式自己勾選 (不建議選擇自動勾選)

建議選擇手動勾選

等到你指定搶購時間的時候,該腳本會在1毫秒內進行搶購,下單並跳轉到支付頁面,等待你的付款。 

註意

  • 測試時,到時間自動勾選購物車請輸入“1”,否則輸入“2”,這個選項最好選擇為2 (如 果選擇為1,且你的購物車商品比較多,會自動全部勾選進行搶購了)
  • 搶購時間選擇大於當前時間

好了,今天的分享就到這裡~

最後推薦一套Python教程:Python項目實戰100例


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 坦克大戰【3】 筆記目錄:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 坦克大戰0.6版 √增加功能 防止敵人坦克重疊運動 記錄玩家的成績(累積擊毀敵方坦克數),存檔退出【io流】 記錄當時的敵人坦克坐標與方向,存檔退出【io流】 玩游戲時 ...
  • 發現問題 前幾天在看別人的項目的時候,發現一個問題,簡單復現一下這個問題 // 註意這是一個Integer對象的數組哦 Integer[] arr = new Integer[]{9999,88,77}; List<Integer> list = Arrays.asList(arr); // 執行以 ...
  • 前置知識 什麼是進程,什麼又是線程?咱不是講系統,簡單說下,知道個大概就好了。 進程:一個可執行文件執行的過程。 線程:操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程,每條線程並行執行不同的任務 什 ...
  • Spring(三)——AOP 概念 什麼是AOP (1)面向切麵編程(方面),利用 AOP 可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率。 (2)通俗描述:不通過修改源代碼方式,在主幹功能裡面添加新功能 AOP底層原理 JDK動態 ...
  • 線程基礎03 6.用戶線程和守護線程 用戶線程:也叫工作線程,當線程的任務執行完或者通知方法結束。平時用到的普通線程均是用戶線程,當在Java程式中創建一個線程,它就被稱為用戶線程 守護線程(Daemon):一般是為工作線程服務的,當所有的用戶線程結束,守護線程自動結束 常見的守護線程:垃圾回收機制 ...
  • 前文再續,上一回我們完成了用戶管理模塊的CURD(增刪改查)功能,功能層面,無甚大觀,但有一個結構性的缺陷顯而易見,那就是項目結構過度耦合,項目的耦合性(Coupling),也叫耦合度,進而言之,模塊之間的關係,是對項目結構中各模塊間相互聯繫緊密程度的一種量化。耦合的強弱取決於模塊間調用的複雜性、調 ...
  • 非同步編程在 Rust 中的地位非常高,很多 crate 尤其是多IO操作的都使用了 async/await. 首先弄清楚非同步編程的幾個基本概念: Future Future 代表一個可在未來某個時候獲取返回值的 task,為了獲取這個 task 的執行狀況,Future 提供了一個函數用於判斷該 t ...
  • 引入依賴 <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> <version>2.5.5</version> </dependency> 基礎創建方式 Cac ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...