标签:用户 mamicode end ssid dom 多个 冲突 通过 图片
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())
输出结果:
标签:用户 mamicode end ssid dom 多个 冲突 通过 图片
原文地址:https://blog.51cto.com/14645850/2507657