1. 程式人生 > >python+selenium自動登入qq空間並下載相簿

python+selenium自動登入qq空間並下載相簿

轉載:https://www.zh30.com/python-selenium-qqzone-album.html

注:本文為轉載,如有侵權請告知,文章將予以刪除

 

基於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

以下是執行截圖,右鍵圖片在新標籤頁開啟,可以高清~