Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。在自动化测试过程中,我们如果想要进行免登陆操作的话,可以通过写入cookie的方式来实现,需要注意的是,网站cookie有时效性,对于关闭浏览器后失效的临时cookie网站来说,无法使用cookie来实现免登陆。接下来具体看一看UI自动化中如何对网站cookie进行操作。

关于cookie的方法和使用

如图所示,通过F12查看浏览器所存储的cookie,一个网站存储的cookie有多个,每个cookie都有Nmae、Value、Domain等属性,我们在实际使用webdriver调用的时候,每条cookie存储为字典格式。

1.按名称获取单个cookie。如果找到则返回cookie,否则返回None

driver.get_cookie(name)

name: 单个的cookie名称

2.返回一组字典,对应于当前会话中可见的cookie。

driver.get_cookies()

3.在当前会话中添加cookie

driver.add_cookie(cookie_dict)

cookie_dict: 包含单个cookie信息的字典

name:cookie名称

value:cookie名称对应的值

domain:服务器域名

expiry:Cookie有效终止日期

path:Web服务器中可获取服务器设置Cookie的页面路径

httpOnly:防脚本攻击设置

secure:当此值为True时,表示只能通过https传输cookie,当为False时表示可以通过http读取传输cookie

4.删除会话范围内的所有cookie。

driver.delete_all_cookies()

5.删除具有给定名称的单个cookie

driver.delete_cookie(name)

name: 单个cookie的名称

使用cookie时的一些注意事项

1、使用add_cookie()方法前,应该先进入这个网站的网址中,才能添加cookie,否则无法添加成功

2、进入网站后,浏览器会自动生成一个cookie,如果运行add_cookie()方法冲突或者失败,可以尝试先删除所有cookie再添加

3、使用add_cookie()方法中,每次只能添加一个cookie,也就是单个cookie字典,所以代码中需要循环插入

4、使用add_cookie()方法中,传入的cookie字典里domain字段,谷歌浏览器需要填写,如果是火狐浏览器则不用填写。

实例演示

这里我们思路是,先登录一个网站后获取cookie,然后打开新的浏览器进入同一个网站,写入cookie后看是否已经是登录状态,由于账号密码的私密性,这次的实例代码中我隐藏了账号密码信息。

代码示例:

from selenium import webdriver
from time import sleep# 第一个浏览器来进行登录,然后记录登录后的cookie
driver = webdriver.Chrome()
driver.get("https://www.fhyx.com/account/login.html")
sleep(3)
driver.find_element_by_id("LoginForm_username").send_keys("userName")
driver.find_element_by_id("LoginForm_password").send_keys("passWord")
# 手动在命令行中输入验证码
code = input("验证码是:")
driver.find_element_by_id("LoginForm_code").send_keys(code)
sleep(1)
driver.find_element_by_xpath("//button[text()='登   录']").click()
sleep(3)
cookie_login = driver.get_cookies()
print("登陆后获取的cookie %s" % cookie_login)# 第二个新打开的浏览器用来添加cookie
driver2 = webdriver.Chrome()
driver2.get("https://www.fhyx.com")
sleep(2)# 循环赋值添加cookie
# driver2.delete_all_cookies()
for cookie in cookie_login:cookie_list = {'domain': '.fhyx.com','name': cookie["name"],'value': cookie["value"],"expires": "",'path': '/','httpOnly': False,'HostOnly': False,'Secure': False,}print("添加cookie: %s  : %s" % (cookie["name"], cookie["value"]))driver2.add_cookie(cookie_list)driver.get("https://www.fhyx.com")
sleep(1)
# 获取单个cookie
cookie_id = driver2.get_cookie("PHPSESSID")
print("获取单个cookie:PHPSESSID:%s" % cookie_id)
# 获取所有cookie
cookie_all = driver2.get_cookies()
print("已经添加的cookie个数 %s" % len(cookie_all))
# 删除单个cookie
driver.delete_cookie("PHPSESSID")
print("删除PHPSESSID后查询此字段,结果: %s" % driver.get_cookie("PHPSESSID"))
# 删除所有cookie(此时第一个浏览器cookie失效)
driver.delete_all_cookies()
print("全部删除后的cookie: %s " % driver.get_cookies())

输出结果:

cookie无法读取bdstoken_Web自动化测试:对cookie的操作相关推荐

  1. mvc存储Cookie和读取Cookie方法

    mvc存储Cookie和读取Cookie方法: //存储 HttpCookie cookie = new HttpCookie("User"); System.Text.Encod ...

  2. webview中cookie的读取与保存

    应该做到更好 Cookie 的读取这里就简单写段代码了,它很容易懂,你应该将它放在 webViewDidFinishLoad 开始后执行 NSArray *nCookies = [[NSHTTPCoo ...

  3. Javascript第七章cookie的读取和写入源码第一课

    写入cookie <!DOCTYPE html> <html lang="en"> <head><meta charset="U ...

  4. 微信公众号删除cookie失败,cookie设置了过期时间不管用,微信公众号cookie比较诡异,删不掉,解决办法,原生JS封装cookie统一操作删除cookie,读取cookie,删除cookie

    公司有个项目,需求是这样的: pc 端的项目,有一个步骤可以在手机上操作,页面都在同一个域名下面,但是pc端需要登录(用到了 cookie ),公众号端不需要登录(不用 cookie ) ,不清楚服务 ...

  5. 跨域(cross-domain)访问 cookie (读取和设置)

    跨域(cross-domain)访问 cookie (读取和设置) Passport 一方面意味着用一个帐号可以在不同服务里登录,另一方面就是在一个服务里面登录后可以无障碍的漫游到其他服务里面去.坦白 ...

  6. 跨域Cookie的读取

    cookie的几个属性 1 httpOnly:true 表示禁止客户端读cookie,即只能在服务端读取它 2 SameSite:用来限制第三方 Cookie,从而减少安全风险. Strict最为严格 ...

  7. cookie操作:设置cookie、读取cookie、删除cookie

    一.设置cookie function setCookie(name, value){Days = 1; var exp = new Date(); exp.setTime(exp.getTime() ...

  8. java设置cookie,添加cookie数据,读取cookie数据,修改cookie数据,删除cookie数据

    /*** 添加cookie* @param response* @param name* @param value*/@RequestMapping("/addCookie")pu ...

  9. SpringSession的源码解析(从Cookie中读取Sessionid,根据sessionid查询信息全流程分析)

    前言 上一篇我们介绍了SpringSession中Session的保存过程,今天我们接着来看看Session的读取过程.相对保存过程,读取过程相对比较简单. 本文想从源码的角度,详细介绍一下Sessi ...

最新文章

  1. 日常办公会用到的python模块-Python如何去实际提高工作的效率?也许这个会有用!...
  2. python响铃符不响_python语法注意事项
  3. boost::contract模块实现check的测试程序
  4. 【Android】 Android中ListView使用详解
  5. *【 POJ - 1007 】DNA Sorting(枚举,类似三元组找第二元问题)
  6. 最短路(信息学奥赛一本通-T1382)
  7. 家里安装20M宽带,为什么看视频都不卡,但一玩游戏就卡的要死?
  8. java用于保存登录对象怎么写,利用对象流模仿登陆注册功能——Java对象流应用...
  9. asp.net优化方案
  10. 算法面试:精选微软经典的算法面试100题(第21-25题)
  11. matlab中subplot()函数的作用
  12. WinRAR v5.10 正式版
  13. S2B2B-云分销系统介绍
  14. word利用宏批量调整图片大小
  15. ps命令应用(查看进程)
  16. MYSQL的下载与配置安装
  17. 【海康威视】相关名词术语产品注解
  18. 一位参加过IT培训班的学员经历和建议。
  19. matlab读csv文件
  20. mangabz漫画网鬼灭之刃漫画爬虫

热门文章

  1. 那些相似的CRM之间究竟有无区别
  2. nagios(icinga)借助check_hp插件监控惠普服务器硬件信息
  3. ZZULIOJ 1068:二进制数
  4. 籍贯怎样填写_公务员考试:什么是考生户籍、生源地和籍贯?
  5. .html好 还是.asp好,各位说说在ASP.net里 用静态函数的好 还是实例函数出处HTML好???...
  6. 图论 —— 环与块 —— 连通块的计数
  7. Addition Chains(信息学奥赛一本通-T1443)
  8. 循环数组最大字段和(51Nod-1050)
  9. 整数奇偶排序(信息学奥赛一本通-T1181)
  10. 图像模糊处理(信息学奥赛一本通-T1128)