每到節(jié)假日,各大購物網(wǎng)站平臺(tái)都會(huì)發(fā)放各種“秒殺”優(yōu)惠券,從一兩塊到兩三百甚至“零元購”的都有,但問題是,自己永遠(yuǎn)搶不到。不值錢的優(yōu)惠券一堆人推薦,真正好的優(yōu)惠券你就得花時(shí)間去搶,而搶到的概率幾乎為零。如下圖:
(哈哈哈哈,此時(shí)此刻,有沒有很應(yīng)景)
對(duì)于商家來說,初心是好的,限時(shí)秒殺優(yōu)惠券則是通過優(yōu)惠營造稀缺氛圍,節(jié)日促銷的時(shí)候回饋老用戶,以讓利獲得更多銷量,用戶購買的開心,口碑傳播動(dòng)力就越大,互利共贏的買賣。但最終結(jié)果呢?給消費(fèi)者一種被騙的感覺,不再相信這種活動(dòng)是真的!??!
能夠真正搶到好的優(yōu)惠券,關(guān)鍵在于快,要比別人快一步,如果還搶不到,有兩種可能:
- 一種是是好的優(yōu)惠券根本不存在,只是商家一種營銷套路;
- 另外一種是有人比你更快一步,他們是有一個(gè)神秘的灰色產(chǎn)業(yè)鏈,專門以搶優(yōu)惠券為生(畢竟,山外有山,人外有人)。
為了驗(yàn)證看看比正常人手速快,究竟能否搶到?自己用Python寫了自動(dòng)測(cè)試工具模擬搶券操作,結(jié)果。。。。。。你們也知道了
申明:此自動(dòng)測(cè)試工具,僅作為學(xué)習(xí)過程中的實(shí)踐,無商業(yè)用途
看一看:詳情代碼
作為一個(gè)愛學(xué)習(xí)的你,畢竟學(xué)習(xí)才是真正的王道。整個(gè)代碼的思路,都是在模擬人的行為去操作瀏覽器,打開網(wǎng)頁,重復(fù)去做點(diǎn)擊領(lǐng)取-->關(guān)閉這一動(dòng)作,在代碼中用while循環(huán)語句實(shí)現(xiàn)。通過此案例,我們可以試著去模擬各個(gè)網(wǎng)站的搶購活動(dòng),來進(jìn)行實(shí)踐學(xué)習(xí)(再次申明:此自動(dòng)測(cè)試工具,僅作為學(xué)習(xí)過程中的實(shí)踐,無商業(yè)用途)
為了真正去感受selenium工具的使用,建議大家動(dòng)動(dòng)手,自己敲一遍代碼:
from selenium import webdriverimport datetimeimport time
options = webdriver.ChromeOptions()options.add_argument('--log-level=3')
# 創(chuàng)建瀏覽器對(duì)象driver = webdriver.Chrome(chrome_options=options)
# 窗口最大化顯示driver.maximize_window()url = "https://pro.jd.com/mall/active/u6gHEpQdnEZuJPf8ebCQqdJCs2V/index.html?jd_pop=c0123941-4a86-4dbd-8f86-1cd540cd261d&utm_source=chongzhi.jd.com&utm_medium=zssc&utm_campaign=t_0_&utm_term=c0123941-4a86-4dbd-8f86-1cd540cd261d-p_93455"driver.get(url)driver.implicitly_wait(10)time.sleep(2)
# 找到并點(diǎn)擊淘寶的登陸按鈕driver.find_element_by_link_text("你好,請(qǐng)登錄").click()
print("請(qǐng)?jiān)?0秒內(nèi)完成登錄")# 用戶掃碼登陸time.sleep(10)
# "立即領(lǐng)取40元優(yōu)惠券"的css_selectorbtn_buy = "[data-cpid='6F3BD5C7006031740B25BCBCF11343FC_babel']"#“關(guān)閉按鈕”的css_selectorbtn_close = ".close-button"#搶購時(shí)間,盡量設(shè)置的靠前一點(diǎn),比如提前1分鐘,如10:00開獎(jiǎng),那就設(shè)置為09:59time = "2019-08-04 09:59:00"
a = 0while True: print("領(lǐng)取還未開始") if datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f') > buy_time: print("即將開始領(lǐng)取") # 找到“立即領(lǐng)取”,點(diǎn)擊 time.sleep(0.2) if driver.find_element_by_css_selector(btn_buy): while True: driver.find_element_by_css_selector(btn_buy).click() time.sleep(0.2) try: if driver.find_element_by_css_selector(btn_close): time.sleep(0.2) driver.find_element_by_css_selector(btn_close).click() time.sleep(0.2) except: print("搶券成功") a=1 break if a == 1: break time.sleep(0.5)
聊一聊:selenium定位元素神器
眾所周知,selenium是一種自動(dòng)化測(cè)試工具,支持多種瀏覽器,可以模擬瀏覽器進(jìn)行網(wǎng)頁加載。更為重要的是其在定位元素時(shí),有8大神器:
私信小編01 領(lǐng)取完整項(xiàng)目代碼!
其中,CssSelector是我最喜歡的元素定位方法,Selenium官網(wǎng)的Document里極力推薦使用CSS locator,而不是XPath來定位元素,原因是CSS locator比XPath locator速度快。
CssSelector定位元素又分為四類:id、class、其他屬性、路徑。我們這次案例涉及方法主要是:其他屬性、class屬性。接下來,以百度為例,講講關(guān)于CssSelector定位元素得具體操作方法。
百度一下html部分截圖展示
如果我們需要用selenium自動(dòng)化工具,模擬認(rèn)為輸入123,可以有四種方式:
#id定位:
element_input = driver.find_element_by_css_selector("#kw").send_keys('123')
.class定位:
element_input = driver.find_element_by_css_selector(".s_ipt").send_keys('123')
其他屬性定位:
element_input = driver.find_element_by_css_selector("[name='wd']").send_keys('123')
路徑定位:
element_input = driver.find_element_by_css_selector("form>span>input").send_keys('123')
最后來個(gè)多組合定位,你覺得哪個(gè)方便熟悉,哪個(gè)來!你高興就行(不過,還是以簡潔為主,不要過于復(fù)雜)
element_input = driver.find_element_by_css_selector("form>span.bg.s_ipt_wr.quickdelete-wrap>[name='wd']").send_keys('123')
注意點(diǎn):
1、當(dāng)class_value比較長,而且中間有空格時(shí),不能把空格原樣寫進(jìn)去,那樣不能識(shí)別。這時(shí),空格用點(diǎn)代替,前面要加上tag_name。
2、用路徑方法時(shí),層級(jí)關(guān)系使用大于號(hào)“>”來表示。






