python selenium操作cookie


由於HTTP協議是無狀態協議,所以服務器與客戶端通過http協議通訊時,服務器不能記錄客戶端的信息。

為了解決這個問題,通過 Cookie 和 Session 技術來實現。

Cookie保存在客戶端中

Session保存在服務器中

 

cookie的屬性

一般cookie所具有的屬性,包括:

Domain:域,表示當前cookie所屬於哪個域或子域下面。

對於服務器返回的Set-Cookie中,如果沒有指定Domain的值,那么其Domain的值是默認為當前所提交的http的請求所對應的主域名的。比如訪問 http://www.example.com,返回一個cookie,沒有指名domain值,那么其為值為默認的www.example.com。

Path:表示cookie的所屬路徑。

Expire time/Max-age:表示了cookie的有效期。expire的值,是一個時間,過了這個時間,該cookie就失效了。或者是用max-age指定當前cookie是在多長時間之后而失效。如果服務器返回的一個cookie,沒有指定其expire time,那么表明此cookie有效期只是當前的session,即是session cookie,當前session會話結束后,就過期了。對應的,當關閉(瀏覽器中)該頁面的時候,此cookie就應該被瀏覽器所刪除了。

secure:表示該cookie只能用https傳輸。一般用於包含認證信息的cookie,要求傳輸此cookie的時候,必須用https傳輸。

httponly:表示此cookie必須用於http或https傳輸。這意味着,瀏覽器腳本,比如javascript中,是不允許訪問操作此cookie的。

 

得到cookie

 

#從百度首頁登錄百度賬號,並獲取cookie

from selenium import webdriver
from time import sleep
import json

#啟動chome瀏覽器並訪問百度首頁
option=webdriver.ChromeOptions()
option.add_argument('--start-maximized')
drive=webdriver.Chrome(options=option)
drive.get('http://www.baidu.com')
print(drive.title)

#點擊“登錄”
eled=drive.find_element_by_link_text("登錄")
eled.click()
sleep(2)

#點擊“用戶名登錄”
namelogin=drive.find_element_by_css_selector('p.tang-pass-footerBarULogin')
namelogin.click()
sleep(2)

#輸入用戶名,密碼並登錄
username = drive.find_element_by_id('TANGRAM__PSP_10__userName')
username.send_keys('********')
sleep(1)

password = drive.find_element_by_id('TANGRAM__PSP_10__password')
password.send_keys('********')
sleep(1)

submit = drive.find_element_by_id('TANGRAM__PSP_10__submit')
submit.click()
sleep(3)

#獲取網站cookie
diccookie=drive.get_cookies()
fw=open('baiducookie.txt','w')
json.dump(diccookie,fw)
fw.close()

 

從硬盤讀取cookie,加入到request請求發送服務器。

import time
import json

啟動chome瀏覽器並訪問百度首頁
option=webdriver.ChromeOptions()
option.add_argument('--start-maximized')
drive=webdriver.Chrome(options=option)

drive.get('http://www.baidu.com')
print(drive.title)

fr=open('baidu_cookie.txt','r')
cookielist=json.load(fr)
fr.close()
for cookie in cookielist:
    drive.add_cookie(cookie)
        
sleep(5)
drive.get('http://www.baidu.com')
drive.refresh()

  

通過cookie登錄百度失敗:

Message: unable to set cookie
Message: invalid argument: invalid 'expiry'

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM