用思维导图分析python抢茅台脚本执行流程

Posted by ZMY Blog on January 3, 2021

用思维导图分析python抢茅台脚本执行流程

最近抢茅台比较火热,看身边有朋友有抢到的,也想参与到其中试试手气,但抢了几回感觉希望渺茫,故上网找找资料看有没有python爬虫脚本可以完成这个工作,别说还真有大佬完成了这个项目。出于对知识不求甚解的原因,随分析这个项目的处理流程,用思维导图的方式呈现出来,里面的流程图基本诠释了这个项目所有的执行过程。

思维导图下载地址maotai.xmind

项目地址https://github.com/276622709/jd_seckill原项目已经被大佬删除了,估计被喝茶了,且看且珍惜
main.py主要流程如下
jd_seckill = JdSeckill()–>jd_seckill.reserve()–>jd_seckill.seckill_by_proc_pool()
一. 实例化JdSeckill对象
1.创建一个session对象并初始化
jd_seckill = JdSeckill()
self.spider_session = SpiderSession()
SpiderSession().session = requests.session()
2.验证是否有本地cookie值
有的话加载cookie,session设置cookie,没有返回False
self.spider_session.load_cookies_from_local()
3.验证是否处于登录状态(验证cookie是否有效)
QrLogin类中_validate_cookies方法通过访问 https://order.jd.com/center/list.action
能否得到200的返回值来验证cookies是否有效,有效则将self.qrlogin设置为True,否则为False。并取得session,添加user_agent为之后的预约和抢购做准备

二.预约茅台
1.验证是否已经登录
首先通过check_login装饰器检查是否已经登录成功,如果之前没有登陆过,使用扫描二维码的方式进行登录,并将cookie值保存在本地文件中。 jd_seckill.reserve() –> check_login –> self.login_by_qrcode()
2.预约
self.make_reserve()
这个需要预先设置开始执行时间,到时间后无限循坏执行请求预约页面,需要手动结束
三.抢购茅台
jd_seckill.seckill_by_proc_pool()

1.验证是否已经登录
通过check_login装饰器检查是否已经登录成功,如果之前没有登陆过,使用扫描二维码的方式进行登录,并将cookie值保存在本地文件中。
2.创建进程池,多进程同步抢购
使用ProcessPoolExecutor类创建多进程,执行_seckill方法进行抢购 ProcessPoolExecutor –> _seckill方法
3.订单抢购
1.获取抢购页,模拟抢购页面点击,返回结算页面,模拟点击结算页面返回订单页面

request_seckill_url() –> get_seckill_url() –> request_seckill_checkout_page()

2.提交订单页面
通过_get_seckill_order_data方法获取订单数据,再通过submit_seckill_order方法提交订单

声明:本博客的原创文章,都是本人平时学习所做的笔记,转载请标注出处,谢谢合作。