python+selenium自動(dòng)登錄qq空間并下載相冊(cè)
作者: 鄭曉 分類(lèi): Python 發(fā)布于: 2017-08-22 14:38 瀏覽:18,173 評(píng)論(13)
基于selenium的自動(dòng)登錄qq空間并遍歷所有相冊(cè)及相片的功能。只能訪問(wèn)自己或好友(有訪問(wèn)權(quán)限)的相冊(cè),好友有密碼的相冊(cè)不可能。。。這里只是介紹流程,所以只是實(shí)現(xiàn)了遍歷,并未實(shí)現(xiàn)圖片文件的下載保存。讀取相冊(cè)信息是請(qǐng)求的手機(jī)版qq空間的相冊(cè)相關(guān)接口,其中寫(xiě)死了只遍歷前50個(gè)相冊(cè),可以自己改。
腳本并未處理任何可能出現(xiàn)的錯(cuò)誤,請(qǐng)自己完善。
在環(huán)境:64位win7+python2.7+selenium3.5.0+chromedriver2.31 下測(cè)試通過(guò)。
#!coding:utf-8
from selenium import webdriver
import requests,time,json
login_uin = '123456789' #登錄qq
pwd = 'zx1233211234567' #登錄密碼
album_uin = '123456789' #要讀取相冊(cè)的qq
s = requests.Session()
#實(shí)例化出瀏覽器開(kāi)始登錄
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)
###################### m.yjfs.org.cn ######################
#請(qǐng)求中添加cookie,開(kāi)始讀取相冊(cè)列表
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 '相冊(cè)名:'+album['pic']['albumname'].encode('utf-8')
print '相冊(cè)id:'+album['pic']['albumid'].encode('utf-8')
print '圖片數(shù)量:' + str(album['pic']['albumnum'])
print '開(kāi)始下載相冊(cè)圖片:'
#讀取當(dāng)前相冊(cè)中的圖片列表
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è)打開(kāi),可以高清~
本文采用知識(shí)共享署名-非商業(yè)性使用 3.0 中國(guó)大陸許可協(xié)議進(jìn)行許可,轉(zhuǎn)載時(shí)請(qǐng)注明出處及相應(yīng)鏈接。
本文永久鏈接: http://m.yjfs.org.cn/python-selenium-qqzone-album.html
你好,這個(gè)不能下載原圖呢