如何使用Selenium处理Cookie,今天彻底学会了!

news2024/11/26 6:20:32

01、cookie介绍

HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接,这就意味着服务器无法从连接上跟踪会话。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。

举个例子:

用户A购买了一件商品放入购物车内,当再次购买商品时,服务器已经无法判断该购买行为是属于用户A的会话,还是用户B的会话了。要跟踪该会话,必须引入一种机制。

什么是一次会话:

用户打开浏览器访问某个网站, 在这个网站上浏览任意页面, 访问完成后将浏览器关闭的过程称为是一次会话。

图片

cookie的出现就是为了解决这个问题,第一次登录后服务器后,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个cookie,浏览器会把cookie数据保存在本地。该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器检查该cookie存储name,value等信息,以此来辨认用户状态,服务器还可以根据需要修改cookie的内容。

cookie就相当于是服务器给客户端们颁发一个通行证,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份,这就是Cookie的工作原理。

cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB,因此使用cookie只能存储一些小量的数据。

cookie的出现弥补HTTP协议无状态的不足。但是cookie是存储在客户端的,通过浏览器或者抓包工具很容易就能获取到,所以非常不安全。

02、session介绍

session是另一种记录客户状态的机制,不同的是cookie保存在客户端浏览器中,而session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。存储在服务器的数据会更加的安全,不容易被窃取。客户端浏览器再次访问时,只需要从该session中查找该客户的状态就可以了。

如果说cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

session存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,存储一些session信息还是绰绰有余的。

cookie和session工作原理图解

图片

记录cookie的作用

用户第一次登陆时,勾选下次直接登陆或者记住密码,就是采用记录cookie实现的。

cookie内记录用户名和密码(加密)信息,只要请求时服务器收到cookie,识别成功,默认为已登陆。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

03、Selenium操作cookie

方法

webdriver可以读取、添加和删除cookie信息。

webdriver操作cookie 的方法有:

图片

示例:

"""

1.学习目标:

    掌握selenium对cookie操作

2.语法

    2.1获取所有cookie

        driver.get.cookies()

        返同列表格式字典类型 [{},{},{}]

    2.2添加cookie

        driver.add_cookie(参数)

        参数:字典格式{"name":"name值","value":"value值"}

3.需求

    实现selenium对cookie操作

"""

# 1.导入selenium

from selenium import webdriver

from time import sleep



# 2.打开浏览器

driver = webdriver.Chrome()



# 3.打开注册A页面

# 不打开一个页面,cookie为[]。

url = "http://www.baidu.com/"

driver.get(url)



# 4.操作cookie

# 4.1 获取cookie

cookies = driver.get_cookies()

for cookie in cookies:

    # 值打印cookie中的name和value

    print("%s -> %s" % (cookie['name'], cookie['value']))



print("=======================")

# 4.2 获取一个cookie的指定属性值

# 参数是一个cookie中name的属性值

# 没有找到返回None

print(driver.get_cookie("BAIDUID"))



print("=======================")

# 4.3 添加cookie

cookie = {"name": "key-aaaaaaa", "value": "value-aaaaaaa"}

driver.add_cookie(cookie)



# 添加后再次获取

cookies = driver.get_cookies()

for cookie in cookies:

    print("%s -> %s" % (cookie['name'], cookie['value']))



print("=======================")

# 4.4 删除指定cookie

# 根据name删除

driver.delete_cookie("key-aaaaaaa")

# 删除后再次获取

cookies = driver.get_cookies()

for cookie in cookies:

    print("%s -> %s" % (cookie['name'], cookie['value']))



print("=======================")

# 4.5 删除全部cookie

driver.delete_all_cookies()

print(driver.get_cookies())



# 5.关闭浏览器

sleep(2)

driver.quit()

04、cookie内容参数说明

图片

说明:

  • path:

    cookie的有效范围,这个参数domain参数基础上的有效范围,如果path设置为”/”,那就是在整个domain都有效。

  • secure:

    cookie是否仅通过安全的https,值为0或1。如果值为1,则cookie只能在https连接上有效,默认值为0,表示cookei在http和https连接上都有效。(0或1,也可表示Flase或True)

  • httpOnly:

    通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击(跨站脚本攻击),这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

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

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

相关文章

进程终止(不同情况+如何查看:strerror,echo $?),终止的方法(return,exit,_exit),exit和_exit的不同

目录 进程终止 进程终止是什么 进程终止的情况 代码跑完,结果正确/不正确 提前知道结果 不知道结果 strerror 示例 -- echo $? 代码未跑完,程序崩溃 示例 进程退出方法 return退出码 exit(status) _exit(status) exit()和_exit()的不同 示例 缓冲区位置 进…

华为云RDS数据库(Mysql)不买公网IP无法Navicate连接

前言 最近公司有一个项目甲方为了便宜购买了华为云的ECS服务器与RDS云数据库(Mysql)进行项目部署,实际部署数据库时发现,华为云的数据库需要购买公网IP才能使用Navicate连接数据库(不可思议的我还提交工单确认了一下以…

FlexmonsterPivotTable-2.9.63 LICENSE

FlexmonsterPivotTable-v2.9.63用于网络报告的数据透视表组件,用于可视化业务数据的最强大的 JavaScript 工具 与任何技术堆栈集成 该组件可与任何技术堆栈无缝协作: 与Angular、React、jQuery、Vue等 完美集成 没有服务器端依赖项 只需几行代码 即可开始…

ROS笔记之TF坐标变换

ROS笔记之TF坐标变换 code review! 文章目录 ROS笔记之TF坐标变换一些相关函数的用法tf::TransFormBroadcaster tf1; tf1.sendTransform()tf::StampedTransform()tf::Transform()tf::Vector3()详解br.sendTransform(tf::StampedTransform(tf::Transform(tf::Quaternion::getI…

MacCleanse for Mac:提高Mac性能的必备工具

MacCleanse是一款专为Mac用户设计的强大系统清理垃圾软件,能够全面清理您的系统,提高Mac的速度和性能。它可以帮助您轻松删除各种无用的文件和数据,包括系统缓存、浏览器缓存、下载历史记录、垃圾文件、无效的日志文件和无效的应用程序。通过…

代码随想录算法训练营第23期day40|343. 整数拆分、96.不同的二叉搜索树

目录 一、(leetcode 343)整数拆分 1.动规五部曲 1)确定dp数组(dp table)以及下标的含义 2)确定递推公式 3)dp的初始化 4)确定遍历顺序 5)举例推导dp数组 2.贪心算…

Windows安装WinDbg调试工具

一.下载 微软官网下载SDK的地址,有win11,win10,win8,win7,其他 https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/ 二.安装 打开windbg\Installers\X64 Debuggers And Tools-x64_en-us.msi 要安…

[机缘参悟-117] :万物同源、聚散离合,皆为机缘;生死轮回,皆为自然(天空之眼、上帝视角、佛看众生;系统思维、局外清醒、升维思考;躬身入局、局内低调、降维做事;反思过去,立足当下...)

目录 前言: 一、万物同源、聚散离合,皆为机缘 二、万物的形成与消亡 2.1 粒子的聚合与物质的形成 2.2 粒子的分离与物质的消亡 二、生命的形成 2.1 有机体的聚合与生命的形成 2.2 有机体的分离与生命的消亡 三、人的大脑神经系统与精神世界的形…

uniapp原生插件之安卓圆角组件原生插件

插件介绍 安卓圆角组件原生插件可以解决nvue下圆角不生效和严重锯齿 插件地址 安卓圆角组件原生插件 - DCloud 插件市场 超级福利 uniapp 插件购买超级福利 详细使用文档 uniapp 安卓圆角组件原生插件 用法 在需要使用插件的页面加载以下代码 <leven-radius ref&q…

G761/761系列流量控制伺服阀放大器

两级流量控制机械反馈&#xff08;MFB&#xff09;式伺服阀喷嘴挡板先导级技术&#xff0c;提供高动态性、高分辨率和低迟滞阀芯驱动力高&#xff0c;设计坚固&#xff0c;确保长寿命运行紧凑型设计&#xff0c;只占用装备的有限空间可提供本质安全型&#xff08;G761K和761K&a…

Python基础入门例程28-NP28 密码游戏(列表)

最近的博文&#xff1a; Python基础入门例程27-NP27 朋友们的喜好&#xff08;列表&#xff09;-CSDN博客 Python基础入门例程26-NP26 牛牛的反转列表&#xff08;列表&#xff09;-CSDN博客 Python基础入门例程25-NP25 有序的列表&#xff08;列表&#xff09;-CSDN博客 目录…

NR0521A-NR0521B DC110V大功率继电器 5W以上 JOSEF约瑟

NR系列大功率继电器 系列型号&#xff1a; NR0521B大功率继电器 NR0521A大功率继电器 NR0521型大功率继电器 用途 大功率继电器 NR0521B DC110V 5W以上在电力工程实际应用中&#xff0c;为防止母线电压经过PT二次侧反馈至高压侧&#xff0c;需要在PT二次侧串接PT刀闸重动…

EASYX精确帧率控制

eg1:小球左右摆动的代码 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <easyx.h> #include <iostream> #include <math.h> #include <stdlib.h> #include <conio.h> #include <time.h> #define PI 3.14、 /*计算时…

正点原子嵌入式linux驱动开发——Linux 块设备驱动

经过之前这些笔记的学习&#xff0c;都是字符设备驱动&#xff0c;本章来学习一下块设备驱动框架&#xff0c;块设备驱动是Linux三大驱动类型之一。块设备驱动要远比字符设备驱动复杂得多&#xff0c;不同类型的存储设备又对应不同的驱动子系统&#xff0c;本章重点学习一下块设…

【C语言初学者周冲刺计划】5.2一个二维数组中的鞍点

目录 1解题思路&#xff1a; 2代码&#xff1a; 3运行代码结果&#xff1a; 4总结&#xff1a; 1解题思路&#xff1a; 解题流程如下&#xff1a; 对每行进行遍历。先找到每行的最大值&#xff0c;然后再确定该最大值是否是所在列的最小值&#xff0c;若满足&#xff0c;则…

Java日期比较大小的3种方式及拓展

目录 一、字符串String的日期比较 二、数值型long比较 三、日期型Date直接比较 四、Date型日期的获取方式 五、Calendar获取年月日【拓展】 一、字符串String的日期比较 String型的日期通过compareTo()来比较&#xff0c;因为String实现了comparable接口 endDate.compare…

Rtthread源码分析<1>启动文件和链接脚本

启动文件和链接脚本 1&#xff09;启动文件 ​ 启动文件里面使用的是汇编语言&#xff0c;汇编语言常常可以分为两个部分语法风格和而不同的toolchain有不同的汇编语法风格&#xff0c;通常分配unified 和 非 unified。常见的工具包有 ARM toolchains 和 GNU toolchains 。比…

微信小程序 uCharts的使用方法

一、背景 微信小程序项目需要渲染一个柱状图&#xff0c;使用uCharts组件完成 uCharts官网指引&#x1f449;&#xff1a;uCharts官网 - 秋云uCharts跨平台图表库 二、实现效果 三、具体使用 进入官网查看指南&#xff0c;有两种方式进行使用&#xff1a;分别是原生方式与组…

代码随想录 Day37 完全背包理论基础 卡码网T52 LeetCode T518 零钱兑换II T377 组合总和IV

完全背包理论基础 0-1背包理论基础:0-1背包理论基础 完全背包就是在0-1背包的基础上加上了一个条件,0-1背包中每个物品只能选择一次,而在完全背包上一个物品可以选择多次,其实也很简单,只需要修改一部分的代码就可以实现,没了解过0-1背包的友友可以去看我的0-1背包理论基础,下面…

雷池WAF社区版的使用教程

最近听说了一款免费又好用的WAF软件&#xff0c;雷池社区版&#xff0c;体验了一下虽然还有很多改进的空间 但是总体来说很适合小站长使用&#xff0c;和学习使用 也建议所有想学防火墙和红队&#xff08;攻击队&#xff09;练习使用&#xff0c;听说给官网提交绕过还有额外的…