在某寶上用python搶茅台


  最近經常看到在某東、某寶上定點搶茅台,搶到的話一瓶只要1499 元,前段時間一個朋友搶到了,可能是剛換了手機速度感人的原因,也可能是5G網速感人的原因,他竟然搶到了,收貨的時候快遞小哥直接想加800收購他的茅台,這錢掙得簡直不要太香,就算不賣,自己囤着等重大節點拿出一瓶茅台,也挺有意義的。然鵝,當我每天蹲點按時搶了幾天后,卻搶了個寂寞,於是,我想到了萬能的python。

  話不多說,直接開整!這里是在某貓超市搶。

  我們主要用到的就是webdriver,用python打開瀏覽器,模擬人瘋狂點擊搶購按鈕。

01  下載模擬用的Chrome

    在https://registry.npmmirror.com/binary.html?path=chromedriver/選擇合適的版本下載,我下載的是97.0.4692.71 (正式版本) (32 位),親測可用。

    在系統環境變量里把下載的chrome加進去,打開控制台,輸入chromedriver,如果顯示這個,說明成功了,然后再python中啟動driver即可,此時,在python中運行可啟動chrome瀏覽器。

 

 

 

 

 

 

driver = webdriver.Chrome()

02  登錄某寶

 1 def _login(self, login_url: str="https://www.taobao.com"):
 2     if login_url:
 3         self.driver = self.start_driver()
 4     else:
 5         print("Please input the login url.")
 6         raise Exception("Please input the login url.")
 7     while True:
 8         self.driver.get(login_url)
 9         try:
10             if self.driver.find_element_by_link_text("親,請登錄"):
11                 print("沒登錄,開始點擊登錄按鈕...")
12                 self.driver.find_element_by_link_text("親,請登錄").click()
13                 print("請在30s內掃碼登陸!!")
14                 sleep(30)
15                 if self.driver.find_element_by_xpath('//*[@id="J_SiteNavMytaobao"]/div[1]/a/span'):
16                     print("登陸成功")
17                     break
18                 else:
19                     print("登陸失敗, 刷新重試, 請盡快登陸!!!")
20                     continue
21         except Exception as e:
22             print(str(e))
23             continue

 

   其中,第10行即模擬點擊“親,請登錄”按鈕,12行執行后會顯示登錄的二維碼,掃碼登錄即可,15即檢測有沒有登錄成功,成功后,等待搶購,沒成功就刷新。


03  等待搶購

1 while True:
2     current_time = datetime.now()
3     if (self.seckill_time_obj - current_time).seconds > 180:
4         self.driver.get("https://cart.taobao.com/cart.htm")
5         print("每分鍾刷新一次界面,防止登錄超時...")
6         sleep(60)
7     else:
8         print("搶購時間點將近,停止自動刷新,准備進入搶購階段...")
9         break

  seckill_time_obj是設定的搶購時間,current_time是當前時間,如果時間差大於三分鍾的話,則先不執行搶購操作,但每分鍾刷新一次,防止退出登錄。

04  開始搶購

  首先是選擇商品,這里是把購物車全選了,所以,搶購之前,先清空購物車,不然真搶購成功了,那購物車可就真清空了。

1 self.driver.get("https://cart.taobao.com/cart.htm")
2         sleep(1)
3         if self.driver.find_element_by_id("J_SelectAll1"):
4             self.driver.find_element_by_id("J_SelectAll1").click()
5             print("已經選中全部商品!!!")

  獲取淘寶時間。

1 def taobao_time(self):
2     url = 'http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp'
3     ret = requests.get(url).text
4     js = json.loads(ret)
5     return int(js['data']['t'])

  計算時間差。 

def local_jd_time_diff(self):
     return self.local_time() - self.taobao_time()   

  用一個while循環執行搶購操作,時間一到,即點擊搶購按鈕。

 1 while True:
 2     if self.local_time() - diff_time >= self.buy_time_ms:
 3         try:
 4             if self.driver.find_element_by_id("J_Go"):
 5                 self.driver.find_element_by_id("J_Go").click()
 6                 click_submit_times = 0
 7                 while True:
 8                     try:
 9                         if click_submit_times < 20:
10                             self.driver.find_element_by_link_text('提交訂單').click()
11                             print("已經點擊提交訂單按鈕")
12                             submit_succ = True
13                             break
14                         else:
15                             print("提交訂單失敗...")
16                     except Exception as e:
17                         print("沒發現提交按鈕, 頁面未加載, 重試...")
18                         click_submit_times = click_submit_times + 1
19                         sleep(0.01)
20         except Exception as e:
21             print(e)
22         if submit_succ:
23             print("訂單已經提交成功,無需繼續搶購...")
24             break
25         if retry_count > max_retry_count:
26             print("重試搶購次數達到上限,放棄重試...")
27             break
28         retry_count += 1
29     sleep(0.1)

  如果搶購成功了,即付款。

 1 def pay(self):
 2     try:
 3         element = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, 'sixDigitPassword')))
 4         element.send_keys(self.password)
 5         WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, 'J_authSubmit'))).click()
 6         print("付款成功")
 7     except:
 8         print('付款失敗')
 9     finally:
10         sleep(60)
11         self.driver.quit()

  設定好搶購時間和付款密碼,然后,就等待搶購就行啦,受到投放數量的限制,同時也可能受到其他腳本的競爭,這種搶購只能說是然你快人一步,具體真多快才能搶到,只能看個人運氣了。

  如有需要或者交流,加我微信ktss312


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM