1+ import requests
2+ import random
3+ import time
4+ import os
5+ import json
6+
7+ from PIL import Image
8+
9+ user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
10+
11+ session = requests .session ()
12+
13+
14+ def show_QRcode ():
15+ url = 'https://qr.m.jd.com/show'
16+ params = {
17+ 'appid' : 133 ,
18+ 'size' : 147 ,
19+ 't' : str (int (time .time () * 1000 )),
20+ }
21+ headers = {
22+ 'User-Agent' : user_agent ,
23+ 'Referer' : 'https://passport.jd.com/new/login.aspx' ,
24+ }
25+ resp = session .get (url = url , headers = headers , params = params )
26+
27+ QRcode_path = 'QRcode.png'
28+ with open (QRcode_path , 'wb' ) as f :
29+ for chunk in resp .iter_content (chunk_size = 1024 ):
30+ f .write (chunk )
31+
32+ QRcode = Image .open (QRcode_path )
33+ QRcode .show ()
34+
35+ def check_QRcode ():
36+
37+ url = 'https://qr.m.jd.com/check'
38+ params = {
39+ 'appid' : '133' ,
40+ 'callback' : 'jQuery{}' .format (random .randint (1000000 , 9999999 )),
41+ 'token' : session .cookies .get ('wlfstk_smdl' ),
42+ '_' : str (int (time .time () * 1000 )),
43+ }
44+ headers = {
45+ 'User-Agent' : user_agent ,
46+ 'Referer' : 'https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F' ,
47+ }
48+ resp = session .get (url = url , headers = headers , params = params )
49+ resp_json = parse_json (resp .text )
50+
51+ if 'ticket' in resp_json :
52+ print (resp_json )
53+ return resp_json ['ticket' ]
54+ else :
55+ print (resp_json ['msg' ])
56+ print ('请刷新JD登录二维码!' )
57+ os ._exit (0 )
58+
59+
60+ def validation_QRcode (ticket ):
61+
62+ url = 'https://passport.jd.com/uc/qrCodeTicketValidation'
63+ headers = {
64+ 'User-Agent' : user_agent ,
65+ 'Referer' : 'https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F' ,
66+ }
67+ params = {
68+ 't' : ticket
69+ }
70+ resp = session .get (url = url , headers = headers , params = params )
71+ print (resp .text )
72+
73+
74+ def parse_json (str ):
75+ return json .loads (str [str .find ('{' ):str .rfind ('}' ) + 1 ])
76+
77+
78+ def coupon_list ():
79+ url = 'https://a.jd.com/indexAjax/getCouponListByCatalogId.html'
80+ headers = {
81+ 'User-Agent' : user_agent ,
82+ 'Referer' : 'https://a.jd.com/?cateId=118' ,
83+ }
84+ couponList = []
85+ for i in range (1 , 20 ):
86+ params = {
87+ 'callback' : 'jQuery{}' .format (random .randint (1000000 , 9999999 )),
88+ 'catalogId' : '118' ,
89+ 'page' : str (i ),
90+ 'pageSize' : '9' ,
91+ '_' : str (int (time .time () * 1000 )),
92+ }
93+ try :
94+ resp = session .get (url = url , params = params , headers = headers )
95+ json = parse_json (resp .text )
96+ couponList .extend (json ['couponList' ])
97+ if json ['totalNum' ] == 1 :
98+ continue
99+ else :
100+ break
101+ except Exception :
102+ print ('出错了!' )
103+ return couponList
104+
105+
106+ def get_coupon (coupon_list ):
107+ url = 'https://a.jd.com/indexAjax/getCoupon.html'
108+ headers = {
109+ 'User-Agent' : user_agent ,
110+ 'Referer' : 'https://a.jd.com/?cateId=118' ,
111+ }
112+ for coupon in coupon_list :
113+ params = {
114+ 'callback' : 'jQuery{}' .format (random .randint (1000000 , 9999999 )),
115+ 'key' : coupon ['key' ],
116+ 'type' : '1' ,
117+ '_' : str (int (time .time () * 1000 )),
118+ }
119+ time .sleep (1 )
120+ resp = session .get (url = url , params = params , headers = headers )
121+ print (resp .text )
122+
123+
124+
125+ if __name__ == '__main__' :
126+ show_QRcode ()
127+
128+ time .sleep (10 )
129+
130+ ticket = check_QRcode ()
131+ validation_QRcode (ticket )
132+ coupon_list = coupon_list ()
133+ get_coupon (coupon_list )
0 commit comments