Selenium - Cookie操作
作者:互联网
Selenium - Cookie操作
转载:https://blog.csdn.net/ytraister/article/details/106033630
简介
在进行自动化测试的时候,用户登录都是通过页面输入账号密码,但是有些网站登录需要邮件、手机、验证码来验证登录;
虽然花点时间可以实现,但是我们还可以用更简单的方法 —— Cookie 。
常用操作
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com/')
# 获取所有cookie信息
driver.get_cookies()
# 获取指定name的cookie
driver.get_cookie(name值)
# 清除指定cookie
driver.delete_cookie(name)
# 清除所有cookie
driver.delete_all_cookies()
# 添加cookie值
driver.add_cookie(cookie_dict)
使用实战
-
登录账号后,可以通过F12 的请求中,获取到我们的cookie信息。
-
获取Cookies信息后,在后面多次运行自动化时,就可以添加cookies信息,就不用再进行账号密码登录;
获取Cookie
- 我们可以通过自动化获取到cookies信息,并保存为json格式。
- 步骤1:使用selenium访问百度页面;
- 步骤2:通过手工登录账号;
- 步骤3:将登录后的Cookies信息保存到本地;(在项目目录下已经有了一个名称为
cookies.json
的文件)
from selenium import webdriver
import time
import json
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('https://www.baidu.com')
# 程序打开网页后30秒内 “手动登陆账户”
time.sleep(30)
# 将cookies信息保存为json格式
with open('cookies.json','w') as f:
f.write(json.dumps(driver.get_cookies()))
driver.close()
添加Cookie
方法一
from selenium import webdriver
import time
import json
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('https://www.baidu.com')
# 首先清除由于浏览器打开已有的cookies
driver.delete_all_cookies()
with open('cookies.json','r') as f:
# 使用json读取cookies 注意读取的是文件 所以用load而不是loads
cookies_list = json.load(f)
for cookie in cookies_list:
driver.add_cookie(cookie)
# 刷新页面,检查用户登录状态
driver.refresh()
time.sleep(10)
driver.close()
运行后,可能会发现出现报错,在插入
cookie
的时候 有返回如下错误:
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid 'expiry'
这个
expiry
是cookie
的生命周期,也就是失效时间。我们有两种解决办法:
- 方法1—— 将
expiry
类型变为int
(其实不太清楚为什么变为int
就可以)- 方法2—— 删除该字段
方法二
from selenium import webdriver
import json
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('https://www.baidu.com')
# 首先清除由于浏览器打开已有的cookies
driver.delete_all_cookies()
with open('cookies.json', 'r') as f:
cookies_list = json.load(f)
# 方法1 将expiry类型变为int
for cookie in cookies_list:
# 并不是所有cookie都含有expiry 所以要用dict的get方法来获取
if isinstance(cookie.get('expiry'), float):
cookie['expiry'] = int(cookie['expiry'])
driver.add_cookie(cookie)
# 方法2删除该字段:该字段有问题所以删除就可以
# for cookie in cookieslist:
# if 'expiry' in cookie:
# del cookie['expiry']
# driver.add_cookie(cookie)
# 刷新页面,检查用户登录状态
driver.refresh()
time.sleep(10)
driver.close()
标签:cookies,get,Selenium,driver,expiry,json,Cookie,操作,cookie 来源: https://www.cnblogs.com/mzline/p/16697841.html