當(dāng)前位置:博客首頁>>Python >> 閱讀正文

python+selenium自動登錄qq空間并下載相冊

作者: 鄭曉 分類: Python 發(fā)布于: 2017-08-22 14:38 瀏覽:18,104 評論(13)


基于selenium的自動登錄qq空間并遍歷所有相冊及相片的功能。只能訪問自己或好友(有訪問權(quán)限)的相冊,好友有密碼的相冊不可能。。。這里只是介紹流程,所以只是實(shí)現(xiàn)了遍歷,并未實(shí)現(xiàn)圖片文件的下載保存。讀取相冊信息是請求的手機(jī)版qq空間的相冊相關(guān)接口,其中寫死了只遍歷前50個(gè)相冊,可以自己改。

腳本并未處理任何可能出現(xiàn)的錯(cuò)誤,請自己完善。

在環(huán)境: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()

#實(shí)例化出瀏覽器開始登錄
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計(jì)算出qzonetoken
while True:
qzonetoken = driver.execute_script("return window.shine0callback")
if qzonetoken:
break
time.sleep(0.1)
#讀取cookie后關(guān)閉瀏覽器
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']

#計(jì)算gtk
e = 5381
for i in range(len(skey)):
e = e + (e<<5)+ord(skey[i])g_tk = str(2147483647 & e)###################### yjfs.org.cn #######################請求中添加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 '圖片數(shù)量:' + str(album['pic']['albumnum']) print '開始下載相冊圖片:' #讀取當(dāng)前相冊中的圖片列表 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

以下是運(yùn)行截屏,右鍵圖片在新標(biāo)簽頁打開,可以高清~

? ? ? ?

本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進(jìn)行許可,轉(zhuǎn)載時(shí)請注明出處及相應(yīng)鏈接。

本文永久鏈接: http://yjfs.org.cn/python-selenium-qqzone-album.html

python+selenium自動登錄qq空間并下載相冊:目前有13 條留言

用戶評論頭像 111發(fā)表于 2018年05月14日 23:20[回復(fù)]

你好,這個(gè)不能下載原圖呢

用戶評論頭像 泉水發(fā)表于 2017年11月29日 13:24[回復(fù)]

這個(gè)可以下載QQ空間相冊里的視頻嗎

    用戶評論頭像 鄭曉發(fā)表于 2017年11月29日 13:28[回復(fù)]

    這個(gè)是不能的,僅僅是抓相冊的圖片。

      用戶評論頭像 泉水發(fā)表于 2017年11月29日 13:29[回復(fù)]

      那有抓取QQ空間相冊里的視頻有啥招,請教教下

        用戶評論頭像 鄭曉發(fā)表于 2017年11月29日 14:05[回復(fù)]

        簡單測了下,可以下載到相冊中的視頻,視頻地址在最后一步的photo_datas中,可以打印該json查看。

          用戶評論頭像 泉水發(fā)表于 2017年11月30日 16:51[回復(fù)]

          又發(fā)現(xiàn)個(gè)問題,獲取不全,比如相冊里有990個(gè)文件,但是下載下來的只有200個(gè)文件

            用戶評論頭像 鄭曉發(fā)表于 2017年11月30日 16:53[回復(fù)]

            自行處理翻頁問題……

              用戶評論頭像 泉水發(fā)表于 2017年11月30日 21:39[回復(fù)]

              額額,菜鳥一個(gè),對這個(gè)JSON不熟,不知道哪個(gè)是分頁的,請教下

用戶評論頭像 云南旅游發(fā)表于 2017年10月02日 15:19[回復(fù)]

5cfa42dabccee7294f4059df34bafcc0 誰能幫我解個(gè)md5

    用戶評論頭像 鄭曉發(fā)表于 2017年10月06日 12:18[回復(fù)]

    你可以去網(wǎng)上的解密md5網(wǎng)站試試,md5解密現(xiàn)在都是用的彩虹表反查,哈希算法直接解密還是別想了。

用戶評論頭像 zh30發(fā)表于 2017年08月26日 01:51[回復(fù)]

大神 我的輸出相冊名都是亂碼 這是腫么回事啊 要命了啊

    用戶評論頭像 鄭曉發(fā)表于 2017年08月28日 10:45[回復(fù)]

    亂碼可能只是文件編碼問題吧。。

用戶評論頭像 zh30發(fā)表于 2017年08月26日 01:34[回復(fù)]

下載保存要腫么弄呢 求大神點(diǎn)撥一下~

發(fā)表評論

change vcode