Selenium 保存会话信息避免重复登录实战!

前言

  • • 在一些实际开发场景中,我们在使用 Selenium 做自动化测试时需要保留用户的会话信息,从而避免重复登录,今天这篇文章就带大家实战如何使用 Selenium 保存会话信息。

版本

  • • Python 3.x

整体思路

  • • 当我们打开页面时,检测会话信息文件是否存在,如果存在直接加载会话信息,如果不存在,则进行登录并保存会话信息到本地文件中。

实践

  • • 当我们第一次打开页面时,登录并保存会话信息。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pickle# 第一次登录
driver = webdriver.Chrome()driver.get("https://example.com/login")# 使用自动填充或其它方式登录
username_input = driver.find_element_by_name("username")
password_input = driver.find_element_by_name("password")
username_input.send_keys("your_username")
password_input.send_keys("your_password")
password_input.send_keys(Keys.RETURN)# 登录成功后将driver.get_cookies()返回的cookies保存到名为"cookies.pkl"的文件中
pickle.dump(driver.get_cookies(), open("cookies.pkl", "wb"))# 关闭 driver
driver.close()# 第二次访问
driver = webdriver.Chrome()# 这里需要提前访问一下再加载 cookies 否则会出现 InvalidCookieDomainException: Message: invalid cookie domain
driver.get("https://example.com/login")# 加载 "cookies.pkl" 中的会话信息
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:driver.add_cookie(cookie)# 携带会话信息访问
driver.get("https://example.com/xxx")

问题

invalid cookie domain

  • • 谷歌默认加载使用的是 data domain,所以需要先访问目标页面切换到对应的 domain:

driver.get("https://example.com/login")# 加载 "cookies.pkl" 中的会话信息
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:driver.add_cookie(cookie)
  • • 除此之外,如果你访问的目标页面为一级域名,而保存的 cookies 中存在二级域名的 domain,那么也会出现 invalid cookie domain 的问题,你可以将 cookie 的 domain 二级域名 domain 转换为 一级域名 domain 再进行加载,例如:

cookies domain:
.example.com
.example.com
xxx.example.com
xxx.example.com那么需要全部调整为:
.example.com
.example.com
.example.com
.example.com

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

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

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

相关文章

Colab/PyTorch - 002 Pre Trained Models for Image Classification

Colab/PyTorch - 002 Pre Trained Models for Image Classification 1. 源由2. 图像分类的预训练模型3. 示例 - AlexNet/ResNet1013.1 模型推断过程3.2 使用TorchVision加载预训练网络3.3 使用AlexNet进行图像分类3.3.1 Step1:加载预训练模型3.3.2 Step2&#xff1a…

1.分布式-理论

目录 一、什么是分布式系统 二、CAP理论 1.一致性Consisency 2.可用性(Availability) 3.分区容错性(Partition tolrance) 三、BASE理论 1.Basically Available(基本可用) 2.Soft state(软状态) 3.Eventually consistent(最终一致性&a…

【JavaSE】/*初识Java*/

目录 一、了解 Java 语言 二、Java 语言的重要性 2.1 使用程度 2.2 工作领域 三、Java 语言的特性 四、Java 的基础语法 五、可能遇到的错误 六、第一个 java 程序代码解析 七、Java 注释 八、Java 标识符 九、Java 关键字 一、了解 Java 语言 Java 是由 Sun Micr…

15. 三数之和(双指针+去重优化)

文章目录 前言一、题目描述二、代码原理1.暴力解法2.双指针优化 三.代码编写总结 前言 在本篇文章中,我们将会讲到leetcode中15. 三数之和,我们将会用到双指针的方式解决这道问题,同时注意掌握算法原理的去重操作。 一、题目描述 给你一个…

PHP高级教程

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:PHP 📚参考教程:菜鸟\编程网❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、PHP 多维数组 二、PHP date(&#…

免费获取!图论+灰色系统+混合优化算法程序代码!

前言 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。算法优化是指对算法的有关性能进行优化,如时间复杂度、空间复杂度、正确性、健壮性…

MongoDB聚合运算符:$toLower

MongoDB聚合运算符&#xff1a;$toLower 文章目录 MongoDB聚合运算符&#xff1a;$toLower语法使用举例角度的双曲正切 $toLower聚合运算符用于将字符串转换为小写。 语法 { $toLower: <expression> }<expression>为可被解析为字符串的表达式。如果参数解析为null…

安卓实现连接wesokcet

在build.gradle里引入依赖&#xff1a; implementation org.java-websocket:Java-WebSocket:1.5.2 在Androidmanifest.xml 文件里加入网络权限&#xff1a; <uses-permission android:name"android.permission.INTERNET" /> 代码&#xff1a; package com.x…

Vue与Java使用AES加密与解密

CBC模式&#xff08;通过偏移值进行加密&#xff0c;更具安全性&#xff09; 一、VUE&#xff1a; 1、安装 npm install crypto-js 2、编写公用js&#xff08;在common文件夹下创建一个crypto.js&#xff09; 注意&#xff1a;key最少要有16个字符&#xff0c;iv最少6个字符…

Java | Leetcode Java题解之第79题单词搜索

题目&#xff1a; 题解&#xff1a; class Solution {public boolean exist(char[][] board, String word) {char[] words word.toCharArray();for(int i 0; i < board.length; i) {for(int j 0; j < board[0].length; j) {if (dfs(board, words, i, j, 0)) return t…

Linux·基本指令

从本节开始将新开一个关于Linux操作系统的板块&#xff0c;其实Linux也没什么太神秘的&#xff0c;就是一个操作系统(OS)嘛&#xff0c;跟Windows操作系统是一个概念&#xff0c;只不过Windows中的大部分操作都是用光标点击来进行人机交互&#xff0c;但是Linux是通过输入命令行…

Symfony DomCrawler库在反爬虫应对中的应用

在当今信息爆炸的时代&#xff0c;互联网上的数据量巨大&#xff0c;但这也带来了一些问题&#xff0c;比如恶意爬虫可能会对网站造成严重的影响&#xff0c;导致资源浪费和服务不稳定。为了解决这个问题&#xff0c;许多网站采取了反爬虫策略。Symfony DomCrawler库是一个强大…

学历:敲门砖还是枷锁?

导言&#xff1a; 近日&#xff0c;“孔乙己文学”引发热议&#xff0c;其中一句“学历不仅是敲门砖&#xff0c;也是我下不来的高台&#xff0c;更是孔乙己脱不下的长衫”触动了许多人的心弦。关于学历究竟是敲门砖还是枷锁的讨论在社会中一直存在着&#xff0c;让我们…

fmt::arg的使用

来自&#xff1a; https://hackingcpp.com/cpp/libs/fmt.html #include <fmt/format.h> // literalsint main () { int i 2; double d 4.567; fmt::print("{x} {x}\n", fmt::arg("x",d)); fmt::print("{pi} * {0}\n", i, fmt::arg(&…

第27章 大数据系统测试

一、大数据概述 &#xff08;一&#xff09;定义 无法在一定时间内用常规的软件工具来进行捕捉、管理和处理的数据的集合 &#xff08;二&#xff09;特点 数据类型多样数据体量大处理速度高速价值密度低 二、大数据测试策略 &#xff08;一&#xff09;挑战 数据的多样…

态、势、感、知四种Transformer模型的融合

Transformer模型是一种机器学习模型&#xff0c;最初用于自然语言处理任务&#xff0c;如翻译和文本生成。它是由Google AI团队开发的&#xff0c;其设计突破了以往循环神经网络和卷积神经网络的限制。Transformer模型的核心是自注意力机制&#xff08;self-attention mechanis…

Java面试题:volatile

volatile (不稳定的) 修饰共享变量(类的成员变量,类的静态成员变量) volatile保证线程间的可见性 修饰共享变量,防止编译器等优化发生,让一个线程对共享变量的修改对另一个线程可见 static Boolean flag new Thread(修改flag; ) new Thread(while(flag){} )普通情况下,在J…

Linux运维工程师基础面试题整理(一)

Linux运维工程师基础面试题整理(一) 1. 什么是Linux?请说出常见的发行版本?2. Linux文件系统中的常见目录有哪些?4. 在Linux中,如何查看系统的运行状态和性能?5. lsof/ss/netstat三个命令作用与区别?6. 如何在Linux中查找文件?7. 如何将文件从本地上传到远程服务器?8…

今天遇到一个GPT解决不了的问题

问题描述 你好&#xff0c;postman的一个post请求&#xff0c;编辑器里面放了一个很长的json数据&#xff0c;报Tokenization is skipped for long lines for performance reasons. This can be configured via editor.maxTokenizationLineLength.&#xff0c;但是同样的数据&a…

C#算法之计数排序

算法释义&#xff1a;计数排序是一种非基于比较的排序算法&#xff0c;它不依赖于比较操作来确定元素的顺序&#xff0c;而是通过键值索引直接确定元素的输出位置。计数排序适用于一定范围内的整数排序。为什么说是一定范围之内呢&#xff1f;原因如下&#xff1a;计数排序的复…