其他分享
首页 > 其他分享> > Selenium - Cookie操作

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)


使用实战

image-20220915113433800


获取Cookie

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'

这个 expirycookie 生命周期,也就是失效时间。

我们有两种解决办法:

  • 方法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