Python + Selenium 小技巧之操作Cookies
有时我们需要验证浏览器中的Cookie是否正确,因为基于真实的Cookie是无法通过白盒测试或集成测试的。WebDriver为我们提供了操作Cookie的相关方法,可以读取、添加和删除Cookie。
WebDriver操作Cookie的方法如下:
get_cookies()
获得所有Cookieget_cookie(name)
返回字典中key为“name”的Cookieadd_cookie(cookie_dict)
添加Cookiedelete_cookie(name, optionsString)
删除名为optionsString的Cookiedelete_all_cookies()
删除所有的Cookie
接下来,我们通过get_cookies()
获取当前浏览器百度页面的所有Cookie
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
# 获取所有的Cookie信息,并打印
cookie = browser.get_cookies()
print(cookie)
得到的结果如下:
[{'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '1448_21110_30211_18560_30124_26350'}, {'domain': '.baidu.com', 'expiry': 1607653995.91547, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '3769E6BCDF30C9F3301992018E6CF8F0:FG=1'}, {'domain': '.baidu.com', 'expiry': 3723601642.915432, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '3769E6BCDF30C9F32CE3C13DA19D3420'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'delPer', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.baidu.com', 'expiry': 3723601642.91546, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1576117996'}, {'domain': '.baidu.com', 'expiry': 1576204396.24507, 'httpOnly': False, 'name': 'BDORZ', 'path': '/', 'secure': False, 'value': 'B490B5EBF6F3CD402E515D22BCDA1598'}, {'domain': 'www.baidu.com', 'expiry': 1576981996, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}, {'domain': 'www.baidu.com', 'httpOnly': False,
'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '0'}]
不难看出,这些Cookie中的数据都是以字典形式存放的。在了解Cookie中数据的存放形式后,即可按照这种形式向浏览器中添加Cookie。
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
# 添加Cookie信息
browser.add_cookie({'name': 'key-aaaaaaa', 'value': 'value-bbbbbbb'})
# 遍历指定的Cookies
for cookie in browser.get_cookies():
print(f'{cookie["name"]} -> {cookie["value"]}')
运行脚本,执行结果如下:
key-aaaaaaa -> value-bbbbbbb
H_PS_PSSID -> 1434_21111_30210
BAIDUID -> 916438478DB2357AD10E38EC17689E33:FG=1
BIDUPSID -> 916438478DB2357AD8389F72D5814F65
delPer -> 0
PSTM -> 1576118446
BDORZ -> B490B5EBF6F3CD402E515D22BCDA1598
BD_UPN -> 12314753
BD_HOME -> 0
从执行结果来看,这里第一条Cookie正是我们通过add_cookie(cookie_dict)
方法添加的。通过遍历得到所有的Cookie,从而找到字典中key为“name”“vlaue”的Cookie值。
当然了,能添加,就能删除,用到的方法是delete_cookie(name, )
、delete_all_cookies()
。前者通过指定name来删除一个特定的Cookie,后者则是直接删掉所有的Cookie。