-
Notifications
You must be signed in to change notification settings - Fork 0
/
淘宝抢购.py
150 lines (137 loc) · 10.5 KB
/
淘宝抢购.py
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)