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 相关文章推荐
八大排序算法的Python实现
Jan 28 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
Pandas之Dropna滤除缺失数据的实现方法
Jun 25 Python
python opencv调用笔记本摄像头
Aug 28 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
Sep 23 Python
在主流系统之上安装Pygame的方法
May 20 Python
python3爬虫中异步协程的用法
Jul 10 Python
浅谈python出错时traceback的解读
Jul 15 Python
Python map及filter函数使用方法解析
Aug 06 Python
Python常用配置文件ini、json、yaml读写总结
图文详解matlab原始处理图像几何变换
Django中session进行权限管理的使用
python利用pandas分析学生期末成绩实例代码
使用pandas生成/读取csv文件的方法实例
python自动化八大定位元素讲解
python实现简单聊天功能
You might like
《APMServ 5.1.2》使用图解
2006/10/23 PHP
php mysql索引问题
2008/06/07 PHP
PHP在特殊字符前加斜杠的实现代码
2011/07/17 PHP
深入PHP变量存储的详解
2013/06/13 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
jQuery 创建Dom元素
2010/05/07 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
python如何实现内容写在图片上
2018/03/23 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
2019/10/01 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
详解Django配置JWT认证方式
2020/05/09 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
10种CSS3实现的loading动画,挑一个走吧?
2020/11/16 HTML / CSS
通用自荐信范文
2014/03/14 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
CSS几步实现赛博朋克2077风格视觉效果
2021/06/16 HTML / CSS