python淘了个宝抢购小帮手

使用方法:
1.运行此软件,复制链接到淘宝搜索框内搜索登录;
2.手机淘宝分享需要抢购的链接;
3.填入收获地址的行政区划代码,要抢购的商品SKUID,开始抢购的时间(13位时间戳);

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import requests, re, time,execjs,random
import urllib.parse
from urllib.parse import unquote

def get_sign(data): ##如果方法失效,第一时间要检查JS文件
with open('test.js', 'r', encoding='utf8') as f:
jscode = f.read()
sign = execjs.compile(jscode)
sign1 = sign.call("sign", data)
return sign1

def 获取参数():
短链接 = input('请输入微信分享链接:')
heard = {
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A365 MicroMessenger/5.4.1 NetType/WIFI'
}
r = requests.get(短链接, headers=heard).text
真实地址 = r[r.find("https://a.m.taobao.com/"):r.find("'", r.find("https://a.m.taobao.com/"))]
tk = 短链接[短链接.find('=') + 1:]
ID = 真实地址[真实地址.find('/i') + 2:真实地址.find('.htm')]
price = 真实地址[真实地址.find('price=') + 6:真实地址.find('&', 真实地址.find('price='))]
suid = 真实地址[真实地址.find('suid=') + 5:真实地址.find('&', 真实地址.find('suid='))]
shareUniqueId = 真实地址[真实地址.find('shareUniqueId=') + 14:真实地址.find('&', 真实地址.find('shareUniqueId='))]
ut_sk = 真实地址[真实地址.find('ut_sk=') + 6:真实地址.find('&', 真实地址.find('ut_sk='))]
un = 真实地址[真实地址.find('un=') + 3:真实地址.find('&', 真实地址.find('un='))]
spm = 真实地址[真实地址.find('spm=') + 4:真实地址.find('&', 真实地址.find('spm='))]
sp_tk = 真实地址[真实地址.find('sp_tk=') + 6:真实地址.find('&', 真实地址.find('sp_tk='))]
bc_fl_src = 真实地址[真实地址.find('bc_fl_src=') + 10:真实地址.find('&', 真实地址.find('bc_fl_src='))]
short_name = 真实地址[真实地址.find('short_name=') + 11:真实地址.find('&', 真实地址.find('short_name='))]
bxsign = 真实地址[真实地址.find('bxsign=') + 7:]
heard = {
'Referer': 'https://h5.m.taobao.com/',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12A365 MicroMessenger/5.4.1 NetType/WIFI'
}
时间戳 = str(int(time.time() * 1000))
r = requests.get(
'https://h5api.m.taobao.com/h5/mtop.taobao.baichuan.smb.get/1.0/?jsv=2.6.2&appKey=12574478&t=1641292896089&sign=e02e24da3b819b99a6d7344bb0c310a8&api=mtop.taobao.baichuan.smb.get&v=1.0&type=originaljson&dataType=jsonp&timeout=10000',
headers=heard).cookies
token = r['_m_h5_tk'][:r['_m_h5_tk'].find('_')]

data = '{' + '"id":"{}","price":"{}","sourceType":"item","suid":"{}","shareUniqueId":"{}","ut_sk":"{}","un":"{}","share_crt_v":"1","un_site":"0","spm":"{}","sp_tk":"{}","bc_fl_src":"{}","cpp":"1","shareurl":"true","short_name":"{}","bxsign":"{}","sm":"{}","app":"weixin","detail_v":"3.5.0","exParams":"'.format(
ID, price, suid, shareUniqueId, ut_sk, un, spm, sp_tk, bc_fl_src, short_name, bxsign,
tk) + r'{\"id\":\"' + ID + r'\",\"price\":\"' + price + r'\",\"sourceType\":\"item\",\"suid\":\"' + suid + r'\",\"shareUniqueId\":\"' + shareUniqueId + r'\",\"ut_sk\":\"' + ut_sk + r'\",\"un\":\"' + un + r'\",\"share_crt_v\":\"1\",\"un_site\":\"0\",\"spm\":\"' + spm + r'\",\"sp_tk\":\"' + sp_tk + r'\",\"bc_fl_src\":\"' + bc_fl_src + r'\",\"cpp\":\"1\",\"shareurl\":\"true\",\"short_name\":\"' + short_name + r'\",\"bxsign\":\"' + bxsign + r'\",\"sm\":\"' + tk + r'\",\"app\":\"weixin\",\"appReqFrom\":\"detail\",\"container_type\":\"xdetail\",\"dinamic_v3\":\"true\",\"supportV7\":\"true\",\"ultron2\":\"true\"}","itemNumId":"' + ID + '","pageCode":"miniAppDetail","_from_":"miniapp"}'

sign = get_sign(token + '&' + 时间戳 + '&12574478&' + data)
url = 'https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?jsv=2.6.2&appKey=12574478&t={}&sign={}&api=mtop.taobao.detail.getdetail&v=6.0&ttid=202012%40taobao_h5_9.17.0&isSec=0&ecode=0&AntiFlood=true&AntiCreep=true&H5Request=true&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data={}'.format(
时间戳, sign, urllib.parse.quote(data))
# 开始获取数据---------------------------------------------
r = requests.get(url, headers=heard).text
categoryId=re.findall(r'categoryId":"(.*?)"', r)[0]
print(categoryId)
sellerId=re.findall(r'sellerId\\\\\\":(.*?),', r)[0]
print(sellerId)
itemId=re.findall(r'&itemId=(.*?)\\', r)[0]
print(itemId)
return itemId,sellerId,categoryId


def generateUmidToken():
umid_token = 'C' + str(int(time.time() * 1000))
umid_token += ''.join(str(random.choice(range(10))) for _ in range(11))
umid_token += str(int(time.time() * 1000))
umid_token += ''.join(str(random.choice(range(10))) for _ in range(3))
return umid_token

def 淘宝扫码登录():
session = requests.Session()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
}
login_url = 'https://login.taobao.com/member/login.jhtml?allp=&wbp=&sub=false&sr=false&c_is_scure=&from=tbTop&type=1&style=&minipara=&css_style=&tpl_redirect_url=\
https%3A//www.taobao.com&popid=&callback=&is_ignore=&trust_alipay=&full_redirect=&need_sign=&sign=×tamp=&from_encoding=&qrLogin=&keyLogin=&newMini2='
getqr_login_url = 'https://qrlogin.taobao.com/qrcodelogin/generateQRCode4Login.do?adUrl=&adImage=&adText=&viewFd4PC=&viewFd4Mobile=&from=tb&appkey=00000000&umid_token={}'
checkqr_login_url = 'https://qrlogin.taobao.com/qrcodelogin/qrcodeLoginCheck.do?lgToken={}&defaulturl=https://www.taobao.com'
session.headers.update(headers)
umid_token = generateUmidToken()
response = session.get(login_url)
response = session.get(getqr_login_url.format(umid_token))
response_json = response.json()
if response_json['success']:
xcode_url = response_json.get('url', '')
lg_token = response_json.get('lgToken', '')
print('复制此链接到某宝搜索进行登录:','https://login.m.taobao.com/qrcodeCheck.htm?lgToken={}&tbScanOpenType=Notification'.format(lg_token))
else:
raise RuntimeError('Fail to login, unable to fetch url of qrcode')
session.headers.update({'Referer': 'https://login.taobao.com/member/login_unusual.htm?user_num_id=2979250577&is_ignore=&from=tbTop&style=\
&popid=&callback=&minipara=&css_style=&is_scure=true&c_is_secure=&tpl_redirect_url=https%3A%2F%2Fwww.\
taobao.com%2F&cr=https%3A%2F%2Fwww.taobao.com%2F&trust_alipay=&full_redirect=&need_sign=¬_duplite_str\
=&from_encoding=&sign=×tamp=&sr=false&guf=&sub=false&wbp=&wfl=null&allp=&loginsite=0&login_type=11&lang\
=zh_CN&appkey=00000000¶m=7nmIF0VTf6m%2Bbx8wuCmPLTEdh1Ftef8%2B5yUA%2FXNtAI%2FfMwadkeaCast40u2Ng0%2FC7Z75s\
OSVLMugWTqKjJ7aA55JYIL%2FPDFJ7zaJhq9XSVUOX%2B1AxQatuIvw4TXGJm1VG4alZ2UohVAAt5WTLYbs5im077nTG%2BOkovORQNtMCEzWKM\
e0xcuienFAhsBhC0V7qIYZJvPGOOEt0tORA8Fv1zYPuOkWEPDFsPwYG5xj4LTKNZt5HSRRHkviiPy9AJ9uC%2Bs7V%2FQ7b6K07YUG1fA3tFwAL\
GnorSUXRdhcXUBBAt6IiyStIkWFWDgJEymOAXOS5RNGlO1EL5ppmpQas7BarrW2Krui4bxV81AJXyxLfnk3MOxI2dUNdO9VQNY0F6a6nk%2FCzUfR\
0NfPRrIoXuZDn2N01A8q5XGrMlWmBCH5%2FSKz6%2F%2BrUx3%2FxQTYWmgV49rVSdtySIHip5PsrXHWXCbHqscdve540l5CUKTT7znsoL45pth%2FosxMUb649Yw1EPAq'})
while True:
response = session.get(checkqr_login_url.format(lg_token))
response_json = response.json()
# --扫码成功
if response_json['code'] == '10006':
# ----检查是否需要安全验证
response = session.get(response_json.get('url', '') + '&umid_token={}'.format(umid_token))
if response.url.find('login_unusual.htm') > -1:
raise RuntimeError('Fail to login, your account requires security verification')
uid, token = re.findall(r'uid=(.*?)&token=(.*?)&', response_json.get('url'))[0]
username = unquote(uid.replace('cntaobao', ''))
break
# --二维码已经失效
elif response_json['code'] == '10004':
raise RuntimeError('Fail to login, qrcode has expired')
# --正在扫码或其他原因
elif response_json['code'] in ['10001', '10000']:
pass
time.sleep(1)

cookies_dict = requests.utils.dict_from_cookiejar(session.cookies)
print('[INFO]: Account -> %s, login successfully' % username)
infos_return = {'username': username, 'uid': uid, 'token': token}
infos_return.update(response_json)
print(cookies_dict)
return cookies_dict



cookies=淘宝扫码登录()
tb_token=cookies['_tb_token_']
tsid = cookies['t']
itemId,sellerId,categoryId=获取参数() # https://m.tb.cn/h.fQxjOfl?tk=Igyd2bCwOtM
deliveryCityCode = input('请输入您当地的邮政编码:')#行政区划代码 比如汕头就是440500
skuId = input('请输入商品SKUID:') #'4440144444848'
heard = {'referer': 'https://detail.tmall.com/item.htm?&id={}&skuId={}'.format(itemId, skuId),
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36',
}


抢购时间=input('请输入抢购时间:')
while True:
print(type(抢购时间))
r = requests.get('http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp').text
时间戳=int(r[-16:-3])
if int(抢购时间)<=时间戳:
#ks = str(time.time() * 1000)
ks =时间戳
r = requests.get(
'https://fbuy.tmall.com/cart/addCartItems.do?_tb_token_={}&add=%7B%22deliveryCityCode%22%3A{}%2C%22campaignId%22%3A0%2C%22from_etao%22%3A%22%22%2C%22umpkey%22%3A%22%22%2C%22items%22%3A%5B%7B%22itemId%22%3A%22{}%22%2C%22skuId%22%3A%22{}%22%2C%22iChannel%22%3A%22%22%2C%22quantity%22%3A1%2C%22serviceInfo%22%3A%22%22%2C%22extraAttribute%22%3A%7B%7D%7D%5D%7D&tsid={}&itemId={}&sellerId={}&categoryId={}&root_refer=&item_url_refer=&noAnim=true&_ksTS={}_787&callback=jsonp788'.format(
tb_token, deliveryCityCode, itemId, skuId, tsid, itemId, sellerId, categoryId, ks), headers=heard,
cookies=cookies)
print(r.text)
break
print('时间未到,继续等待')
time.sleep(0.5)