Python中Selenium对Cookie的操作方法


Posted in Python onJuly 09, 2021

1、Cookie介绍

HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接,这就意味着服务器无法从连接上跟踪会话。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。举个例子:用户A购买了一件商品放入购物车内,当再次购买商品时,服务器已经无法判断该购买行为是属于用户A的会话,还是用户B的会话了。要跟踪该会话,必须引入一种机制。

什么是一次会话:

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

  • Cookie的出现就是为了解决这个问题,第一次登录后服务器后,如果服务器需要记录该用户状态,就使用Response向客户端浏览器颁发一个Cookie,浏览器会把Cookie数据保存在本地。该用户发送第二次请求的时候,就会自动的把上次请求存储的Cookie数据自动的携带给服务器,服务器检查该Cookie存储namevalue等信息,以此来辨认用户状态,服务器还可以根据需要修改Cookie的内容。
  • Cookie就相当于是服务器给客户端们颁发一个通行证,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份,这就是Cookie的工作原理。
  • Cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB,因此使用Cookie只能存储一些小量的数据。
  • Cookie的出现弥补HTTP协议无状态的不足。但是Cookie是存储在客户端的,通过浏览器或者抓包工具很容易就能获取到,所以非常不安全。

2、Session介绍

  • Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。存储在服务器的数据会更加的安全,不容易被窃取。客户端浏览器再次访问时,只需要从该Session中查找该客户的状态就可以了。
  • 如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
  • Session存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,存储一些Session信息还是绰绰有余的。

3、Cookie工作原理图解

如下图所示:

Python中Selenium对Cookie的操作方法

提示:如果步骤5携带的是过期的cookie或者是错误的cookie,那么将认证失败,返回至要求身份认证页面。

记录Cookie的作用:

  1. 用户第一次登陆时,勾选下次直接登陆或者记住密码,就是采用记录Cookie实现的。
  2. Cookie内记录用户名和密码(加密)信息,只要请求时服务器收到Cookie,识别成功,默认为已登陆。

4、Cookie内容参数说明

 

参数 描述
name 必需。规定 Cookie的名称。
value 必需。规定 Cookie的值。
expire 可选。规定 Cookie的有效期。
domain 可选。规定 Cookie的域名。
path 可选。规定 Cookie的服务器路径。
secure 可选。规定是否通过安全的 HTTPS 连接来传输 Cookie。
httpOnly 可选。防止XSS攻击(跨站脚本攻击)

说明:

  • pathCookie的有效范围,这个参数是在domain参数基础上的有效范围,如果path设置为”/”,那就是在整个domain都有效。
  • secureCookie是否仅通过安全的https,值为0或1。如果值为1,则Cookie只能在https连接上有效,默认值为0,表示Cookiehttphttps连接上都有效。(0或1,也可表示Flase或True)
  • httpOnly:通过js脚本将无法读取到Cookie信息,这样能有效的防止XSS攻击(跨站脚本攻击),这样就增加了Cookie的安全性,即便是这样,也不要将重要信息存入Cookie

5、Selenium操作Cookie的API

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

webdriver操作Cookie的方法有:

 

操作 说明
get_cookies() 获得所有Cookie信息(重点)
add_cookie(cookie_dict) 添加Cookie,必须有name 和value 值(重点)
get_cookie(name值) 返回指定name名称的Cookie信息
delete_cookie(name) 删除特定(部分)的Cookie信息
delete_all_cookies() 删除所有Cookie信息

6、Selenium操作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()

参考:https://www.cnblogs.com/linguoguo/p/5106618.html

到此这篇关于Selenium对Cookie的操作 的文章就介绍到这了,更多相关Selenium Cookie操作 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Django中使用Sitemap的方法讲解
Jul 22 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
Python实现分段线性插值
Dec 17 Python
kafka-python批量发送数据的实例
Dec 27 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 Python
python获取磁盘号下盘符步骤详解
Jun 19 Python
pip 安装库比较慢的解决方法(国内镜像)
Oct 06 Python
python读取raw binary图片并提取统计信息的实例
Jan 09 Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
Jun 22 Python
python编写函数注意事项总结
Mar 29 Python
python 安全地删除列表元素的方法
Mar 16 Python
Python常用配置文件ini、json、yaml读写总结
图文详解matlab原始处理图像几何变换
Django中session进行权限管理的使用
python利用pandas分析学生期末成绩实例代码
使用pandas生成/读取csv文件的方法实例
python自动化八大定位元素讲解
python实现简单聊天功能
You might like
php模拟js函数unescape的函数代码
2012/10/20 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
详解PHP数据压缩、加解密(pack, unpack)
2016/12/17 PHP
Laravel下生成验证码的类
2017/11/15 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
JAVASCRIPT style 中visibility和display之间的区别
2010/01/22 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
纯JS实现轮播图
2017/02/22 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
bmob js-sdk 在vue中的使用教程
2018/01/21 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
python设置windows桌面壁纸的实现代码
2013/01/28 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
QML使用Python的函数过程解析
2019/09/26 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
c语言常见笔试题总结
2016/09/05 面试题
怎么写有吸引力的自荐信
2013/11/17 职场文书
教师现实表现材料
2014/02/14 职场文书
档案工作汇报材料
2014/08/21 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书
Oracle使用别名的好处
2022/04/19 Oracle
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL