基于python的某宝秒杀

前言: 最近太忙了,今天下午得空半小时更新一下博客。今天为大家带来的是某宝秒杀**教程,因为双十一块到了,也是我最近写的一个小软件,这个协议请求的代码不会给的,但是web自动化的可以在我的github上面看,。在此我声明一下,这篇文字仅供学习,如果用来非法用途,后果博主一概不负!!!侵权立删!!!

技术栈
1、selenium+chromedriver:用web自动化来登陆获取cookie
2、requests:python的一个爬虫库,用来请求某宝的api
3、tkinter:可视化页面库(很丑)
4、urllib:一些参数要编码

首先 :selenium+chromedriver实现登陆获取cookie,也可以用requests请求登陆,但是要**两个参数,一个是password2密码加密,可解密,难道比较大,可以找到所有的js加密函数,用execjs或者selenium的execute_script进行执行js代码得到;另一个是umidToken,这个是刚加的参数,之前是没有的,所以这个没来得及**。基于以上,登陆实现最快最的方法就是selenium+chromedriver实现登陆获取cookie了,这个就不多废话了。

其次 :就是把之前保存下来的cookie用session维持会话,再去请求url:
详情页url: 如下图,某个商品的url,这个页面里面几个参数必须要获取,请求购买接口是要的参数,
基于python的某宝秒杀
data = {
‘title’: ‘(unable to decode value)’,
‘x_id’: ‘’,
’seller_id’: seller_id,
‘seller_nickname’: ‘(unable to decode value)’,
‘who_pay_ship’: ‘(unable to decode value)’,
’photo_url’: photo_url,
‘region’: ‘(unable to decode value)’,
‘auto_post’: ‘false’,
‘etm’: ‘post’,
‘virtual’: ‘false’,
’rootCatId’: rootCatId,
‘auto_post1’: ‘’,
‘buyer_from’: ‘ecity’,
‘root_refer’: ‘’,
‘item_url_refer’: ‘https%3A%2F%2Fs.taobao.com%2F’,
’allow_quantity’: allow_quantity,
’buy_param’: buy_param,
‘quantity’: ‘1’,
tb_token’: tb_token,
‘skuInfo’: ‘(unable to decode value)’,
‘use_cod’: ‘false’,
‘_input_charset’: ‘UTF-8’,
‘destination’: ‘350100’,
’skuId’: skuId,
‘bankfrom’: ‘’,
‘from_etao’: ‘’,
’item_id_num’: item_id_num,
’item_id’: item_id,
’auction_id’: auction_id,
‘seller_rank’: ‘0’,
‘seller_rate_sum’: ‘0’,
‘is_orginal’: ‘no’,
‘point_price’: ‘false’,
‘secure_pay’: ‘true’,
‘pay_method’: ‘(unable to decode value)’,
‘from’: ‘item_detail’,
’buy_now’: buy_now,
’current_price’: current_price,
‘auction_type’: ‘b’,
’seller_num_id’: seller_num_id,
‘activity’: ‘’,
‘chargeTypeId’: ‘’,
}
上面标记黑粗的字都是参数
seller_id、photo_url、rootCatId、allow_quantity、seller_num_id、current_price(价格)、buy_now(价格):在商品详情页都可以找的到。
buy_param、skuId、item_id_num、item_id、auction_id:都是url中提取的。
tb_token:是cookie中提取的。
至此,请求购买的提交参数就都有了!

请求购买url: https://buy.tmall.com/order/confirm_order.htm
headers = {
“Origin”: “https://detail.tmall.com”,
"Referer": ref_url,
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36”
}
headers里面的Referer要是你请求的详情页链接。
params = {
"x-itemid": g_data.get(“item_id_num”),
“x-uid”: c.get(“unb”)

}
params里面的参数x-itemid详情页url的id,x-uid是cookie中的unb字段。
带上之前详情页构造的data进行请求就可以进入到订单确认页面了。
在订单却页面要获取提交订单接口的参数:
data = {
"endpoint": endpoint,
"linkage": linkage,
"data": p_data,
"action": action,
"tb_token": tb_token,
"event_submit_do_confirm": event_submit_do_confirm,
"praper_alipay_cashier_domain": praper_alipay_cashier_domain,
"input_charset": input_charset,
"hierarchy": hierarchy,
}
上面所有的黑体字都是必要参数:
endpoint用url解码一下你就会发现是一个字典类型的字段,看样子应该是哪个json返回的,全局搜索一下,你会发现并不是在上面xhr包中,而正是在上一步的确认订单的页面中,同样的方法找到linkage,
data,hierarchy这些都是url编码的你要解码,其中最难的就是data了,最开始发现他是随机的,后面对比了一下页面中的源数据,发现data下面的每一个对象里面的submit字段决定了data参数,就是submit为true时,才是要提交的参数(这个地方我觉得是全部里面最恶心的地方,你亲身体验一下就知道了)。
_tb_token_是cookie中的字段不在赘述
event_submit_do_confirm在确认订单的页面页面中去找。
praper_alipay_cashier_domain是支付方式,也是比较恶心的一个字段,这里直接告诉大家,也是在确认订单页面中全局搜索unitSuffix字段就可以发现了
input_charset、action也是在原页面中找吗,但是好像是固定的
ok,以上就是就是提交订单所需要的全部参数了,这一个步骤是全过程中最难最恶心的地方,需要有耐心,不然你会乱掉的

提交订单url: https://buy.tmall.com/auction/confirm_order.htm也是购买请求的url
headers = {
‘User-Agent’: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36”,
’Referer’: c_url,
‘Origin’: “https://buy.tmall.com”,
}
headers中的Referer是确认购买页面的url。
params = {
’x-itemid’: itemid,
’x-uid’: c.get(“unb”),
‘submitref’: secretvalue,
‘sparam1’: sparam1

}
params中的x-itemid是商品详情页url的id,x-uid是cookie中的字段不在赘述,submitref、sparam1是在确认订单页面中寻找的。

总结: ok,以上就是某宝秒杀的一些重要参数了,在次声明仅供参考!!!自己花了三天时间完成了一个小软件,感觉最难的地方就是那个data了,太恶心了,我之前**猪八戒的聊天窗口都没有这么恶心。最后放上一个作品结果吧(不要说慢,因为我电脑用了6年了,电脑配置非常垃圾,这边网络也就一般)
基于python的某宝秒杀
如果是好点配置加网络的话我估价0.3秒不是问题!
web自动化秒杀源码地址:
https://github.com/A-dying-ape/demo/tree/master/%E6%B7%98%E5%AE%9D%E7%A7%92%E6%9D%801.0