🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## **4.15 操作 Cookie** 有时我们需要验证浏览器中的 Cookie 是否正确,因为基于真实的 Cookie 是无法通过白盒测试和集成测试的。WebDriver 提供了操作 Cookie 的相关方法,可以读取、添加和删除 Cookie。 WebDriver 操作 Cookie 的方法如下。 * get_cookies():获得所有 Cookie。 * get_cookie(name):返回字典中 key 为“name”的 Cookie。 * add_cookie(cookie_dict):添加 Cookie。 * delete_cookie(name,optionsString):删除名为 OpenString 的 Cookie。 * delete_all_cookies():删除所有 Cookie。 下面通过 get_cookies()获取当前浏览器的所有 Cookie。 ``` from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.baidu.com") # 获得所有cookie信息并打印 cookie = driver.get_cookies() print(cookie) ``` 执行结果如下。 ``` [{'domain': '.baidu.com', 'expiry': 1635838659, 'httpOnly': False, 'name': 'BA_HECTOR', 'path': '/', 'secure': False, 'value': 'asa02h2l2ha52k458f1go1n5j0r'}, {'domain': '.baidu.com', 'expiry': 1667371059, 'httpOnly': False, 'name': 'BAIDUID_BFESS', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': '7E94D5A577F495FB11F3BDB10ED26D3B:FG=1'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '34836_34884_34448_34067_34712_34584_34518_34709_34916_34812_26350_34827_34868'}, {'domain': '.baidu.com', 'expiry': 1667371058, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '7E94D5A577F495FB11F3BDB10ED26D3B:FG=1'}, {'domain': '.baidu.com', 'expiry': 3783318705, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '7E94D5A577F495FB591BC48C7FCE223E'}, {'domain': '.baidu.com', 'expiry': 3783318705, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1635835060'}, {'domain': 'www.baidu.com', 'expiry': 1636699059, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '1'}] ``` 从执行结果可以看出,Cookie 中的数据是以字典形式存放的。知道了 Cookie 中数据的存放形式后,即可按照这种形式向浏览器中添加 Cookie。 ``` # 添加cookie信息 driver.add_cookie({'name': 'key-aaaaaa', 'value': 'value-bbbbbb'}) # 遍历指定的cookies for cookie in driver.get_cookies(): print("%s -> %s" % (cookie['name'], cookie['value'])) ``` 执行结果如下: ``` BA_HECTOR -> asa02h2l2ha52k458f1go1n5j0r BAIDUID_BFESS -> 7E94D5A577F495FB11F3BDB10ED26D3B:FG=1 H_PS_PSSID -> 34836_34884_34448_34067_34712_34584_34518_34709_34916_34812_26350_34827_34868 BAIDUID -> 7E94D5A577F495FB11F3BDB10ED26D3B:FG=1 key-aaaaaa -> value-bbbbbb BIDUPSID -> 7E94D5A577F495FB591BC48C7FCE223E PSTM -> 1635835060 BD_UPN -> 12314753 BD_HOME -> 1 ``` 从执行结果可以看出,最后一条 Cookie 是在脚本执行过程中通过 add_cookie()方法添加的。通过遍历得到所有的 Cookie,从而找到字典中 key 为“name”和“value”的 Cookie值。 delete_cookie() 和 delete_all_cookies() 方法的使用也很简单,前者通过 name 删除一个指定的 Cookie,后者直接删除浏览器中的所有 Cookies。