python使用requests秒杀茅台(适用某宝,也可抢购其他商品)

您所在的位置:网站首页 京东抢购秒杀脚本 python使用requests秒杀茅台(适用某宝,也可抢购其他商品)

python使用requests秒杀茅台(适用某宝,也可抢购其他商品)

2024-07-09 11:30| 来源: 网络整理| 查看: 265

前言

关于茅台抢购,看过不下一百篇小文章,浏览来浏览去,也找不到几篇合适的。虽然有很多人发布了使用selenium抢购茅台的脚本,但个人觉得这些没有直接使用requests提交订单来的快。于是!就有了你现在读的文章!废话不多说,开搞!

准备工作

安装python,这就不用我说吧?至于开发工具使用什么看自己心情,我这里使用的是vscode,不知道如何操作的可以参考这位博主的http://t.csdn.cn/Xh3LG。这位博主的文章下面还有selenium的安装教程,可以顺便看一下,因为我这里也要用到selenium登录,我就不重复造轮子了。

分析一波抢购流程

1、登录

2、requests请求“确认订单”所需信息

3、requests请求“提交订单”

看似简单的三步,我可花费了好多心血来研究啊,得掉多少头发!

具体实现过程

import re, time, random, datetime, sys, requests, threading, psutil from requests.cookies import RequestsCookieJar from selenium.webdriver.common.by import By from multiprocessing import Queue from urllib.parse import quote from selenium import webdriver from io import BytesIO from PIL import Image class Login(): def __init__(self): #设置关键词进行匹配或判断,下同 self.key_word1 = '账号管理' self.key_word2 = '安全链接' self.j = 0 #创建队列存放post订单结果 self.queue = Queue(maxsize=100) # 创建Session对象 requests库的session对象会在同一个session实例的所有请求之间使用cookies保持登录状态 self.session = requests.session() #设置headers ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.50" self.headers = { 'User-Agent': ua } self.session.headers.update(self.headers) # 扫码登录,获取cookies def get_cookies(self): options = webdriver.ChromeOptions() options.add_experimental_option('excludeSwitches', ['enable-logging']) options.add_argument('--headless') browser = webdriver.Chrome(options=options) url = 'https://login.taobao.com/member/login.jhtml' browser.get(url) # 点击跳转扫码界面 browser.find_element(By.XPATH,'/html/body/div[1]/div[2]/div[3]/div/div/div/div[1]/i').click() time.sleep(round(random.uniform(1,2),2)) # 获取并保存二维码截图 qrcode_img_data=browser.find_element(By.XPATH, '//*[@id="login"]/div[2]/div/div[1]/div[1]').screenshot_as_png qrcode_img = Image.open(BytesIO(qrcode_img_data)) qrcode_img.save('qrcode.png') qrcode_img.show() print("请扫码登录!") time.sleep(2) # 每隔1.5秒判断一次是否登录成功 t=0 while t < 40: try: info = browser.find_element(By.XPATH, '//*[@id="J_Col_Main"]/div/div[1]/div/div[1]/div[1]/div/div[1]/a/em').text print('您的帐户:' + info) for proc in psutil.process_iter(): # 遍历当前process if proc.name() == "Microsoft.Photos.exe": proc.kill() # 关闭该process break except: time.sleep(1.5) t+=1 # 获取Cookie并保持在session中 cookies = browser.get_cookies() time.sleep(round(random.uniform(1,2),2)) browser.quit() selenium_cookies = cookies tmp_cookies = RequestsCookieJar() for item in selenium_cookies: tmp_cookies.set(item["name"], item["value"]) self.session.cookies.update(tmp_cookies) #登录 def login(self): print("登录中...") try: req=self.session.get('https://i.taobao.com/user/baseInfoSet.htm?').text if self.key_word1 in req: print("自动登录成功!") else: print("自动登录失败!\n请再次扫码登录!") self.get_cookies() self.session.get('https://i.taobao.com/user/baseInfoSet.htm?').text if self.key_word1 in req: print("自动登录成功!") else: print("自动登录失败!\n请手动完成该任务") sys.exit(0) except: print('程序出错!') sys.exit(0) # 提交订单 def submitOrder(self, url, skuId, setTime, quantity): self.url = url quantity = '_' + quantity + '_' # 获取cookies并登录 self.cookies=self.get_cookies() self.login() time.sleep(round(random.uniform(1,2),2)) # 进入商品详情页 self.req = self.session.get(url=self.url).text time.sleep(round(random.uniform(1,2),2)) # 提取 key datas self.patterGoods() time.sleep(round(random.uniform(1,2),2)) # 确认订单 data = { "buy_param": self.auction[0] + quantity + skuId } url = 'https://buy.tmall.com/order/confirm_order.htm?x-itemid=' + self.auction[0] + '&x-uid=' + self.userId[0] k = 0 while True: print("\r购买倒计时:%.3f"%(setTime-time.time()),end="",flush=True) if (time.time() >= setTime): print('\n') print(datetime.datetime.now()) while True: self.req = self.session.post(url=url, data=data).text # 获取数据 key = self.patterData() k+=1 if(k==50): print("\n确认订单失败!下次加油哦") print(datetime.datetime.now()) sys.exit(0) if(key): print("\n确认订单成功!") print(datetime.datetime.now()) break break # 提交订单 data = { "endpoint": self.endpoint, "linkage": self.linkage, "data": self.data, "action": self.action, "_tb_token_": self.tbToken, "event_submit_do_confirm": self.event, "praper_alipay_cashier_domain": self.unitSuffix, "input_charset": self.charset, "hierarchy": self.hierarchy } url = 'https://buy.tmall.com/auction/confirm_order.htm?x-itemid=' + self.auction[0] + '&x-uid=' + self.userId[0] + '&submitref=' + self.submitUrl #多线程,提高抢购效率 thread_list=[] for i in range(1,80): t = threading.Thread(target=self.post, args=(url, data)) thread_list.append(t) l = len(thread_list) # 启动线程 for i in range(0,l-1): thread_list[i].start() # 关闭线程 for t in range(0,l-1): thread_list[i].join() while self.queue.empty() == False: req = self.queue.get() if self.key_word2 in req: print('提交订单成功!请快尽快付款!') self.j = 1 break if self.j == 0: print('提交订单失败!请下次重试!') print('Buy End!') sys.exit(0) # 提取信息:商品详情 def patterGoods(self): # 页面id self.auction=re.findall(r'(?


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3