cookie相关操作在Web自动化测试中偶尔也会用到,比如在登录时需要输入验证码,可以通过添加登录cookie,绕过验证码的方式进行登录。
一、cookie操作常用方法
- get_cookies():获取所有cookie信息。
- get_cookie(name):根据cookie的name获取对应的cookie信息。
- delete_cookie(name):根据cookie的name清除对应的cookie信息。
- delete_all_cookies():清除所有cookie信息。
- add_cookie(cookie_dict):添加新的cookie键值对。
二、未登录,获取所有cookie信息
1)启动浏览器,获取所有cookie信息并打印,输出结果为:[]。
2)打开博客园网站首页后,重新获取所有cookie信息并打印,输出结果为:{..., 'name': '_ga', 'value': 'GA1.1.2111909934.1717400933', ...}。
from selenium import webdriver
# 启动浏览器,获取所有cookie信息并打印
driver = webdriver.Chrome()
print(driver.get_cookies()) #[]
# 打开博客园首页后,获取所有cookie信息并打印
driver.get('https://www.cnblogs.com/zhangsan')
print(driver.get_cookies()) # [{..., 'name': '_ga', 'value': 'GA1.1.2111909934.1717400933', ...}]
三、登录后,获取所有cookie信息
1)先登录博客园网站,再重新获取所有cookie信息。
2)找到下面这个cookie:{..., 'name': '.CNBlogsCookie', 'value': '496F501F618084692C996DA..., ...},对比上下两处代码的输出结果,发现它的name和value发生了变化,这就是未登录和已登录的区别。
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://account.cnblogs.com/signin')
time.sleep(10)
# 登录后,获取所有cookie信息
print(driver.get_cookies()) # [{..., 'name': '.CNBlogsCookie', 'value': '496F501F618084692C996DA..., ...}]
四、根据cookie的name获取对应的cookie信息
使用get_cookie(name)方法,可以根据cookie的name获取对应的cookie信息。
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://account.cnblogs.com/signin')
time.sleep(10)
# 根据cookie的name获取对应的cookie信息
print(driver.get_cookie('.CNBlogsCookie')) # {'domain': '.cnblogs.com', 'expiry': 1719130124, 'httpOnly': True, 'name': '.CNBlogsCookie', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '647802767E60F111240755B8...'}
五、根据cookie的name清除对应的cookie信息
使用delete_cookie(name)方法,可以根据cookie的name清除对应的cookie信息。
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://account.cnblogs.com/signin')
time.sleep(10)
# 根据cookie的name清除对应的cookie信息
driver.delete_cookie(".CNBlogsCookie")
print(driver.get_cookies())
六、清除所有cookie信息
清除所有cookie信息后,登录状态将失效。
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://account.cnblogs.com/signin')
time.sleep(10)
# 清除所有cookie信息
driver.delete_all_cookies()
# 刷新页面,查看是否已变成未登录状态
driver.refresh()