ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Selenium - Cookie操作

2022-09-15 20:33:15  阅读:387  来源: 互联网

标签:cookies get Selenium driver expiry json Cookie 操作 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信息,就不用再进行账号密码登录;

image-20220915113433800


获取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'

这个 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有