由于技术不够,整不住狗东的登录接口参数,所以只能另辟蹊径。
账号密码自动化登录滑块检测太验证,搞不定。于是就有了这个扫码登录的代码。
一共分为3各部分,(1)获取登录需要扫码的图片 (2)轮询查看是否已经扫码 (3)获取登录的cookies
都是简单的抓包的,不做过多解释,有不懂得直接留言就成,看到会回复,话不多说 直接上代码
def get_login_image():
while True:
millis = int(round(time.time() * 1000))
#获取验证码图片
img_url = 'https://qr.m.jd.com/show?appid=133&size=147&t=()'.format(millis)
session = requests.session()
session.headers["Accept"] = "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8"
session.headers["Accept-Encoding"] = "gzip, deflate, br"
session.headers["Accept-Language"] = "zh-CN,zh;q=0.9"
session.headers["Connection"] = "keep-alive"
session.headers["referer"] = "https://passport.jd.com/"
response = session.get(img_url)
image = Image.open(BytesIO(response.content))
image.show()
html_set_cookie = requests.utils.dict_from_cookiejar(session.cookies)
session.cookies['wlfstk_smdl'] = html_set_cookie['wlfstk_smdl']
session.cookies['QRCodeKey'] = html_set_cookie['QRCodeKey']
millis = int(round(time.time() * 1000))
num = random.random() * 10000000
#轮询扫码状态
check_url = 'https://qr.m.jd.com/check?callback=jQuery{}&appid=133&token={}&_={}'.format(math.floor(num),
html_set_cookie[
'wlfstk_smdl'],
millis)
response = session.get(check_url)
print(response.text)
if '200' in response.text:
print('登录成功')
break
if '201' not in response.text:
print('二维码过期')
continue
time.sleep(1)
#获取登录cookies
ticket=re.findall('"ticket" : "(.*?)"',response.text)
login_url='https://passport.jd.com/uc/qrCodeTicketValidation?t={}&ReturnUrl=http://jingyin.jd.com'.format(ticket)
response=session.get(login_url)
if 'https://jingyin.jd.com/' in response.text:
print('登录成功')
html_set_cookie = requests.utils.dict_from_cookiejar(session.cookies)
session.cookies['TrackID'] = html_set_cookie['TrackID']
session.cookies['thor'] = html_set_cookie['thor']
session.cookies['pinId'] = html_set_cookie['pinId']
session.cookies['pin'] = html_set_cookie['pin']
session.cookies['unick'] = html_set_cookie['unick']
session.cookies['ceshi3.com'] = html_set_cookie['ceshi3.com']
session.cookies['_tp'] = html_set_cookie['_tp']
session.cookies['logining'] = html_set_cookie['logining']
session.cookies['_pst'] = html_set_cookie['_pst']
cookies=''
for item in session.cookies:
cookies+=item.name+'='+item.value+";"
return cookies