一.cookie理解

1.比如用户登录某个网站后,再次刷新这个页面去请求服务器

1.1.如果没有相关机制的话,服务器是不知道这请求是否还是刷新之前登录的用户发出来的
1.2.此时为维持用户的登录状态,即为使服务器能够识别页面刷新之后的请求,就可以使用cookie机制
2.用户A第一次请求服务器后,服务器会自动生成个暗号
2.1.并将这个暗号的一部分返回给用户A,用户A将其以cookie的方式存起来

2.2.下次访问的时候,会自动把cookie带上,服务器拿到cookie后将其与自己的进行比对
2.3.识别出是用户A(以此类推,不同的用户有不同的暗号)
2.4.服务器通过这种方式以此来识别各个用户
3.为什么要这样做:请求时用的是http协议
3.1.http协议有特点:无状态,即服务器在每次请求时,它不知道谁是谁
3.2.为解决这个问题,就诞生cookie和session机制
3.3.在服务器上以session的形式存在,用户端以cookie的形式存在
4.例如用户A已经登录,在服务器上对应的session就会是登录状态
4.1.用户A再次请求,服务器就不会让用户A再进行以此登录操作
4.2.所以,cookie绕过登录其实是登录状态保持,而不是真的不需要登录
5.cookie只是个暗号,所有的登录记录都是存在session里

二.cookie绕过登录的实现

1.第一步:获取已经登录的cookie
from selenium import webdriver
import time
 
driver = webdriver.Chrome("chromedriver.exe")
driver.maximize_window()
driver.get("https://www.bilibili.com/")

# 第一步:获取已经登录的cookie(手工抓取)
time.sleep(60) 
 
# 等待的时间用于手动登录
print(driver.get_cookies())
2.第二步:手动添加已经登录的cookie(在添加之前需要将原有的cookie删掉)
2.1.由于Selenium每次启动的浏览器是个隔离的环境
2.2.不能直接使用本地已经保存的Cookies值
2.3.需要通过driver的add_cookie()方法手动添加Cookies

# 第二步:手动添加已经登录的cookie(在添加之前需要将原有的cookie删掉)
driver.delete_all_cookies()
 
#下面是刚才获取的cookie,是以数组形式存在的,可遍历添加cookie
cookies = [{"xxxxx"}]
 
for cookie in cookies:
driver.add_cookie(cookie)
3.第三步:刷新网页
# 刷新网页
driver.refresh()

三.selenium操作cookie

driver.get_cookie(name) 获取指名称的cookie信息 返回的是一个字典

driver.get_cookies() 获取的是所有cookie的信息, 返回的是一个列表

driver.add_cookie(dict_cookie) 往浏览器驱动增加cookie, dict_cookie是一字典
1.注意事项:如何确认哪个cookie是用来控制用户权限的,可以问开发同学

2.针对登陆的前后的cookie进行对比,比登陆之前多的cookie都可以用来使用控制用户权限

3.手动登陆之后不能退出,退出之后就相当于cookie无效了
Logo

一站式 AI 云服务平台

更多推荐