网页登陆qq空间需要手机验证(qq空间需要验证)

我们添加一个模拟登录QQ空间的例子~ ,让我们愉快地开始吧~

开发工具

Python版本:3.6.4

相关模块:

requests模块;

pycryptodome模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理简介

这里,我们简单介绍下模拟登录QQ空间的原理。一般地,QQ空间可以通过手机QQ扫码登录和账号密码登录。但是账号密码登录有时候需要验证码,为了保证登录的成功率,我们选择扫码登录的方式。

首先,进入登录界面:

'https://xui.ptlogin2.qq.com/cgi-bin/xlogin?proxy_url=https://qzs.qq.com/qzone/v6/portal/proxy.html&daid=5&&hide_title_bar=1&low_login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=549000912&style=22&target=self&s_url=https://qzs.qq.com/qzone/v5/loginsucc.html?para=izone&pt_qr_app=手机QQ空间&pt_qr_link=https://z.qzone.com/download.html&self_regurl=https://qzs.qq.com/qzone/v6/reg/index.html&pt_qr_help_link=https://z.qzone.com/download.html&pt_no_auth=0'
复制代码

简单抓包可以发现二维码登录的接口很可能是这个(ptqrlogin看着就像是二维码登录):

网页登陆qq空间需要手机验证(qq空间需要验证)

更多Python学习资料可以私信关键字【资料】领取

看下请求这个链接需要哪些参数吧:

网页登陆qq空间需要手机验证(qq空间需要验证)

更多Python学习资料可以私信关键字【资料】领取

测试一下,可以发现大部分参数是固定的,即:

u1:https://qzs.qq.com/qzone/v5/loginsucc.html?para=izone
ptredirect: 0
h: 1
t: 1
g: 1
from_ui: 1
ptlang: 2052
js_ver: 19112817
js_type: 1
pt_uistyle: 40
aid: 549000912
daid: 5
ptdrvs: AnyQUpMB2syC5zV6V4JDelrCvoAMh-HP6Xy5jvKJzHBIplMBK37jV1o3JjBWmY7j*U1eD8quewY_
has_onekey: 1
复制代码

所以我们只需要知道以下参数就行啦:

action
login_sig
ptqrtoken
复制代码

很显然,action的构造方式应该是这样的:

'0-0-'+时间戳
复制代码

至于login_sig参数,容易发现可以通过请求以下链接:

网页登陆qq空间需要手机验证(qq空间需要验证)

更多Python学习资料可以私信关键字【资料】领取

然后在返回的cookies里得到login_sig参数:

网页登陆qq空间需要手机验证(qq空间需要验证)

更多Python学习资料可以私信关键字【资料】领取

而请求:

复制代码

需要携带的参数为:

网页登陆qq空间需要手机验证(qq空间需要验证)

更多Python学习资料可以私信关键字【资料】领取

通过测试可以发现上面这些参数都是固定的。最后就剩下ptqrtoken这个参数啦,全局搜索一下,可以发现ptqrtoken这个参数在某个js文件里写了计算方式:

网页登陆qq空间需要手机验证(qq空间需要验证)

更多Python学习资料可以私信关键字【资料】领取

其中,hash33的js代码为:

function hash33(t) {
    for (var e = 0, i = 0, n = t.length; i < n; ++i)
        e += (e << 5) + t.charCodeAt(i);
    return 2147483647 & e
}
复制代码

转为python代码就是:

def decryptQrsig(qrsig):
    e = 0
    for c in qrsig:
      e += (e << 5) + ord(c)
    return 2147483647 & e
复制代码

那么,现在的问题就是qrsig这个参数如何获得呢?和login_sig参数类似,容易发现请求以下这个链接:

网页登陆qq空间需要手机验证(qq空间需要验证)

更多Python学习资料可以私信关键字【资料】领取

在返回的cookies里可以得到qrsig这个参数的值:

网页登陆qq空间需要手机验证(qq空间需要验证)

更多Python学习资料可以私信关键字【资料】领取

而请求:

复制代码

需要携带的参数如下图所示:

网页登陆qq空间需要手机验证(qq空间需要验证)

更多Python学习资料可以私信关键字【资料】领取

除了t其他参数都是不变的,感觉t像个随机数(因为测试了下,发现t就算一直保持不变也没关系),既然影响不大,就懒得继续分析t到底是个啥了,就当是个随机数呗(反正位数也都是16位)。

OK,到此为止,我们大概已经了解了整个模拟登录的流程了,那就开始边写代码边进一步明确该流程呗~首先自然是获得login_sig参数:

params = {
    'proxy_url': 'https://qzs.qq.com/qzone/v6/portal/proxy.html',
    'daid': '5',
    'hide_title_bar': '1',
    'low_login': '0',
    'qlogin_auto_login': '1',
    'no_verifyimg': '1',
    'link_target': 'blank',
    'appid': '549000912',
    'style': '22',
    'target': 'self',
    's_url': 'https://qzs.qq.com/qzone/v5/loginsucc.html?para=izone',
    'pt_qr_app': '手机QQ空间',
    'pt_qr_link': 'https://z.qzone.com/download.html',
    'self_regurl': 'https://qzs.qq.com/qzone/v6/reg/index.html',
    'pt_qr_help_link': 'https://z.qzone.com/download.html',
    'pt_no_auth': '0'
    }
res = self.session.get(self.xlogin_url, headers=self.headers, verify=False, params=params)
all_cookies.update(requests.utils.dict_from_cookiejar(res.cookies))
pt_login_sig = all_cookies['pt_login_sig']
复制代码

然后获得ptqrtoken参数:

params = {
      'appid': '549000912',
      'e': '2',
      'l': 'M',
      's': '3',
      'd': '72',
      'v': '4',
      't': str(random.random()),
      'daid': '5',
      'pt_3rd_aid': '0'
    }
res = self.session.get(self.qrshow_url, headers=self.headers, verify=False, params=params)
all_cookies.update(requests.utils.dict_from_cookiejar(res.cookies))
ptqrtoken = self.__decryptQrsig(all_cookies['qrsig'])
复制代码

同时,在请求上述链接的过程中,也就是:

复制代码

我们还可以获得二维码图片(即res.content其实就是二维码的图片数据),并将其显示出来:

saveImage(res.content, 'qrcode.jpg')
showImage('qrcode.jpg')
复制代码

接着我们通过不断请求一开始发现的二维码登录链接,即:

复制代码

来检测二维码当前的状态:

while True:
  params = {
        'u1': 'https://qzs.qq.com/qzone/v5/loginsucc.html?para=izone',
        'ptqrtoken': ptqrtoken,
        'ptredirect': '0',
        'h': '1',
        't': '1',
        'g': '1',
        'from_ui': '1',
        'ptlang': '2052',
        'action': '0-0-' + str(int(time.time())),
        'js_ver': '19112817',
        'js_type': '1',
        'login_sig': pt_login_sig,
        'pt_uistyle': '40',
        'aid': '549000912',
        'daid': '5',
        'ptdrvs': 'AnyQUpMB2syC5zV6V4JDelrCvoAMh-HP6Xy5jvKJzHBIplMBK37jV1o3JjBWmY7j*U1eD8quewY_',
        'has_onekey': '1'
      }
  res = self.session.get(self.qrlogin_url, headers=self.headers, verify=False, params=params)
  if '登录成功' in res.text:
    break
  elif '二维码已失效' in res.text:
    raise RuntimeError('Fail to login, qrcode has expired...')
  time.sleep(2)
复制代码

若登录成功,则用该请求返回的链接来更新session的cookies从而获得最终的QQ空间登录会话对象:

all_cookies.update(requests.utils.dict_from_cookiejar(res.cookies))
qq_number = re.findall(r'&uin=(.+?)&service', res.text)[0]
print('[INFO]: Account -> %s, login successfully...' % qq_number)
url_refresh = res.text[res.text.find('http'): res.text.find('pt_3rd_aid=0')] + 'pt_3rd_aid=0'
self.session.cookies.update(all_cookies)
res = self.session.get(url_refresh, allow_redirects=False, verify=False)
all_cookies.update(requests.utils.dict_from_cookiejar(res.cookies))
self.session.cookies.update(all_cookies)

END

感谢大家的支持和喜欢,小编会每天分享更多Python学习的干货知识给大家,所以大家别忘了关注小编哦。

更多Python爬虫、数据分析、办公自动化、全栈开发、人工智能学习资@林夕编程关键字【资料】领取

网页登陆qq空间需要手机验证(qq空间需要验证)

本站部分内容由互联网用户自发贡献,该文观点仅代表作者本人,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如发现本站有涉嫌抄袭侵权/违法违规等内容,请联系我们举报!一经查实,本站将立刻删除。

相关推荐

  • 非诚勿扰张丹丹资料(张丹丹律师个人资料简介)

    “巾帼风采录”系列报道之五 张丹丹:刑侦战线娇艳绽放的玫瑰 张丹丹正在清点查获的赃物。赵亮 摄 环渤海新闻网专稿 午后,路南公安分局刑警大队的楼道里传来急促的脚步声。办公室的门应声而开,一位干练、豪爽的女警官快步而来。 她是张丹丹,一名刑警。 她是路南警方刑侦一线唯一的女侦查员。 她曾在派出所案件查处中队摸爬滚打,练就过硬的业务素质; 她曾在怀孕初期,奔赴抓…

    2023-08-24
  • 刘秀和阴丽华之间的爱情故事,刘秀娶了二婚的阴丽华

    刘秀在长安求学期间,一次他走过一条大街,看见一支车队浩浩荡荡穿过长安城的大街,场面甚是壮观,一打听他才知道这是执金吾的车队,执金吾在汉代是卿一级的高官,类似于现代的首都警备区司令。执金吾每次出行时都有两百多骑兵、五百二十名持戟甲士相随,场面甚是壮观。 想到自己当年到长安求学还是和同学一起出资买了一辆客货两用的驴车,这与执金吾的车队相比,可谓是天壤之别,他为这…

    2023-07-19 知识百科
  • 诛仙3蕴灵符怎么获得(诛仙boss坐标大全)

    诛仙3莹灵位莹灵位坐标介绍 怎样才能触发任务,莹灵在哪里,荧灵要多长时间才能触发任务?相信大家对这个的了解都还不是很清楚吧,好奇的就跟上小编的步伐去了解一下吧。 河阳大门口,战场报名使者对面的花丛,河阳接凶咒npc边的大树,知道的坐标就这些。看任务描述啊,好几个地方呢,周围走动走动,可能坐标没准确,不容易触发,去台阶上~ 靠着中州使者那里,仔细看有个纸糊的等…

    2023-08-18
  • 我是陈欧我为自己代言(聚美优品陈欧的广告词)

    谁还记得几年前那个经典的广告词,“我是陈欧我为自己代言”。阿里京东是电商的老大,在他们的天下,聚美该何去何从? 聚美成长的一切都离不开陈欧,8年的时间,聚美优品进化不停,创新不止。运营上,聚美最新提出了限时折扣,每天推出几款折扣商品,吸引了大批的女性用户。 在阿里京东的压迫下,陈欧认识到再不改变,只有死路一条,提出了急速免税店,瞬间大卖,可谓是大快人心啊! …

    2023-08-15 知识百科
  • 东莞职业技术学院介绍,怎么连接东莞职业技术学院校园网

    择校菌推出【走进大学序列专题推文】—【东莞职业技术学院】,文章内容包含:学校的性质、学费、宿舍费、招办电话、春季高考(学考)录取分数、学校环境、宿舍环境、学校饭堂、学校特色一切是你最想要的信息。 学校名称:东莞职业技术学院 学校代码:14263 学校属性:专科【公办】 学校地区:东莞市松山湖(校本部)、东莞市道滘镇(卫生健康学院/西校区)、东莞市大岭山镇(建…

    2023-06-06 知识百科
  • 赵本山悼念于月仙(于月仙的追悼仪式)

    辽宁民间艺术团发讣告悼念于月仙:全体演职人员泪如雨下,赵本山夫妇悲痛万分——引言。 说全体演职人员泪如雨下,并不是夸张。这句话是写在辽宁民间艺术团发的讣告文字里的。 在悼念于月仙的文字中,辽宁民间艺术团的公告里写道:在第一时间得知于月仙因车祸离世的噩耗之后,赵本山夫妇悲痛欲绝,也立刻派出相关工作人员赶赴内蒙古阿拉善地区,协助于月仙的家人处理后事,而辽宁民间艺…

    2023-08-21 知识百科
  • 赵薇许大佬(和赵薇有关系的许老虎)

    《两只老虎》上映了。葛优、乔杉、范伟、闫妮、潘斌龙,还有赵薇等一众好演员一齐上阵,许是因为影片的演员阵容太过于强大,影片票房的号召力还不错,首日上映便获得了票房冠军。《两只老虎》由导演李非执导,赵薇监制。不过今天我们不聊这部电影,今天我们来聊一聊作为演员身份的赵薇。   这部戏中,赵薇饰演的周原与葛优饰演的张成功之间的那阵纠葛里面,笑点与泪点共存,…

    2023-07-29 知识百科
  • 中国古代鸡兔同笼问题(鸡兔同笼问题及答案)

    记载了这样一个有趣的问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何? 意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔?这就是我国最古老的鸡兔同笼问题!我们知道鸡兔同笼问题有公式: 鸡的只数= (兔的脚数 × 总只数 – 总脚数)÷(兔的脚数 – 鸡的脚数) 兔的只数…

    2023-09-16
  • 黄维德说伊能静主动牵手(伊能静和黄维德好了多久)

    娱妹妹最想写的明星名单里,黄维德一直榜上有名。这次是因为《琅琊榜》里的誉王一角。 以至于后来《琅琊榜》在全国做宣传时,除了北京卫视那场是因为卫视方力邀黄维德一定要到场,其它场黄维德统统缺席,坊间猜测,黄维德是不是被片方封杀了? 爱八卦的人熟识黄维德,是他跟伊能静那次著名的“牵手门”,   当时伊能静尚未与哈林离婚,就被媒体拍到了这张“出轨照”, 青…

    2023-08-01 知识百科
  • 十部必看经典网游小说(好看的网游小说排行榜)

    上一期说过献歌的万订变身文《这个网游策划果然有问题》在今天完结了,其实比较巧的是,“初恋璀璨如夏花”的养老文《我真的长生不老》也在今天完结了。说实话看到小说变成完本状态我还挺意外的。 这本小说据说是《我真的长生不老》的前传作品,至于是否如此,我也没去求证,有在看的小伙伴或许可以说说。 因为之前夏花娘摆烂,连续双开了几本小说成绩都比较差,而他又不愿意写下去,就…

    2023-08-01