当前位置:博客首页>>Python >> 阅读正文

python+selenium自动登录qq空间并下载相册

作者: 郑晓 分类: Python 发布于: 2017-08-22 14:38 浏览:17,115 评论(13)


基于selenium的自动登录qq空间并遍历所有相册及相片的功能。只能访问自己或好友(有访问权限)的相册,好友有密码的相册不可能。。。这里只是介绍流程,所以只是实现了遍历,并未实现图片文件的下载保存。读取相册信息是请求的手机版qq空间的相册相关接口,其中写死了只遍历前50个相册,可以自己改。

脚本并未处理任何可能出现的错误,请自己完善。

在环境:64位win7+python2.7+selenium3.5.0+chromedriver2.31 下测试通过。


#!coding:utf-8
from selenium import webdriver
import requests,time,json

login_uin = '123456789' #登录qq
pwd = 'zx1233211234567' #登录密码
album_uin = '123456789' #要读取相册的qq

s = requests.Session()

#实例化出浏览器开始登录
driver = webdriver.Chrome()
driver.set_window_size(1000,600)
driver.get('https://mobile.qzone.qq.com')
driver.find_element_by_id('u').clear()
driver.find_element_by_id('u').send_keys(login_uin)
driver.find_element_by_id('p').clear()
driver.find_element_by_id('p').send_keys(pwd)
driver.find_element_by_id('go').click()
#等待浏览器中js计算出qzonetoken
while True:
qzonetoken = driver.execute_script("return window.shine0callback")
if qzonetoken:
break
time.sleep(0.1)
#读取cookie后关闭浏览器
cookies = driver.get_cookies()
driver.quit()

cookies_ = {}
for cookie in cookies:
if cookie['name'] == 'p_skey':
skey = cookie['value']
#s.cookies.set(cookie['name'], cookie['value'])
cookies_[cookie['name']] = cookie['value']

#计算gtk
e = 5381
for i in range(len(skey)):
e = e + (e<<5)+ord(skey[i])g_tk = str(2147483647 & e)###################### www.zh30.com #######################请求中添加cookie,开始读取相册列表requests.utils.add_dict_to_cookiejar(s.cookies, cookies_)url="https://mobile.qzone.qq.com/list?qzonetoken="+qzonetoken+"&g_tk="+g_tk+"&format=json&list_type=album&action=0&res_uin="+album_uin+"&count=50"r = s.get(url);data = json.loads(r.text.encode('utf-8'))for album in data['data']['vFeeds']: print '相册名:'+album['pic']['albumname'].encode('utf-8') print '相册id:'+album['pic']['albumid'].encode('utf-8') print '图片数量:' + str(album['pic']['albumnum']) print '开始下载相册图片:' #读取当前相册中的图片列表 url = "https://h5.qzone.qq.com/webapp/json/mqzone_photo/getPhotoList2?qzonetoken="+qzonetoken+"&g_tk="+g_tk+"&uin="+album_uin+"&albumid="+album['pic']['albumid'].encode('utf-8')+"&ps=0" r = s.get(url) photo_datas = json.loads(r.text.encode('utf-8')) for T in photo_datas['data']['photos']: for pic in photo_datas['data']['photos'][T]: print '图片名:'+pic['picname'].encode('utf-8')+',url:'+pic['1']['url'].encode('utf-8') print "="*10

以下是运行截屏,右键图片在新标签页打开,可以高清~

       

本文采用知识共享署名-非商业性使用 3.0 中国大陆许可协议进行许可,转载时请注明出处及相应链接。

本文永久链接: https://www.zh30.com/python-selenium-qqzone-album.html

python+selenium自动登录qq空间并下载相册:目前有13 条留言

用户评论头像 111发表于 2018年05月14日 23:20[回复]

你好,这个不能下载原图呢

用户评论头像 泉水发表于 2017年11月29日 13:24[回复]

这个可以下载QQ空间相册里的视频吗

    用户评论头像 郑晓发表于 2017年11月29日 13:28[回复]

    这个是不能的,仅仅是抓相册的图片。

      用户评论头像 泉水发表于 2017年11月29日 13:29[回复]

      那有抓取QQ空间相册里的视频有啥招,请教教下

        用户评论头像 郑晓发表于 2017年11月29日 14:05[回复]

        简单测了下,可以下载到相册中的视频,视频地址在最后一步的photo_datas中,可以打印该json查看。

          用户评论头像 泉水发表于 2017年11月30日 16:51[回复]

          又发现个问题,获取不全,比如相册里有990个文件,但是下载下来的只有200个文件

            用户评论头像 郑晓发表于 2017年11月30日 16:53[回复]

            自行处理翻页问题……

              用户评论头像 泉水发表于 2017年11月30日 21:39[回复]

              额额,菜鸟一个,对这个JSON不熟,不知道哪个是分页的,请教下

用户评论头像 云南旅游发表于 2017年10月02日 15:19[回复]

5cfa42dabccee7294f4059df34bafcc0 谁能帮我解个md5

    用户评论头像 郑晓发表于 2017年10月06日 12:18[回复]

    你可以去网上的解密md5网站试试,md5解密现在都是用的彩虹表反查,哈希算法直接解密还是别想了。

用户评论头像 zh30发表于 2017年08月26日 01:51[回复]

大神 我的输出相册名都是乱码 这是肿么回事啊 要命了啊

    用户评论头像 郑晓发表于 2017年08月28日 10:45[回复]

    乱码可能只是文件编码问题吧。。

用户评论头像 zh30发表于 2017年08月26日 01:34[回复]

下载保存要肿么弄呢 求大神点拨一下~

发表评论

change vcode