Python模拟登录(python模拟登录人人网代码解析)

Python模拟登录之QQ空间模拟登录

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

前言

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

开发工具

Python版本:3.6.4

相关模块:

requests模块;

pycryptodome模块;

以及一些Python自带的模块。

环境搭建

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

原理简介

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

首先,进入登录界面:

'***/cgi-bin/xlogin?proxy_url=***/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=***/qzone/v5/loginsucc.html?para=izone&pt_qr_app=手机QQ空间&pt_qr_link=***/download.html&self_regurl=***/qzone/v6/reg/index.html&pt_qr_help_link=***/download.html&pt_no_auth=0'复制代码

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

Python模拟登录之QQ空间模拟登录

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

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

Python模拟登录之QQ空间模拟登录

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

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

u1:***/qzone/v5/loginsucc.html?para=izoneptredirect: 0h: 1t: 1g: 1from_ui: 1ptlang: 2052js_ver: 19112817js_type: 1pt_uistyle: 40aid: 549000912daid: 5ptdrvs: AnyQUpMB2syC5zV6V4JDelrCvoAMh-HP6Xy5jvKJzHBIplMBK37jV1o3JjBWmY7j*U1eD8quewY_has_onekey: 1复制代码

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

actionlogin_sigptqrtoken复制代码

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

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

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

Python模拟登录之QQ空间模拟登录

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

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

Python模拟登录之QQ空间模拟登录

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

而请求:

***/cgi-bin/xlogin?复制代码

需要携带的参数为:

Python模拟登录之QQ空间模拟登录

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

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

Python模拟登录之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参数类似,容易发现请求以下这个链接:

Python模拟登录之QQ空间模拟登录

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

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

Python模拟登录之QQ空间模拟登录

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

而请求:

***/ptqrshow复制代码

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

Python模拟登录之QQ空间模拟登录

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

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

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

params = { 'proxy_url': '***/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': '***/qzone/v5/loginsucc.html?para=izone', 'pt_qr_app': '手机QQ空间', 'pt_qr_link': '***/download.html', 'self_regurl': '***/qzone/v6/reg/index.html', 'pt_qr_help_link': '***/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'])复制代码

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

***/ptqrshow复制代码

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

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

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

***/ptqrlogin复制代码

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

while True: params = { 'u1': '***/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爬虫、数据分析、办公自动化、全栈开发、人工智能学习资@林夕编程关键字【资料】领取

Python模拟登录之QQ空间模拟登录

作者:戴沐白
链接:https://juejin.cn/post/6953443849482010638
来源:掘金

(0)
上一篇 2023年2月11日 上午11:21
下一篇 2023年2月11日 上午11:29

相关推荐

  • 五音不全如何学唱歌的基本功(五音不全如何学唱歌速成)

    唱歌可以陶冶情操,有利于培养健康的生活情趣,对于大多数人而言,都是听得多唱得少,很多人自我调侃说“我五音不全不会唱歌”。实际上不存在五音不全,缺少的是练习方式和正确的技巧。五音不全…

    2023年2月10日
    0
  • 旅客乘车携带水果刀标准,乘动车对水果刀的规定

    本文目录 1. 旅客乘车携带水果刀标准 2. 乘动车对水果刀的规定 3. 绿皮火车能带水果刀吗 4. 七八厘米左右的水果刀能过安检吗 旅客乘车携带水果刀标准 70毫米。 根据中国公…

    生活百科 2023年12月30日
    0
  • 小狗狗粪便有粘液是不是肠胃炎

    导读:犬出血性胃肠炎及时治疗,可以在一定程度上降低致命率。当饲主一旦发现小狗粪便有异常,请及时就医。 犬出血性胃肠炎的真实病例 一直以来,三狗都有喜欢到处逛宠物论坛的习惯,喜欢研究…

    2023年6月8日
    0
  • 李白《早发白帝城》一诗的体式是

    朝辞白帝彩云间, 千里江陵一日还。 两岸猿声啼不住, 轻舟已过万重山。 首先,关于作者李白,我们讲《静夜思》时,已经做过介绍;这里只讲《早发白帝城》的写作背景。多数评论家如马茂元、…

    2023年3月12日
    0
  • 热射病多长时间能好

    在炎热的夏季,人们往往会遭遇热射病的问题。热射病是一种常见的疾病,是由于身体在高温下暴露时间过长而引起的。病情的严重程度不同,治愈时间也有所不同。 一般来说,轻度的热射病需要休息和…

    生活百科 2023年6月19日
    0
  • 长城为什么修在崇山峻岭中,长城在崇山峻岭间蜿蜒盘旋比喻句

    长城是古代中国在不同时期为抵御塞北游牧部落联盟侵袭而修筑的规模浩大的军事工程的统称。长城东西绵延上万华里,因此又称作万里长城。现存的长城遗迹主要为始建于14世纪的明长城,西起嘉峪关…

    2023年2月19日
    0
  • 部编版三年级下册生字组词汇总表

    最新部编版三年级语文下册各课生字组词汇总 第一单元 第1课 古诗三首 融róng 融化 融洽 通融 金融 燕 yàn 燕窝 燕子 海燕 燕雀 (yān 燕赵 燕山 燕京) 鸳 yu…

    2023年6月13日
    0
  • 骑自行车后面车一直按喇叭怎么办

    首先我们要考虑自身安全,让一让大家都方便,何必做无聊的人呢?早一会,晚一会又能如何呢?我们不在意这几分钟吧!毕竟安全才是第一位,毕竟自行车也不是什么大车,随手颠起来就能让开一条路,…

    生活百科 2023年5月18日
    0
  • 豪爵gn1258性能怎么样,豪爵gn1258s

    豪爵GN125-8性能怎么样? 题主对于车型的了解可能出现了一些偏差,因为豪爵GN125并没有-8系列车型,从某种意义上来说豪爵GN125和豪爵HJ125—8属于两个车系,虽然它们…

    2023年5月31日
    0
  • 火漆为什么不能随便送人

    在古代,火漆是一种非常重要的物品。它被广泛用于封存信件和文件,作为防伪的重要措施。然而,为什么火漆不能随便送人呢? 首先,火漆具有“私密性”。在古代,火漆被视为一种非常私密的物品,…

    生活百科 2023年9月10日
    0

发表评论

登录后才能评论