1. 程式人生 > >Selenium系列(21) - Cookie操作和原始碼解讀

Selenium系列(21) - Cookie操作和原始碼解讀

如果你還想從頭學起Selenium,可以看看這個系列的文章哦!

https://www.cnblogs.com/poloyy/category/1680176.html

 

其次,如果你不懂前端基礎知識,需要自己去補充哦,博主暫時沒有總結(雖然我也會,所以我學selenium就不用複習前端了哈哈哈...)

 

為什麼需要Cookie操作

有時候我們需要驗證瀏覽器中Cookie是否正確,因為基於真實Cookie的測試是無法通過白盒和整合測試進行的

測試某些網站若需要先登入,可以直接通過介面去登入,把返回的Cookie存起來,相當於UI自動化上的免登入了,除開了不必要的登入操作

 

有哪些Cookie操作

  • get_cookies(): 獲得所有cookie資訊

  • get_cookie(name): 返回字典的key=name的cookie資訊

  • add_cookie(cookie_dict) : 新增cookie

  • delete_cookie(name):刪除cookie資訊name是要刪除的cookie的名稱

  • delete_all_cookies(): 刪除所有cookie資訊

 

直接上程式碼

# 瀏覽器
driver = webdriver.Chrome("../resources/chromedriver.exe")
driver.get("https://px.seewo.com/product")

# 獲得網站的Cookies資訊
cookie = driver.get_cookies()

# 將獲得Cookies的資訊列印
print(cookie)

# 發起登入請求

# 登入後存放的兩個token,需要新增到Cookie中去
cookie_list = {}
cookies["px-token"] = exchangedToken
cookies["x-token"] = token

# 新增Cookie
for cookie_ in cookies.items():
    driver.add_cookie({'name': cookie_[0], 'value': cookie_[1], 'path': '/', 'httpOnly': True, 'secure': True})

# 再次列印Cookie
print(driver.get_cookies())

# 執行UI自動化操作
# ......
# ......

# 發起退出登入請求

# 刪除某個Cookie
driver.delete_cookie("x-token")

# 刪除所有Cookie
driver.delete_all_cookies()

# 瀏覽器關閉
driver.quit()

可以看看, get_cookies()  返回的資料是什麼樣的

[{'domain': '.training.test.seewo.com', 'httpOnly': False, 'name': 'Hm_lpvt_b195036baa8d1a75b4e9572ee8593bdd', 'path': '/', 'secure': False, 'value': '1586141195'}, {'domain': '.training.test.seewo.com', 'expiry': 1617677195, 'httpOnly': False, 'name': 'Hm_lvt_b195036baa8d1a75b4e9572ee8593bdd', 'path': '/', 'secure': False, 'value': '1586141195'}, {'domain': 'training.test.seewo.com', 'expiry': 1586227594.128949, 'httpOnly': True, 'name': 'connect.magick', 'path': '/', 'secure': False, 'value': 's%3AyLzNW4COEHLgiVSDtpv1pcUKzKmsMpoj.5mQxyZpM9kUEdsqXTyCFoht%2F3avDA20S%2Foz5jB52G7U'}]

 

原始碼解讀

 

知識點

  • get_cookie:從get_cookies()返回的Cookie列表中,迴圈判斷,獲取對應的Cookie
  • add_cookie:傳入dict物件,有兩個必傳key值:name、vlaue;五個可選key值:path、domain、secure、expiry、httpOnly;可以看到你的字典物件不能亂傳key,否則會報錯
  • delete_cookie:傳入的是Cookie的name值

 

&nbs