標籤:

python中動態獲取cookies

在爬蟲中,我們經常要使用cookies保持登陸,一般我們使用urllib2構建cookies,這次換個姿勢,用phantomjs動態獲取cookies。

PhantomJS 是一個基於 WebKit 的伺服器端 JavaScript API。它全面支持web而不需瀏覽器支持,其快速,原生支持各種Web標準: DOM 處理, CSS 選擇器, JSON, Canvas, 和 SVG。 PhantomJS 可以用於 頁面自動化 , 網路監測 , 網頁截屏 ,以及 無界面測試 等。

接下來我們上代碼:

要在python中調用phantomjs 需要用到 selenium,

這裡以aso100 關鍵詞排名網站為例子

from selenium import webdriver

import time

def get_cookies():

url = aso100.com/account/sign

#service_args 可以傳入phantomjs 的參數,這裡是ssl認證

drive = webdriver.PhantomJS(service_args=[--ssl-protocol=any])

drive.get(url)

drive.find_element_by_id(username).send_keys(yourname)

drive.find_element_by_id(password).send_keys(yourpassword)

#截圖登錄界面,獲取到驗證碼

drive.save_screenshot(aso100.png)

code = input(請輸入驗證碼>>>>)

drive.find_element_by_id(code).send_keys(code)

drive.find_element_by_id(submit).click()

#這一步很重要,需要等待phantomjs 載入完再去取得cookies

time.sleep(5)

cookie_list = drive.get_cookies()

cookie_dict = {}

for cookie in cookie_list:

cookie_dict[cookie[name]] = cookie[value]

drive.quit()

# print(cookie_dict)

return cookie_dict

記住phantomjs是一個沙盒操作,當傳遞了賬號密碼一定需要調用sleep等待一下這樣才能獲取到

cookies;

(不過這是一個半自動的。。因為驗證碼那塊的識別需要自己打開aso100.png然後輸入,這一塊涉及到了圖像處理識別,我也很無奈啊)

當然phantomjs還有很多其他方法操作DOM,例如class,或者xpath。

以上我們就獲取到了cooikes,使用requests的時候傳入就好了,每個網站的cookies存活時間都不一樣,過期了再調用一下就好啦~

這是我的博客:daixk.github.io/ (搭好沒多久。。)


推薦閱讀:

黃哥Python,從一個簡單問題說起
Tornado 非同步非阻塞淺析
黃哥Python,2017-9-22出題了。
人人都愛數據科學家!Python數據科學精華實戰課程系列教程連載 ----長期更新中,敬請關注!

TAG:Python |