Python中Selenium對(duì)Cookie的操作方法
1、Cookie介紹
HTTP協(xié)議是無(wú)狀態(tài)的協(xié)議。一旦數(shù)據(jù)交換完畢,客戶(hù)端與服務(wù)器端的連接就會(huì)關(guān)閉,再次交換數(shù)據(jù)需要建立新的連接,這就意味著服務(wù)器無(wú)法從連接上跟蹤會(huì)話。也就是說(shuō)即使第一次和服務(wù)器連接后并且登錄成功后,第二次請(qǐng)求服務(wù)器依然不能知道當(dāng)前請(qǐng)求是哪個(gè)用戶(hù)。舉個(gè)例子:用戶(hù)A購(gòu)買(mǎi)了一件商品放入購(gòu)物車(chē)內(nèi),當(dāng)再次購(gòu)買(mǎi)商品時(shí),服務(wù)器已經(jīng)無(wú)法判斷該購(gòu)買(mǎi)行為是屬于用戶(hù)A的會(huì)話,還是用戶(hù)B的會(huì)話了。要跟蹤該會(huì)話,必須引入一種機(jī)制。
什么是一次會(huì)話:
用戶(hù)打開(kāi)瀏覽器訪問(wèn)某個(gè)網(wǎng)站, 在這個(gè)網(wǎng)站上瀏覽任意頁(yè)面, 訪問(wèn)完成后將瀏覽器關(guān)閉的過(guò)程稱(chēng)為是一次會(huì)話。
Cookie的出現(xiàn)就是為了解決這個(gè)問(wèn)題,第一次登錄后服務(wù)器后,如果服務(wù)器需要記錄該用戶(hù)狀態(tài),就使用Response向客戶(hù)端瀏覽器頒發(fā)一個(gè)Cookie,瀏覽器會(huì)把Cookie數(shù)據(jù)保存在本地。該用戶(hù)發(fā)送第二次請(qǐng)求的時(shí)候,就會(huì)自動(dòng)的把上次請(qǐng)求存儲(chǔ)的Cookie數(shù)據(jù)自動(dòng)的攜帶給服務(wù)器,服務(wù)器檢查該Cookie存儲(chǔ)name、value等信息,以此來(lái)辨認(rèn)用戶(hù)狀態(tài),服務(wù)器還可以根據(jù)需要修改Cookie的內(nèi)容。Cookie就相當(dāng)于是服務(wù)器給客戶(hù)端們頒發(fā)一個(gè)通行證,每人一個(gè),無(wú)論誰(shuí)訪問(wèn)都必須攜帶自己通行證。這樣服務(wù)器就能從通行證上確認(rèn)客戶(hù)身份,這就是Cookie的工作原理。Cookie存儲(chǔ)的數(shù)據(jù)量有限,不同的瀏覽器有不同的存儲(chǔ)大小,但一般不超過(guò)4KB,因此使用Cookie只能存儲(chǔ)一些小量的數(shù)據(jù)。Cookie的出現(xiàn)彌補(bǔ)HTTP協(xié)議無(wú)狀態(tài)的不足。但是Cookie是存儲(chǔ)在客戶(hù)端的,通過(guò)瀏覽器或者抓包工具很容易就能獲取到,所以非常不安全。
2、Session介紹
Session是另一種記錄客戶(hù)狀態(tài)的機(jī)制,不同的是Cookie保存在客戶(hù)端瀏覽器中,而Session保存在服務(wù)器上??蛻?hù)端瀏覽器訪問(wèn)服務(wù)器的時(shí)候,服務(wù)器把客戶(hù)端信息以某種形式記錄在服務(wù)器上。存儲(chǔ)在服務(wù)器的數(shù)據(jù)會(huì)更加的安全,不容易被竊取??蛻?hù)端瀏覽器再次訪問(wèn)時(shí),只需要從該Session中查找該客戶(hù)的狀態(tài)就可以了。- 如果說(shuō)
Cookie機(jī)制是通過(guò)檢查客戶(hù)身上的“通行證”來(lái)確定客戶(hù)身份的話,那么Session機(jī)制就是通過(guò)檢查服務(wù)器上的“客戶(hù)明細(xì)表”來(lái)確認(rèn)客戶(hù)身份。Session相當(dāng)于程序在服務(wù)器上建立的一份客戶(hù)檔案,客戶(hù)來(lái)訪的時(shí)候只需要查詢(xún)客戶(hù)檔案表就可以了。 Session存儲(chǔ)在服務(wù)器也有一定的弊端,就是會(huì)占用服務(wù)器的資源,但現(xiàn)在服務(wù)器已經(jīng)發(fā)展至今,存儲(chǔ)一些Session信息還是綽綽有余的。
3、Cookie工作原理圖解
如下圖所示:

提示:如果步驟5攜帶的是過(guò)期的cookie或者是錯(cuò)誤的cookie,那么將認(rèn)證失敗,返回至要求身份認(rèn)證頁(yè)面。
記錄Cookie的作用:
- 用戶(hù)第一次登陸時(shí),勾選下次直接登陸或者記住密碼,就是采用記錄
Cookie實(shí)現(xiàn)的。 Cookie內(nèi)記錄用戶(hù)名和密碼(加密)信息,只要請(qǐng)求時(shí)服務(wù)器收到Cookie,識(shí)別成功,默認(rèn)為已登陸。
4、Cookie內(nèi)容參數(shù)說(shuō)明
| 參數(shù) | 描述 |
|---|---|
| name | 必需。規(guī)定 Cookie的名稱(chēng)。 |
| value | 必需。規(guī)定 Cookie的值。 |
| expire | 可選。規(guī)定 Cookie的有效期。 |
| domain | 可選。規(guī)定 Cookie的域名。 |
| path | 可選。規(guī)定 Cookie的服務(wù)器路徑。 |
| secure | 可選。規(guī)定是否通過(guò)安全的 HTTPS 連接來(lái)傳輸 Cookie。 |
| httpOnly | 可選。防止XSS攻擊(跨站腳本攻擊) |
說(shuō)明:
path:Cookie的有效范圍,這個(gè)參數(shù)是在domain參數(shù)基礎(chǔ)上的有效范圍,如果path設(shè)置為”/”,那就是在整個(gè)domain都有效。secure:Cookie是否僅通過(guò)安全的https,值為0或1。如果值為1,則Cookie只能在https連接上有效,默認(rèn)值為0,表示Cookie在http和https連接上都有效。(0或1,也可表示Flase或True)httpOnly:通過(guò)js腳本將無(wú)法讀取到Cookie信息,這樣能有效的防止XSS攻擊(跨站腳本攻擊),這樣就增加了Cookie的安全性,即便是這樣,也不要將重要信息存入Cookie。
5、Selenium操作Cookie的API
webdriver可以讀取、添加和刪除Cookie信息。
webdriver操作Cookie的方法有:
| 操作 | 說(shuō)明 |
|---|---|
| get_cookies() | 獲得所有Cookie信息(重點(diǎn)) |
| add_cookie(cookie_dict) | 添加Cookie,必須有name 和value 值(重點(diǎn)) |
| get_cookie(name值) | 返回指定name名稱(chēng)的Cookie信息 |
| delete_cookie(name) | 刪除特定(部分)的Cookie信息 |
| delete_all_cookies() | 刪除所有Cookie信息 |
6、Selenium操作Cookie的示例
"""
1.學(xué)習(xí)目標(biāo):
掌握selenium對(duì)cookie操作
2.語(yǔ)法
2.1獲取所有cookie
driver.get.cookies()
返同列表格式字典類(lèi)型 [{},{},{}]
2.2添加cookie
driver.add_cookie(參數(shù))
參數(shù):字典格式{"name":"name值","value":"value值"}
3.需求
實(shí)現(xiàn)selenium對(duì)cookie操作
"""
# 1.導(dǎo)入selenium
from selenium import webdriver
from time import sleep
# 2.打開(kāi)瀏覽器
driver = webdriver.Chrome()
# 3.打開(kāi)注冊(cè)A頁(yè)面
# 不打開(kāi)一個(gè)頁(yè)面,cookie為[]。
url = "http://www.baidu.com/"
driver.get(url)
# 4.操作cookie
# 4.1 獲取cookie
cookies = driver.get_cookies()
for cookie in cookies:
# 值打印cookie中的name和value
print("%s -> %s" % (cookie['name'], cookie['value']))
print("=======================")
# 4.2 獲取一個(gè)cookie的指定屬性值
# 參數(shù)是一個(gè)cookie中name的屬性值
# 沒(méi)有找到返回None
print(driver.get_cookie("BAIDUID"))
print("=======================")
# 4.3 添加cookie
cookie = {"name": "key-aaaaaaa", "value": "value-aaaaaaa"}
driver.add_cookie(cookie)
# 添加后再次獲取
cookies = driver.get_cookies()
for cookie in cookies:
print("%s -> %s" % (cookie['name'], cookie['value']))
print("=======================")
# 4.4 刪除指定cookie
# 根據(jù)name刪除
driver.delete_cookie("key-aaaaaaa")
# 刪除后再次獲取
cookies = driver.get_cookies()
for cookie in cookies:
print("%s -> %s" % (cookie['name'], cookie['value']))
print("=======================")
# 4.5 刪除全部cookie
driver.delete_all_cookies()
print(driver.get_cookies())
# 5.關(guān)閉瀏覽器
sleep(2)
driver.quit()
參考:https://www.cnblogs.com/linguoguo/p/5106618.html
到此這篇關(guān)于Selenium對(duì)Cookie的操作 的文章就介紹到這了,更多相關(guān)Selenium Cookie操作 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解Python 使用 selenium 進(jìn)行自動(dòng)化測(cè)試或者協(xié)助日常工作
- Python利用Selenium實(shí)現(xiàn)網(wǎng)站自動(dòng)簽到功能
- Selenium+Python自動(dòng)化腳本環(huán)境搭建的全過(guò)程
- 利用Python+Selenium破解春秋航空網(wǎng)滑塊驗(yàn)證碼的實(shí)戰(zhàn)過(guò)程
- python Selenium等待元素出現(xiàn)的具體方法
- Python使用Selenium自動(dòng)進(jìn)行百度搜索的實(shí)現(xiàn)
- python+opencv+selenium自動(dòng)化登錄郵箱并解決滑動(dòng)驗(yàn)證的問(wèn)題
- 用Python selenium實(shí)現(xiàn)淘寶搶單機(jī)器人
- 教你用Python+selenium搭建自動(dòng)化測(cè)試環(huán)境
- Python selenium的這三種等待方式一定要會(huì)!
- Python爬蟲(chóng)實(shí)戰(zhàn)之用selenium爬取某旅游網(wǎng)站
- 教你如何使用Python selenium
- python Web應(yīng)用程序測(cè)試selenium庫(kù)使用用法詳解
相關(guān)文章
簡(jiǎn)單介紹Python虛擬環(huán)境及使用方法
Python的虛擬環(huán)境極大地方便了人們的生活.本文介紹了虛擬環(huán)境的基礎(chǔ)知識(shí)以及使用方法,文中有非常詳細(xì)的說(shuō)明,需要的朋友可以參考下2021-06-06
在Python中關(guān)于使用os模塊遍歷目錄的實(shí)現(xiàn)方法
今天小編就為大家分享一篇在Python中關(guān)于使用os模塊遍歷目錄的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Python Flask自定義URL路由參數(shù)過(guò)濾器的方法詳解
Flask是一個(gè)輕量級(jí)的Python Web應(yīng)用框架,它允許開(kāi)發(fā)者以一種簡(jiǎn)潔明了的方式來(lái)構(gòu)建Web應(yīng)用,Flask自定義URL的主要功能在于使得開(kāi)發(fā)者能夠通過(guò)簡(jiǎn)單的路由規(guī)則來(lái)自定義應(yīng)用程序的URL結(jié)構(gòu),本文給大家介紹了Python Flask自定義URL路由參數(shù)過(guò)濾器的方法,需要的朋友可以參考下2024-07-07
Python通過(guò)四大 AutoEDA 工具包快速產(chǎn)出完美數(shù)據(jù)報(bào)告
在三年前,我們做數(shù)據(jù)競(jìng)賽或者數(shù)據(jù)建模類(lèi)的項(xiàng)目時(shí),前期我們會(huì)耗費(fèi)較多的時(shí)間去分析數(shù)據(jù),但現(xiàn)在非常多擅長(zhǎng)數(shù)據(jù)分析的大師們已經(jīng)將我們平時(shí)常看的數(shù)據(jù)方式進(jìn)行了集成,開(kāi)發(fā)了很多AutoEDA的工具包??梢詭椭覀児?jié)省大量時(shí)間2021-11-11
Python深度學(xué)習(xí)pytorch神經(jīng)網(wǎng)絡(luò)多輸入多輸出通道
這篇文章主要為大家介紹了Python深度學(xué)習(xí)中pytorch神經(jīng)網(wǎng)絡(luò)多輸入多輸出通道的詳解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
python Boltons庫(kù)實(shí)用功能探索(深度復(fù)制類(lèi)型檢查重試機(jī)制)
這篇文章主要為大家介紹了python Boltons庫(kù)實(shí)用功能探索包含深度復(fù)制類(lèi)型檢查重試機(jī)制及數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
numpy中的高維數(shù)組轉(zhuǎn)置實(shí)例
下面小編就為大家分享一篇numpy中的高維數(shù)組轉(zhuǎn)置實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Python網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目:內(nèi)容提取器的定義
本篇文章主要介紹了Python網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目,這能有效的節(jié)省程序員的時(shí)間,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-10-10
Tensorflow2.4從頭訓(xùn)練Word?Embedding實(shí)現(xiàn)文本分類(lèi)
這篇文章主要為大家介紹了Tensorflow2.4從頭訓(xùn)練Word?Embedding實(shí)現(xiàn)文本分類(lèi),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01

