【心善淵&Selenium3.0基礎】— 21、Selenium對cookie的操作

1、cookie介紹

  • HTTP協議是無狀態的協議。一旦數據交換完畢,客戶端與服務器端的連接就會關閉,再次交換數據需要建立新的連接,這就意味着服務器無法從連接上跟蹤會話。也就是說即使第一次和服務器連接後並且登錄成功後,第二次請求服務器依然不能知道當前請求是哪個用戶。舉個例子:用戶A購買了一件商品放入購物車內,當再次購買商品時,服務器已經無法判斷該購買行爲是屬於用戶A的會話,還是用戶B的會話了。要跟蹤該會話,必須引入一種機制。

    什麼是一次會話:

    用戶打開瀏覽器訪問某個網站, 在這個網站上瀏覽任意頁面, 訪問完成後將瀏覽器關閉的過程稱爲是一次會話。

  • cookie的出現就是爲了解決這個問題,第一次登錄後服務器後,如果服務器需要記錄該用戶狀態,就使用response向客戶端瀏覽器頒發一個cookie,瀏覽器會把cookie數據保存在本地。該用戶發送第二次請求的時候,就會自動的把上次請求存儲的cookie數據自動的攜帶給服務器,服務器檢查該cookie存儲name,value等信息,以此來辨認用戶狀態,服務器還可以根據需要修改cookie的內容。

  • cookie就相當於是服務器給客戶端們頒發一個通行證,每人一個,無論誰訪問都必須攜帶自己通行證。這樣服務器就能從通行證上確認客戶身份,這就是Cookie的工作原理。

  • cookie存儲的數據量有限,不同的瀏覽器有不同的存儲大小,但一般不超過4KB,因此使用cookie只能存儲一些小量的數據。

  • cookie的出現彌補HTTP協議無狀態的不足。但是cookie是存儲在客戶端的,通過瀏覽器或者抓包工具很容易就能獲取到,所以非常不安全。

2、session介紹

  • session是另一種記錄客戶狀態的機制,不同的是cookie保存在客戶端瀏覽器中,而session保存在服務器上。客戶端瀏覽器訪問服務器的時候,服務器把客戶端信息以某種形式記錄在服務器上。存儲在服務器的數據會更加的安全,不容易被竊取。客戶端瀏覽器再次訪問時,只需要從該session中查找該客戶的狀態就可以了。

  • 如果說cookie機制是通過檢查客戶身上的“通行證”來確定客戶身份的話,那麼session機制就是通過檢查服務器上的“客戶明細表”來確認客戶身份。Session相當於程序在服務器上建立的一份客戶檔案,客戶來訪的時候只需要查詢客戶檔案表就可以了。

  • session存儲在服務器也有一定的弊端,就是會佔用服務器的資源,但現在服務器已經發展至今,存儲一些session信息還是綽綽有餘的。

3、cookie和session工作原理圖解

在這裏插入圖片描述

4、記錄cookie的作用

  1. 用戶第一次登陸時,勾選下次直接登陸或者記住密碼,就是採用記錄cookie實現的。

  2. cookie內記錄用戶名和密碼(加密)信息,只要請求時服務器收到cookie,識別成功,默認爲已登陸。

5、Selenium操作cookie 的方法

webdriver可以讀取、添加和刪除cookie信息。

webdriver操作cookie 的方法有:

操作 說明
get_cookies() 獲得所有cookie 信息(重點)
add_cookie(cookie_dict) 添加cookie,必須有name 和value 值(重點)
get_cookie(name值) 返回指定name名稱的cookie 信息
delete_cookie(name) 刪除特定(部分)的cookie 信息
delete_all_cookies() 刪除所有cookie 信息

6、示例:

"""
1.學習目標:
    掌握selenium對cookie操作
2.語法
    2.1獲取所有cookie
        driver.get.cookies()
        返同列表格式字典類型 [{},{},{}]
    2.2添加cookie
        driver.add_cookie(參數)
        參數:字典格式{"name":"name值","value":"value值"}
3.需求
    實現selenium對cookie操作
"""
# 1.導入selenium
from selenium import webdriver
from time import sleep

# 2.打開瀏覽器
driver = webdriver.Chrome()

# 3.打開註冊A頁面
# 不打開一個頁面,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 獲取一個cookie的指定屬性值
# 參數是一個cookie中name的屬性值
# 沒有找到返回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
# 根據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.關閉瀏覽器
sleep(2)
driver.quit()

7、cookie內容參數說明

參數 描述
name 必需。規定 cookie 的名稱。
value 必需。規定 cookie 的值。
expire 可選。規定 cookie 的有效期。
domain 可選。規定 cookie 的域名。
path 可選。規定 cookie 的服務器路徑。
secure 可選。規定是否通過安全的 HTTPS 連接來傳輸 cookie。
httpOnly 可選。防止XSS攻擊(跨站腳本攻擊)

說明:

  • path:cookie的有效範圍,這個參數domain參數基礎上的有效範圍,如果path設置爲”/”,那就是在整個domain都有效。
  • secure:cookie是否僅通過安全的https,值爲0或1。如果值爲1,則cookie只能在https連接上有效,默認值爲0,表示cookei在http和https連接上都有效。(0或1,也可表示Flase或True)
  • httpOnly:通過js腳本將無法讀取到cookie信息,這樣能有效的防止XSS攻擊(跨站腳本攻擊),這樣就增加了cookie的安全性,即便是這樣,也不要將重要信息存入cookie。

參考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章