首页
学习
活动
专区
工具
TVP
发布

神破解,Python获取任意QQ历史头像,事实证明都是从屌丝走过来的

叙述

接口是用的别人发现的,很多粉丝都知道我还懂点易语言,不错 已经有大神写过易语言版的了,自己看过,看的一脸蒙蔽,因此自己利用Python写个简单版的方便小白学习 !

获取任意qq历史头像的关键是先获得一个临时的skey和对应的uin。uin就是需要你提前登陆的qq账号,这个东西可以通过浏览器F12开发者工具获取或者使用Fiddler工具抓包。

步骤:

1、手动登陆这个网址:

并输入你的qq号和密码(实在不放心也可以登陆自己的小号)实现获取skey和uin。

2、然后会跳转到快速登陆qq空间这个页面 ,此时在浏览器中按下F12并按下F5刷新,接着点击network选项及network下方的doc,再点击左方的qzone.qq.com

3、然后你就发现skey和uin就存储在cookie中

这个skey不是一劳永逸的,只有几个小时左右的有效期,意味着我们不能在代码中将它写死,这也是难点之一。

我曾试过单纯使用python模拟登陆并获取,发现要post的参数太多 (反正就是不会,如果有人会,我必虚心请教 )导致 无法登陆成功,于是只好结合使用selenium并使用Chrome浏览器的无头模式(说简单就是没有界面的浏览器 )登陆并抓取 cookie,模拟登陆并抓取的。

代码如下:

from selenium import webdriver

import time

import requests

#设置无头模式

opt=webdriver.ChromeOptions()

opt.add_argument('--headless')

b=webdriver.Chrome(options=opt)

#打开目标网址并输入正确的qq和密码

b.get('https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=715030902&daid=70&pt_no_auth=0&s_url=http://qzone.qq.com')

b.find_element_by_xpath('//*[@id="switcher_plogin"]').click()

b.find_element_by_xpath('//*[@id="u"]').send_keys('你的QQ')

b.find_element_by_xpath('//*[@id="p"]').send_keys('你的密码')

b.find_element_by_xpath('//*[@id="login_button"]').click()

#使用sleep防止还未跳转就抓取cookie,具体时间根据自己网速写

time.sleep(2)

#使用replace方法去掉uin最前面的字符 'o'得到正确的uin

my_uin=str(b.get_cookie('uin')['value']).replace('o','')

my_skey=b.get_cookie('skey')['value']

b.quit()

uin='uin=%s'%my_uin

skey='skey=%s'%my_skey

qq=input('输入查询QQ:')

#将上面获取到的uin和skey写入headers中获取返回的json数据

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5702.400 QQBrowser/10.2.1893.400',

'Cookie':uin+skey

}

# 使用try方法 因服务器繁忙获取不到 ,偶尔会发生并抛出异常

try:

resp = requests.get('http://qlist.qlogo.cn/file_list?src=1&uin=%s&md5=&start_idx=1&end_idx=500'%qq,headers=headers)

final_data=resp.json()

print('共%d张'%final_data['total_num'])

#获取每个头像的地址及对应时间戳(可以转换为本地时间,自行发挥)

for a in final_data["file_list"]:

print(a['base_url']+'140',a['timestamp']) #url后面+140即获取小头像,640为大头像,防止获取不到

except KeyError:

print('貌似开小差了,请重试! ')

最后利用python的requests库(强烈推荐使用这个库,简单粗暴)获取就OK了!

效果如图:

附图:

雏形就是以上了,需要做下载图片功能或者封装成函数反复查询的的请自行发挥,太懒了,不想写了 。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180816A0TC6400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券