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

news2025/5/11 17:06:27

        在使用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


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中

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并刷新页面后 

        经验证,csdn网页端的cookie有效时长超过24小时,负责维护登录状态的cookie可能UserToken,Username,Userinfo等cookie,这几个cookie的有效时长都超过24小时。

说明 

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

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

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

相关文章

Storm实时流式计算系统(全解)——中

storm编程的基本概念-topo-spout-bolt 例如下: storm 编程接口-spout的结构及组件实现 storm编程案例-spout组件-实现 这是我的第一个组件(spout组件继承BaseRichSput)所有重写内部的三个方法,用于接收数据(这里数据是…

让deepseek更专业的提示词教程

一、明确需求和目标 在使用DeepSeek之前,首先要明确你的需求和目标。例如,你是要生成一篇学术论文的摘要,还是一个商业文案的大纲,亦或是一段技术分析。明确的目标可以帮助你更有针对性地编写提示词。 二、使用专业术语和结构化…

《Python实战进阶》No 9:使用 Celery 实现异步任务队列

第9集:使用 Celery 实现异步任务队列 引言 在现代 Web 应用中,许多操作(如发送邮件、处理文件上传、执行复杂计算等)可能需要耗费较长时间。如果这些操作直接在主线程中执行,会导致用户请求阻塞,降低用户体…

【Mark】记录用宝塔+Nginx+worldpress+域名遇到的跨域,301,127.0.0.1,CSS加载失败问题

背景 想要用宝塔搭建worldpress,然后用域名直接转https,隐藏掉ipport。 结果被折磨了1天,一直在死活在301,127.0.0.1打转 还有css加载不了的情况 因为worldpress很多是301重定向的,所以改到最后我都不知道改了什么&am…

Linux | Ubuntu 与 Windows 双系统安装 / 高频故障 / UEFI 安全引导禁用

注:本文为 “buntu 与 Windows 双系统及高频故障解决” 相关文章合辑。 英文引文,机翻未校。 How to install Ubuntu 20.04 and dual boot alongside Windows 10 如何将 Ubuntu 20.04 和双启动与 Windows 10 一起安装 Dave’s RoboShack Published in…

计算机毕业设计SpringBoot+Vue.js手机商城 (源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

CSS—隐藏元素:1分钟掌握与使用隐藏元素的方法

个人博客:haichenyi.com。感谢关注 1. 目录 1–目录2–display:none3–visibility: hidden4–opacity: 05–position: absolute;与 left: -9999px;6–z-index 和 position7–clip-path: circle(0%) 2. display:none 标签会挂载在html中,但是不会在页面上…

EtherCAT总线学习笔记

一、EtherCAT的概述: EtherCAT是由德国BECKHOFF自动化公司于2003年提出的 实时工业以太网技术。它具有高速和高数据有效率的特点,支持多种设备连接拓扑结构。其 从站节点使用专用控制芯片,主站使用标准的以太网控制器。 EtherCAT的主要特点如…

WebRTC与PJSIP:呼叫中心系统技术选型指南

助力企业构建高效、灵活的通信解决方案 在数字化时代,呼叫中心系统的技术选型直接影响客户服务效率和业务扩展能力。WebRTC与PJSIP作为两大主流通信技术,各有其核心优势与适用场景。本文从功能、成本、开发门槛等维度为您深度解析,助您精准匹…

Vue-Flow绘制流程图(Vue3+ElementPlus+TS)简单案例

本文是vue3Elementplusts框架编写的简单可拖拽绘制案例。 1.效果图&#xff1a; 2.Index.vue主代码&#xff1a; <script lang"ts" setup> import { ref, markRaw } from "vue"; import {VueFlow,useVueFlow,MarkerType,type Node,type Edge } fro…

如何通过 LlamaIndex 将数据导入 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 逐步介绍如何使用 RAG 和 LlamaIndex 提取数据并进行搜索。 在本文中&#xff0c;我们将使用 LlamaIndex 来索引数据&#xff0c;从而实现一个常见问题搜索引擎。 Elasticsearch 将作为我们的向量数据库&#xff0c;实现向量搜索&am…

Boosting

Boosting 学习目标 知道boosting集成原理和实现过程知道bagging和boosting集成的区别知道AdaBoost集成原理 Boosting思想 Boosting思想图 每一个训练器重点关注前一个训练器不足的地方进行训练通过加权投票的方式&#xff0c;得出预测结果串行的训练方式 1 什么是boosting 随着…

【通俗讲解电子电路】——从零开始理解生活中的电路(一)

导言&#xff1a;电子电路为什么重要&#xff1f; ——看不见的“魔法”&#xff0c;如何驱动你的生活&#xff1f; 清晨&#xff0c;当你的手机闹钟响起时&#xff0c;你可能不会想到&#xff0c;是电子电路在精准控制着时间的跳动&#xff1b;当你用微波炉加热早餐时&#…

LeetCode72编辑距离(动态规划)

给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 示例 1&#xff1a; 输入&#xff1a;word1 “horse”, word2 “ros” 输出&#xf…

【K8S】Kubernetes 基本架构、节点类型及运行流程详解(附架构图及流程图)

Kubernetes 架构 k8s 集群 多个 master node 多个 work nodeMaster 节点&#xff08;主节点&#xff09;&#xff1a;负责集群的管理任务&#xff0c;包括调度容器、维护集群状态、监控集群、管理服务发现等。Worker 节点&#xff08;工作节点&#xff09;&#xff1a;实际运…

Windows版FFmpeg使用及B站视频下载示例python源码

Windows版FFmpeg使用及B站视频下载示例python源码 FFmpeg介绍和下载 FFmpeg 是一个功能强大、灵活且广泛使用的多媒体处理工具&#xff0c;无论是在专业领域还是日常使用中&#xff0c;都能满足各种多媒体处理需求。FFmpeg 是一个开源项目&#xff0c;遵循 LGPL 或 GPL 许可。…

飞书考勤Excel导入到自己系统

此篇主要用于记录Excel一行中&#xff0c;单条数据的日期拿取&#xff0c;并判断上下班打卡情况。代码可能满足不了大部分需求&#xff0c;目前只够本公司用&#xff0c;如果需要&#xff0c;可以参考。 需要把飞书月度汇总的考勤表导入系统中可以参考下。 下图为需要获取的年…

【leetcode hot 100 560】和为K的子数组

解法一&#xff1a;用左右指针寻找字串&#xff0c;如果和>k&#xff0c;则减少一个数&#xff08;left&#xff09;&#xff1b;如果和<k&#xff0c;则加上一个数&#xff08;right&#xff09;。 class Solution {public int subarraySum(int[] nums, int k) {int nu…

EGO-Planner的无人机视觉选择(yolov5和yolov8)

EGO-Planner的无人机视觉选择&#xff08;yolov5和yolov8&#xff09; 效果 yolov5检测效果 yolov8检测效果 一、YOLOv8 vs YOLOv5&#xff1a;关键差异解析 1. 训练效率&#xff1a;为何YOLOv8更快&#xff1f; 架构轻量化 YOLOv8采用C2f模块&#xff08;Cross Stage Partia…

性能测试分析和调优

步骤 性能调优的步骤 性能调优的步骤&#xff1a; 1.确定问题&#xff1a;根据性能测试的结果来分析确定bug。–测试人员职责 2.分析原因&#xff1a;分析问题产生的原因。----开发人员职责 3.给出解决方案&#xff1a;可以是修改软件配置、增加硬件资源配置、修改代码等----…