最近仔掸,小明為了達(dá)成小姐姐的愿望脆贵,在某寶買(mǎi)到心儀的寶貝,再加上又迷上了python起暮,就通過(guò)python輕而易舉地實(shí)現(xiàn)了(個(gè)人聲明:對(duì)Java來(lái)說(shuō)丹禀,這并不是背叛)。
需求分析&前期準(zhǔn)備
需求其實(shí)很簡(jiǎn)單鞋怀,正常購(gòu)物。那我們平常的購(gòu)物流程如下所示:
開(kāi)始之前持搜,我們需要準(zhǔn)備一下程序運(yùn)行環(huán)境密似。
環(huán)境
- 系統(tǒng):Windows/Mac OS
- Python版本:3.7.2
為了讓程序模擬我們每一步操作,給大家介紹一個(gè)利器:Selenium
Selenium測(cè)試同學(xué)應(yīng)該會(huì)感覺(jué)特別親切葫盼。它是一個(gè)自動(dòng)化測(cè)試工具残腌,通過(guò)它我們可以驅(qū)動(dòng)瀏覽器執(zhí)行特定的動(dòng)作,如點(diǎn)擊贫导、下拉等等操作抛猫,所見(jiàn)即所得。
Selenium的安裝
運(yùn)行如下命令:
pip install selenium
但若想使用Selenium成功調(diào)用Chrome瀏覽器完成相應(yīng)的操作孩灯,我們還需要一個(gè)媒介與瀏覽器對(duì)接闺金。小明本次使用的是Chrome瀏覽器,因此就需要通過(guò)ChromeDriver來(lái)驅(qū)動(dòng)峰档。
ChromeDriver的安裝
這里是谷歌瀏覽器ChromeDriver的官方下載地址:
https://chromedriver.storage.googleapis.com/index.html
我們需要根據(jù)自己的Chrome瀏覽器版本败匹,找到相應(yīng)版本的ChromeDriver寨昙,再根據(jù)你電腦系統(tǒng)的平臺(tái)類型進(jìn)行下載、解壓掀亩。
- windows:將其放置在Python安裝路徑下
Scripts
文件夾下 - Mac OS:將其放置在
/usr/local/bin
下
環(huán)境配置到此結(jié)束舔哪,小明編寫(xiě)了一個(gè)python腳本,用來(lái)驗(yàn)證環(huán)境搭建是否成功:
from selenium import webdriver
# 打開(kāi)Chrome瀏覽器
if __name__ == '__main__':
browser = webdriver.Chrome()
運(yùn)行代碼后槽棍,如果成功打開(kāi)了一個(gè)新的瀏覽器捉蚤,就證明我們的環(huán)境安裝的沒(méi)問(wèn)題,接下來(lái)就可以愉快的購(gòu)物了炼七。
腳本編寫(xiě)
對(duì)比上面淘寶購(gòu)物流程圖缆巧,對(duì)應(yīng)代碼如下:
- 打開(kāi)淘寶網(wǎng)站
browser.get("https://www.taobao.com")
- 登錄
首先是跳轉(zhuǎn)到登陸頁(yè)
browser.find_element_by_link_text("親,請(qǐng)登錄").click()
登錄方式選擇二維碼
browser.find_element_by_class_name("icon-qrcode").click()
用手機(jī)進(jìn)行掃碼成功之后進(jìn)行下一步特石。
- 登錄成功后盅蝗,打開(kāi)購(gòu)物車(chē)
browser.get("https://cart.taobao.com/cart.htm")
- 勾選商品
browser.find_element_by_id("J_SelectAll1").click()
推薦選擇全選,但如果你的購(gòu)物車(chē)商品比較多姆蘸,又不想全選購(gòu)買(mǎi)墩莫,那就暫先手動(dòng)勾選想要下單的商品??。
- 結(jié)算
browser.find_element_by_link_text("結(jié) 算").click()
- 提交訂單
browser.find_element_by_link_text('提交訂單').click()
只要下單成功逞敷,接下來(lái)的付款狂秦,不用著急,只要在規(guī)定的時(shí)間內(nèi)支付就好推捐。
以上就是完整購(gòu)物的流程裂问。那秒殺是如何實(shí)現(xiàn)呢?
秒殺的實(shí)現(xiàn)
思路其實(shí)很簡(jiǎn)單牛柒,就是在正常購(gòu)物的基礎(chǔ)上增加一個(gè)時(shí)間的判斷:如果當(dāng)前時(shí)間到了指定的時(shí)間點(diǎn)堪簿,就觸發(fā)下單。
獲取當(dāng)前時(shí)間皮壁,需要使用到datetime這個(gè)內(nèi)置模塊椭更,代碼如下:
import datetime
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
代碼梳理
- 定義一個(gè)login函數(shù),用來(lái)登錄
- 定義一個(gè)picking函數(shù)勾選購(gòu)物車(chē)中的商品
- 定義一個(gè)buy函數(shù)等待搶購(gòu)時(shí)間蛾魄,定時(shí)秒殺
完整代碼請(qǐng)點(diǎn)擊訪問(wèn)我的github
推薦文檔
- Selenium-Python中文文檔
今晚可以不加班虑瀑!