Python JD扫码登录的实现

由于技术不够,整不住狗东的登录接口参数,所以只能另辟蹊径。

账号密码自动化登录滑块检测太验证,搞不定。于是就有了这个扫码登录的代码。

一共分为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

 

你可能感兴趣的:(爬虫,前端)