Web自动化之Selenium添加网站Cookies实现免登录

news/2025/2/25 6:04:50

        在使用Selenium进行Web自动化时,添加网站Cookies是实现免登录的一种高效方法。通过模拟浏览器行为,我们可以将已登录状态的Cookies存储起来,并在下次自动化测试或爬虫任务中直接加载这些Cookies,从而跳过登录步骤。

Cookies简介

        Cookies是存储在用户本地终端上的一小块数据,它会在浏览器向服务器发起请求时被携带并发送到服务器上。这些Cookies通常包含了用户的会话信息,比如登录状态、用户偏好设置等。简而言之,Cookie就像是临时身份证一样,每次浏览器请求时都会携带它,以便服务器识别用户身份或保持会话状态,这也是为什么我们在一个网页内登录后关闭掉网页,再次进入依然能够保持登录状态的原因。

        不过,为了安全起见,网站开发者通常会对Cookies设置过期时间,并且在过期后会被浏览器自动删除。此外,Cookies的存储位置也有限制,通常只能在设置它们的域名下访问,这在一定程度上保护了用户的隐私安全。

这里以CSDN为例

        打开浏览器开发者工具,查看当前html的cookie信息,Expire一栏是cookie过期时间,会话一般表示关闭网页后这个cookie就过期。

selenium中针对cookie的操作

        在selenium中,有以下几个方法用来管理和操作当前网页内的cookie:

这里假设我们已经设定好一个webdriver对象名为browser

获取当前网页内的cookie

cookies=browser.get_cookies()
#cookies是List[dict],[{},{},{}]的格式

添加cookie至当前网页

browser.add_cookie('cookie字典')

删除单个cookie

browser.delete_cookie('cookie名称')

删除所有cookie

browser.delete_all_cookies()

通过cookie实现免登录

步骤

        由于没有用户数据,webdriver每次打开一个网页都相当于新启动一个浏览器打开该网页

        因此,在一些需要登录的网站,我们可以先试用webdriver打开该网页,接着手动扫码登录后,使用get_all_cookies()方法将登录后网页的cookies先保存到本地,建议使用json。

        然后下一次使用webdriver打开该网站时,再使用add_cookie()方法把先前的登录后的cookie数据添加到webdriver中,接着刷新页面,网站便会顺间恢复到已登录的状态。

源代码

       这里以Edge为例,其余浏览器方法一样,将webdriver类型更换即可。

   获取登录后的网页cookies

python">
import json
import time
from selenium.webdriver.edge.options import Options
from selenium import webdriver
edge_options=Options()
edge_options.add_argument('--disable-blink-features=AutomationControlled')
browser=webdriver.Edge(options=edge_options)
browser.get('URL')#请将URL替换为你要登录的网站的URL 
browser.maximize_window()  
time.sleep(20)#等待20秒,这20秒用来手动登录,若时间不够,请自行调整
cookies=browser.get_cookies()
with open('cookies.json','w') as f:
    f.write(json.dumps(cookies))#将cookies保存到本地cookies.json文件中
browser.quit() 

将保存到本地的cookie数据添加到webdriver中

python">import json
from selenium.webdriver.edge.options import Options
from selenium import webdriver
edge_options=Options()
edge_options.add_argument('--disable-blink-features=AutomationControlled')
browser=webdriver.Edge(options=edge_options)
browser.get('URL')#请将URL替换为你要登录的网站的URL 
browser.maximize_window()                    
with open('cookies.json','r') as f:
    cookies=json.loads(f.read())
    for cookie in cookies:
        cookie_dict = {
            'domain': cookie.get('domain'),
            'name': cookie.get('name'),
            'value': cookie.get('value'),
            "expires": '',
            'path': '/',
            'httpOnly': False,
            'HostOnly': False,
            'Secure': False
        }
        browser.add_cookie(cookie_dict)
    browser.refresh()  
#执行后续操作

效果

webdriver刚启动打开csdn主页 

 

添加cookie并刷新页面后 

说明 

        不同网站的cookie有效时长各不相同,为了安全起见,很多都是会话,因此保存在本地的cookie数据也需要定时更新,对此,你可以在浏览器的开发者工具中查看cookie的expire时间来决定更新的频率。


http://www.niftyadmin.cn/n/5865080.html

相关文章

Visual Studio 安装全攻略

一、引言 Visual Studio 作为一款功能强大且广受欢迎的集成开发环境(IDE),为开发者提供了全面的工具和服务,涵盖了从代码编写、调试到项目部署等软件开发全流程支持。无论是开发 Web 应用、桌面程序,还是移动应用、游…

Linux系统管理(十七)——配置英伟达驱动、Cuda、cudnn、Conda、Pytorch、Pycharm等Python深度学习环境

文章目录 前言安装驱动下载安装Cuda编辑环境变量安装Cudnn安装conda验证安装成功配置conda镜像退出conda环境创建python环境查看当前conda环境激活环境安装python包安装pytorch 安装pycharm安装jupyter notebook 前言 深度学习和大语言模型的部署不免会用到Linux系统&#xff…

学习threejs,使用createMultiMaterialObject创建多材质对象

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.SceneUtils 场景操控…

apache-tomcat-6.0.10版本工具资源分享

Apache Tomcat 6.0免安装版本是一款轻量级的Java应用服务器,特别适合于开发和部署Java Servlets和JavaServer Pages(JSP)应用程序。它以其开源、免费和高效的特点,深受开发者们的喜爱。免安装版本,也称为绿色版&#x…

Python爬虫系列教程之第十五篇:爬取电商网站商品信息与数据分析

大家好,欢迎继续关注本系列爬虫教程! 在前面的文章中,我们已经学习了如何构建爬虫、如何应对反爬机制以及如何将数据存储到数据库或文件中。随着业务场景的不断扩展,电商网站的数据采集和分析已成为实际项目中非常重要的一环。 本…

Linux:自定义协议+序列反序列化

我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层. 一,再次理解协议 思考1: 我们究竟是如何将数据发送出去的? --------> (1)我们都知道TCP是双加工的,所以在内核中存在着发送…

每天一个Flutter开发小项目 (3) : 高效Flutter学习与产出 - 构建简易天气应用

引言 欢迎回到 每天一个Flutter开发小项目 系列博客!在前两篇博客中,我们分别构建了计数器应用和待办事项列表应用,相信您已经对Flutter开发有了一定的基础认识。今天,我们将更进一步,探讨如何更高效地学习Flutter,并构建一个更有意思的小项目——简易天气应用。 高效学…

RawShaderMaterial 与 ShaderMaterial

目录 自动添加的 Uniforms 和 Attributes ShaderMaterial RawShaderMaterial GLSL 预处理 ShaderMaterial RawShaderMaterial 使用场景 ShaderMaterial RawShaderMaterial 代码示例对比 使用 ShaderMaterial 使用 RawShaderMaterial 常见问题与注意事项 总结 在 Th…