[Python專案開發] 打造蝦皮搶購神器 開發歷程~~

我們都知道台灣的蝦皮購物精美價廉三不五時會有促銷的活動,尤其是整點優惠或是限時下殺但是這類的商品往往數量少得可憐每次到了商品結帳的畫面都已商品售完,於是開始構想計畫一個禮拜開發一個能定時搶購的程式,這邊我就以Python去設計這套軟體的構思~

邏輯規劃:

當時間到達指定時間點的時候對待搶購的商品進行購買並依照當初定義好的規格去下單結帳等流程

反之當上述流程有異常的時候一律強制停止程式

開發工具:

  • Microsoft Visual Studio 2022 IDE
  • Github 版控
  • Chrome 瀏覽器
  • chromedriver

Python PIp 主要套件:

  • selenium

程式部分說明:

大致上程式大概分二塊 副程式區Function 和 主程式main這兩部分

不得不說 VS這塊我還蠻喜歡的 這邊可以規劃不同虛擬Python環境,在不同的設備上開發是很方便了

副程式說明:

類別分別兩部分:

  • class DateEntry()->負責顯示UI相關提供使用者輸入日期等相關資訊
  • class Flashbuy()->負責驗證登入有效性 網頁爬取元素 自動購物等相關功能

主程式說明:

  • class myThread (threading.Thread)-> 這邊是規劃多執行序方向
  • def urlLoadCheck(urlP):->檢查網址格式
  • def StratBuy(timeP,urlP,Specification):->執行購買程式並帶入時間點、網址、商品規格
  • def indata(aa,bb,cc):->將全域變數資料取代新值
  • def showTime():->顯示使用者輸入的時間資訊
主程式介面

重點程式:

開發中我覺得有些程式印象深刻,很多套件都是第一次使用寫的過程中也一直參考網路上的寫法~

 WebDriverWait(self.driver, 10, 0.3).until(EC.presence_of_element_located((By.CLASS_NAME,'product-bottom-panel__buy-now'))) # 顯性等待 尋找特定元素出現 這邊是等待蝦皮立即購買的按鈕出來 最多等10秒 每0.3秒Check
其中該元素的定義是參考 Chrome 開發者模式所得到的 該Class
    def set_cookies(self):
        self.driver.get("https://shopee.tw/buyer/login?")  
        print("###請登入蝦皮###")
        time.sleep(5)
        while self.driver.title.find('立即登入盡享安全便利的網購樂趣 | 蝦皮購物') != -1:
            time.sleep(1)   #這邊我是判斷到等待 特定標題出現後結束等待
            self.driver.find_element_by_xpath("//input[@autocomplete='username']").send_keys('') # 輸入帳號可自動輸入
            self.driver.find_element_by_xpath("//input[@type='password']").send_keys('') # 輸入密碼可自動輸入
            time.sleep(60)
            print("###登入成功###")
            pickle.dump(self.driver.get_cookies(), open('cookies.pkl', 'wb')) #將Cookies擷取儲存   
            print('###cookie保存成功###')
            self.driver.get("https://shopee.tw")
這裡也一樣 元素都能在開發者模式找的到
程式執行結果
不同時段有不同的所需時間

成果影片:

總結:

基本上這次開發純粹就是實驗性質,基於網頁爬蟲的自動下單當然沒比蝦皮後臺呼叫的API還來的快,不過從中也學到了不少爬蟲知識,包含帶帳戶驗證、尋找元素、UI顯示等,沒意外應該會弄個完整版吧!,畢竟對於結帳流程手速再快也沒比電腦快,這方面的應用還有很多地方可以發揮例如:搶演唱會門票、搶PS5預購、搶活動限時特價等之類的~ 我是阿俊謝謝大家觀看~~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

AbuseIPDB Contributor Badge
返回頂端