【测试】Selenium操作Cookie

news2024/12/22 22:36:32

1.操作Cookie

操作Cookie无非就是读取和删除Cookie,下面这些是主要方法

from selenium.webdriver import Chrome, ChromeOptions
from selenium.webdriver.chrome.service import Service

options = ChromeOptions()
options.add_argument("--ignore-certificate-errors")
s = Service(executable_path=r"E:\webdriver\chromedriver.exe")
driver = Chrome(service=s, options=options)
driver.maximize_window()
driver.get("https://www.baidu.com/")
driver.get_cookies() # 获取所有的cookie
driver.get_cookie(name) # 获取指定的 cookie
driver.delete_cookie(name) # 删除指定的 cookie
driver.delete_all_cookies() # 删除所有的 cookie
driver.add_cookie(cookie_dict) # 添加一个 cookie

2.设置单个Cookie

通过add_cookie()方法添加Cookie,参数是一个字典,一个Cookie字典的键有name、value、domain、httpOnly、path、sameSite、secure等,但是至少,必须要有name和value这两个键,比如说我们设置一下百度的Cookie

首先在浏览器开发者工具找到百度的关键Cookie,BDUSS,把它的name和value复制下来
在这里插入图片描述粘贴带Cookie字典里,如下

driver = Chrome(service=s, options=options)
driver.maximize_window()
driver.get("https://www.baidu.com/")
driver.add_cookie({"name": "BDUSS", "value": "5MbEN....AAAAAAAAAAAAAAAAAAJbLdWSWy3VkVn"})
driver.refresh()

注意,在调用add_cookie()方法之前,至少要先打开一个网页,不然会报错的,添加好Cookie之后再refresh一下,这样就处于登录状态了

3.保存和读取Cookie

上面是通过一个关键的BDUSS Cookie让我们处于登录状态,既然已经处于登录状态了,我们可以趁机把该页面的全部Cookie都保存为一个JSON文件,下次可以读取这个JSON文件

driver.get("https://www.baidu.com/")

# 保存Cookie
# cookies_str = json.dumps(driver.get_cookies())
# with open("baidu_cookies.json", "w", encoding="utf-8") as f:
#     f.write(cookies_str)

# 读取之前保存的Cookie
with open("baidu_cookies.json", "r", encoding="utf-8") as f:
    cookies_list = json.loads(f.read())
    for cookie in cookies_list:
        driver.add_cookie(cookie)

driver.refresh()
time.sleep(1)

4.加载用户文件夹

直接通过selenium打开浏览器,相当于打开了一个无痕模式,它不会加载任何Cookie或其他平时使用Chrome的一些设置。如果你嫌每次都手动设置Cookie很麻烦,希望它能像你平时打开浏览器一样使用自动保存的Cookie,我们可以通过加载本地Chrome浏览器的配置文件夹的方式打开Chrome

那如何知道自己的配置文件夹的路径呢?你可以在浏览器地址栏打开chrome://version/,看到的那个“个人资料路径”就是了
Chrome浏览器个人资料路径但是注意,我们在使用的时候,只用到"User Data"这一级就可以了,后面的删掉,例如我这里就是C:\Users\admin\AppData\Local\Google\Chrome\User Data

options = ChromeOptions()
options.add_argument("--no-sandbox")
options.add_argument(r'--user-data-dir=C:\Users\admin\AppData\Local\Google\Chrome\User Data')
s = Service(executable_path=r"E:\webdriver\chromedriver.exe")
driver = Chrome(service=s, options=options)
driver.get("https://www.baidu.com")
print("cookies:", json.dumps(driver.get_cookies()))

现在,只要你之前在浏览器登录过了,那在Selenium中打开的网页也会处于登录状态(除非登录过期了),但这种加载用户文件夹的方式也有个缺点,那就是启动Selenium之前,要先把Chrome浏览器关闭,不然是会报错的

5.请求头Cookie

在平时使用Cookie,我最喜欢直接复制开发者工具中的请求头Cookie的那一段值,因为这样最方便了,但是,好像Selenium不支持通过请求头的方式指定Cookie,至少我没有找到,如果哪位大佬知道,欢迎在评论区分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

07-source-map

source-map是从已转换的代码,映射到原始的源文件。使浏览器可以重构原始源并在调试器中显示重建的原始源。 根据源文件,生成source-map文件,webpack在打包时,可以通过配置生成source-map; 在转换后的代码,…

Springboot整合mybatisplus实战

Springboot整合mybatisplus,纯后端,验证结果是通过postman调用的,记录一下 1、建表语句以及初始化数据脚本 CREATE TABLE tbl_book (id int NOT NULL AUTO_INCREMENT,type varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT…

Django之模板层

一、模板简介 在刚刚介绍完的视图层中我们提到,浏览器发送的请求信息会转发给视图进行处理,而视图在经过一系列处理后必须要有返回信息给浏览器。如果我们要返回html标签、css等数据给浏览器进行渲染,我们可以在视图中这么做 from django.s…

Git进阶系列 | 3. 基于Pull Request实现更好的协作

Git是最流行的代码版本控制系统,这一系列文章介绍了一些Git的高阶使用方式,从而帮助我们可以更好的利用Git的能力。本系列一共8篇文章,这是第3篇。原文:Better Collaboration With Pull Requests[1] 本文是“Git进阶系列”的第三篇…

Keil 重定向 fputc 函数 以及 printf 函数的代码尺寸测试

本文的开发环境为 Keil Cortex-M3 内核处理器。 重定向 fputc 函数方法 如果想使用库函数 printf ,必须要将 fputc 重定向到自己的串口上。 术语 重定向 可以理解为用户重写 fputc 函数,在重写的函数体内调用自己硬件的串口发送函数。 在 Keil 环境中…

Android Binder通信原理(二):servicemanager启动

源码基于:Android R 0. 前言 下图是android 8.0 之前binder 的软件框架,依赖的驱动设备是/dev/binder,binder机制的四要素分别是client、server、servicemanager和binder驱动。 对于android 8.0后的binder 和vndbinder依然同这个框架&#…

【Python版】手把手带你如何进行Mock测试

什么是mock? mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为,很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为 为什么要使用Mock? 之所以使用mock测试,是因为真…

js+html+css 封装一个弹窗组件

HTML中通过一个按钮触发显示弹窗的函数showPopup(),弹窗的内容包含在一个div元素中,初始设置为隐藏状态。 CSS中定义了弹窗的样式,包括背景、位置、边框等。 JavaScript中定义了两个函数showPopup()和hidePopup(),分别用于显示和隐…

CORS原理及解决办法

浏览器的同源策略阻止读取来自不同来源的资源。这种机制阻止恶意站点读取另一个站点的数据,但它也阻止合法使用。 一般情况下,我们可以通过两种方式解决浏览器的同源策略,JSONP和CORS,CORS解决方案更为通用(推荐)。 …

算法程序设计 之 胖男孩问题(7/8)

一、题目分析 问题描述 麦克结婚后,在上个月他胖了70磅。因为手指上的脂肪过多,使他连给他最亲密的朋友斯拉夫克写一个电子邮件都很困难。 每晚麦克都详细地描述那一天他所吃的所有东西,但有时当他只想按一次某键时往往会按了不止一次&…

java 读取图片中的文字

Maven依赖导入Tess4j <!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j --><dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.5.4</version></de…

基于SpringBoot的二手书交易系统的设计与实现(源码、数据库、文档)

作为新兴事物&#xff0c;校园电子商务是&#xff0c;首先是指在校园范围内&#xff0c;其技术手段是校园网&#xff0c;而服务对象是全部师生。主要经营形式为学生自主经营&#xff0c;能够满足多群体生活学习需求&#xff0c;同时具备范围小&#xff0c;安全性高&#xff0c;…

《Web应用技术》期末复习(END)

说明&#xff1a;不知道是哪位兄台在群里说了一句&#xff0c;整的我压力山大。这是我个人的期末复习梳理&#xff0c;自己使用并且提供给几位有需要的朋友使用&#xff0c;并不确定期末考试考不考这些。请大家视情况查看和使用&#xff0c;如果有错误&#xff0c;也欢迎大家找…

opencv如何使用GPU的三种方法

我在工作实验涉及到图像和视频处理时&#xff0c;通常使用opencv提供的库来做处理&#xff0c;虽然OpenCV是一个广泛使用的库&#xff0c;它提供了丰富的功能和工具。然而&#xff0c;有时候在处理大量图片或视频时&#xff0c;我们可能会面临速度受限的问题。 opencv执行图像…

SpringMvc拦截器入门

文章目录 前言五、拦截器入门1.拦截器简介2.拦截器入门案例3.拦截器参数4. 拦截器链配置 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方便日后回顾。当然&#xff0c;如果能帮到一些萌新进行新技术的学习那也是极好的。作者…

管理Linux目录、用户、组以及文档的权限和归属

文章目录 一、管理Linux目录和文件1、查看及切换目录pwd&#xff1a;查看当前工作目录cd&#xff1a;切换工作目录ls&#xff1a;列出文档及属性alias&#xff1a;别名cat查看文件内容less分页显示长文件 2.新建目录/文件mkdir 创建目录touch创建文件 3.删除/移动/复制rm删除mv…

ai描述生成器绘画有哪些?ai绘画生成器描述介绍

从前&#xff0c;有一个名叫小华的画家&#xff0c;他是一位非常出色的艺术家&#xff0c;但是他总是感到自己还没有达到他理想中作品的水平。他一直在寻找一种方法来创造出高质量的艺术品。有一天&#xff0c;他听说了一种神奇的技术&#xff0c;可以让计算机通过人工智能生成…

MySQL全备+binlog恢复方法之伪装master

利用mysql全备 binlog server恢复方法之伪装master 单实例试验 一、试验环境 10.72.7.40 实例 mysql3306为要恢复的对象&#xff0c;mysql3306的全备binlog server&#xff08;目录/data/mysql/mysql3306/backup&#xff09; 实例mysql3307为伪装master 实例mysql3308为伪…

黑马程序员前端 Vue3 小兔鲜电商项目——(四)Home 页面布局

文章目录 Home 页面组件结构组件结构拆分Home 模块中引入组件 分类实现模板代码渲染数据 banner 轮播图实现模板代码封装接口渲染数据 面板组件封装创建公共组件复用抽取主题和副主题 新鲜好物实现模版代码封装接口渲染数据 人气推荐实现模板代码封装接口渲染数据 懒加载指令实…

Java实现加密(五)Base64编码

目录 一、Base64是怎么诞生的二、Base64定义三、Base64原理1.ASCII码转Base64&#xff08;字节数 % 3 0&#xff09;2.ASCII码转Base64&#xff08;字节数 % 3 2&#xff09;3.ASCII码转Base64&#xff08;字节数 % 3 1&#xff09;4.UTF-8转Base64 四、Java实现Base64编解码…