在某宝上用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

posted @ 2022-02-19 14:32  康小武  阅读(1517)  评论(0编辑  收藏  举报