Python扫码登录保存和验证cookies值——快手篇(二)

一、找到生成登录二维码地址获取参数

  • 利用抓包软件找到二维码地址
loginurl = 'https://id.kuaishou.com/rest/c/infra/ks/qr/start'
  • 通过观察可以获取POST参数
sid: kuaishou.web.cp.api
  • 进行访问获取所需要参数
  • imageData(二维码图片)
  • qrLoginToken
  • qrLoginSignature

headers = {'User-Agent': agent.get_user_agents()}
session = requests.session()
loginurl = 'https://id.kuaishou.com/rest/c/infra/ks/qr/start'
urldata = session.post(loginurl, data={"sid": "kuaishou.web.cp.api"},headers=headers).json()
#输出urldata = {'result': 1, 'expireTime': 1614817576755, 'qrLoginSignature': '3l……', 'imageData': 'iVBORw0KGgo……', 'callback': '', 'qrLoginToken': 'bX……', 'sid': 'kuaishou.web.cp.api'}

  • 获取了二维码图片后进行扫码操作
class showpng(Thread):
    def __init__(self, data):
        Thread.__init__(self)
        self.data = data

    def run(self):
        img = Image.open(BytesIO(self.data))  
        img.show()
        
testpng = base64.b64decode(urldata['imageData'])
t = showpng(testpng)
t.start()
  • 弹出二维码进行扫码确认

二、找到第二个确认链接地址

  • 通过抓包软件我们可以找到确认链接地址
tokenurl = 'https://id.kuaishou.com/rest/c/infra/ks/qr/scanResult'
tokendate = session.post(tokenurl, data={"qrLoginToken": token, "qrLoginSignature": Signat}, headers=headers).json()
#输出tokendate = '{'result': 1, 'user': {'following': True, 'eid': '3x……', 'headurls': [{'cdn': 'tx2.a.yximgs.com', 'url': 'https://……'}, {'cdn': 'js2.a.yximgs.com', 'url': 'htt……'}], 'headurl': 'https……', 'visitorBeFollowed': False, 'user_sex': 'M', 'user_id': 3……, 'user_name': '叶……'}}
'
  • 通过上访问输出可以看出已经获取了登录后的用户信息,但是并没有真正获取到登录后用户Cookies值
  • 我们再继续寻找第二个第三个链接……通过抓包软件我找到三个链接地址,通过层层访问才最终找到真正的cookies值

需要的参数有 qrLoginToken、qrLoginSignature
第一个链接:https://id.kuaishou.com/rest/c/infra/ks/qr/acceptResult
通过第一个链接获取了参数 qrToken,然后进行访问
第二个链接: https://id.kuaishou.com/pass/kuaishou/login/qr/callback
通过第一个链接获取了参数kuaishou.web.cp.api.at,然后再进行访问
第三个链接:https://www.kuaishou.com/account/login/api/verifyToken
最后生成了需要的cookies值

tokenurl = 'https://id.kuaishou.com/rest/c/infra/ks/qr/scanResult'
session.post(tokenurl, data={"qrLoginToken": token, "qrLoginSignature": Signat}, headers=headers)

date = session.post('https://id.kuaishou.com/rest/c/infra/ks/qr/acceptResult', data={"qrLoginToken": token, "qrLoginSignature": Signat, "sid": "kuaishou.web.cp.api"}, verify=False)
date1 = session.post('https://id.kuaishou.com/pass/kuaishou/login/qr/callback', data={"qrToken": date.json()['qrToken'], "sid": "kuaishou.web.cp.api"}, verify=False)
session.post('https://www.kuaishou.com/account/login/api/verifyToken', json={"authToken": date1.json()['kuaishou.web.cp.api.at'], "sid": "kuaishou.web.cp.api"}, verify=False, headers=headers)
        

三、最后保存cookies值并进行验证

完整代码

# -*- coding: utf-8 -*-
import base64
import agent
from threading import Thread
import time
import requests
from io import BytesIO
import http.cookiejar as cookielib
from PIL import Image
import os

requests.packages.urllib3.disable_warnings()

headers = {'User-Agent': agent.get_user_agents()}


class showpng(Thread):
    def __init__(self, data):
        Thread.__init__(self)
        self.data = data

    def run(self):
        img = Image.open(BytesIO(self.data))
        img.show()


def islogin(session):
    try:
        session.cookies.load(ignore_discard=True)
    except Exception:
        pass
    loginurl = session.post("https://cp.kuaishou.com/rest/pc/authority/account/current", json={"kuaishou.web.cp.api_ph": "2ab04b8a59d843e385faa6a4965f0836f53f"}, verify=False, headers=headers).json()
    if loginurl['result'] == 1:
        print('Cookies值有效,无需扫码登录!')
        return session, True
    else:
        print('Cookies值已经失效,请重新扫码登录!')
        return session, False


def kslogin():
    if not os.path.exists('kscookies.txt'):
        with open("kscookies.txt", 'w') as f:
            f.write("")
    session = requests.session()
    session.cookies = cookielib.LWPCookieJar(filename='kscookies.txt')
    session, status = islogin(session)
    if not status:
        loginurl = 'https://id.kuaishou.com/rest/c/infra/ks/qr/start'
        urldata = session.post(loginurl, data={"sid": "kuaishou.web.cp.api"}, headers=headers).json()
        testpng = base64.b64decode(urldata['imageData'])
        token = urldata['qrLoginToken']
        Signat = urldata['qrLoginSignature']
        t = showpng(testpng)
        t.start()
        tokenurl = 'https://id.kuaishou.com/rest/c/infra/ks/qr/scanResult'
        while 1:
            tokendate = session.post(tokenurl, data={"qrLoginToken": token, "qrLoginSignature": Signat}, headers=headers).json()
            if tokendate['result'] == 707:
                print('登录二维码已过期,请重新运行!')
            if tokendate['result'] == 1:
                date = session.post('https://id.kuaishou.com/rest/c/infra/ks/qr/acceptResult', data={"qrLoginToken": token, "qrLoginSignature": Signat, "sid": "kuaishou.web.cp.api"}, headers=headers)
                date1 = session.post('https://id.kuaishou.com/pass/kuaishou/login/qr/callback', data={"qrToken": date.json()['qrToken'], "sid": "kuaishou.web.cp.api"}, headers=headers)
                session.post('https://www.kuaishou.com/account/login/api/verifyToken', json={"authToken": date1.json()['kuaishou.web.cp.api.at'], "sid": "kuaishou.web.cp.api"}, headers=headers)
                print('已确认,登录成功!')
                break
            time.sleep(3)
        session.cookies.save()
    return session


if __name__ == '__main__':
    kslogin()

四、更多文章

  1. 抖音篇(一)
  2. 微视篇(三)
  3. 微信公众号篇(四)
  4. 微博篇(五)
  5. B站篇(六)
  6. 视频号篇(七)
  • 后期小编将开设登录后批量采集各平台数据(点赞、播放量、评论、图片、视频、音乐等)专栏文章!记得关注哟!😜
  • 如果文章能帮到您,愿意给小编点个 👍 吗,么么哒~😘 (●’◡’●)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值