Selenium还能这么玩:自动管理浏览器

news2024/11/6 17:29:28

这是个系列文章,主要讲selenium一些实战操作,使用 Python 编写代码。可以把他们应用到自动化测试,也可以应用到网络爬虫中。


这篇文章介绍一个操作,可以让selenium 控制浏览器共用同一个 session。他的应用场景是:共用登录状态、中断后持续运行。

在传统的自动化脚本中,一旦程序运行完成,我们就再也获取不到该浏览器的会话对象了。当你下一次想重新运行脚本时,可能会有比较多的重复步骤。通过本文这种方式,我们可以绕过这些重复步骤,直接使用之前的会话对象。

一个典型的场景就是记住用户登录状态。我们可以先用第一个脚本实现登录,然后把这次的浏览器会话存下来, 然后我们可以实现第二个脚本,第三个脚本,直接使用这个登录后的浏览器操作后面的步骤。

只要第一个浏览器的会话没有失效,则后面每次我需要运行时,都可以使用这个会话。

半永久的 chrome

首先,我们通过 selenium 创建一个半永久的 chrome 会话,代码是每一个会 selenium 的小伙伴闭着眼睛都能写出来的。python版代码:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')

需要注意的是,我们在后面没有执行 driver.quit() 函数。这有什么区别呢? quit 后 chromedriver.exe 进程就直接退出了,但是没有 quit 的 chromedriver 进程是会保留在后台运行的, 所以当你运行上面的代码后,你可以发现 chromedriver 进程还停留在后台,而加了 quit 函数后,进程就会消失。

你可以通过任务管理器查看,或者在 cmd 命令行输入 tasklist | findStr chromedriver

顺便说一句,通过 taskkill /im chromedriver.exe -f 命令强制终止进程,但是不要在这里运行,因为这样的话我们这个 chromedriver.exe 就会终止运行了。

要 chromedriver.exe 成为半永久,而不是运行完脚本就结束,只需要保持进程在运行,不添加 driver.quit() 就可以啦。只要你的电脑不重启,那么就可以一直利用这个 chromedriver.exe 提供服务。

获取 session id 和 webdriver 服务地址

每个浏览器会话,在 selenium 中都会有一个唯一的 session id, 他记录了浏览器的所有状态,包括用户目录,用户登录的状态, 只要 selenium 使用的 session id 是一致的,那么浏览器的状态就是一致的。

其次,chromedriver 服务有一个远程的连接地址,只要连接该地址,就可以使用同一个 chromedriver 服务。

在 selenium 中,可以这样获取到 session id 和远程地址:

session_id = driver.session_id
remote_executor = driver.command_executor._url

连接半永久的 selenium session

有了 session id 和服务地址,接下来就可以通过 selenium 初始化客户端建立链接了。 selenium 中的 Chrome 对象默认每次都会初始化一个新的 chromedriver 服务,虽然在最新的 selenium4 中,这种情况有所改善,但是我们在这还是采用更加通用的方式,使用 Remote 对象来建立连接。

caps = {
  "capabilities": {
    "firstMatch": [
      {"browserName": "chrome"},
    ]
  }
}
driver2 = webdriver.Remote(remote_executor, desired_capabilities=caps)
driver2.close()
driver2.session_id = session_id

driver2.find_element('id', 'kw').send_keys('hello')

这里用了比较标准的 webdriver capbilities 参数,如果觉得麻烦, caps 可以直接用 {} 代替。 Remote 会访问半永久的chromedriver 服务地址,然后我们把这个 driver2 的 session_id 设置成同一个 session, 因为 driver2 会重新创建一个新的 tab,因此我们通过 driver.close() 先把这个多余的 tab 关掉。

总结

可能你会觉得,这种方式和直接用一次浏览器操作并没有什么区别。实际上,效果其实和只使用一次 selenium driver 对象是差不多的,但是,在实际应用中,你的自动化程序不可能永远都在正常运行的状态。

如果程序中断,你将无法再获取之前的 driver 对象。 而通过本文的方式,管理 driver 对象和运行是分开的,就算程序中断,浏览器对象还在后台。 你可以像下载大文件的时候使用断点续传那样,无论什么时候中断,都能重新获取之前的浏览器。

完整的代码贴一下。下一篇文章,我会介绍一个实战的小案例来进一步说明如何在实战中使用。

from selenium import webdriver

# 半永久的 chrome session
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')

# 获取 service url 和 session_id
remote_executor = driver.command_executor._url
session_id = driver.session_id

# 连接之前的 session
caps = {
  "capabilities": {
    "firstMatch": [
      {"browserName": "chrome"},
    ]
  }
}
driver2 = webdriver.Remote(remote_executor, desired_capabilities=caps)
driver2.close()
driver2.session_id = session_id

driver2.find_element('id', 'kw').send_keys('hello')

效果:

如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

END配套学习资源分享

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

加入我的软件测试交流qq群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

全套资料获取方式:

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

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

相关文章

pwn3-绕过防御-ROP(1)

**ROP:**全程Return Oriented Programming(面向返回的编程),在栈溢出基础上,利用程序中已有的小片段(gadgets),改变寄存器或变量的值,从而控制程序执行流程,从而绕过NX防御,常见有ret2text,ret2…

Linux:samba服务 (smbd)

smb服务器为centos7 使用的yum安装(如果不会搭建本地yum仓库可以查看) Linux:rpm查询安装 && yum安装_鲍海超-GNUBHCkalitarro的博客-CSDN博客 samba 简介 samba 使用了 1.SMB 协议 Server Message Block,服务消息块 2…

【LeetCode】769. 最多能完成排序的块

769. 最多能完成排序的块(中等) 方法一:贪心 思路 由于arr是[0,..., n-1] 的一个排列,若已遍历过的数中的最大值 max 与当前遍历到的下标相等,说明可以进行一次分割,累加答案。 代码 class Solution { …

javaScript蓝桥杯---用什么来做计算

目录 一、介绍二、准备三、目标四、代码五、完成 一、介绍 古以算盘作为计算工具。算盘常为木制矩框,内嵌珠子数串,定位拨珠,可做加减乘除等运算。站在前人的肩膀上,后人研究出计算器,便利了大家的生活,我…

从贝叶斯派的角度去看L1和L2

前沿 推导的两个角度 带约束条件的优化求解(拉格朗日乘子法)贝叶斯学派的:最大后验概率 理解的两个角度 贝叶斯学派的角度,L2参数符合高斯先验,L1参数符合laplace先验。从有约束问题角度,用拉格朗日转换…

一“幕”了然 ,平行云助力中车打造“掌上工厂”(文末活动报名)

“全球工业生产效率提高1%,成本降低300亿。” 所以工业界有这样一种说法,叫做“工业领域的1%革命”。 Gartner曾预言:到2021年,将有一半的大型工业公司使用数字孪生技术,而这可以使这些公司的生产有效性提高10%。如今…

rust学习 - 构建mini 命令行工具

rust 的运行速度、安全性、单二进制文件输出和跨平台支持使其成为构建命令行程序的最佳选择。 实现一个命令行搜索工具grep,可以在指定文件中搜索指定的字符串。想实现这个功能呢,可以按照以下逻辑流程处理: 获取输入文件路径、需要搜索的字符串读取文…

基于Alexnet网络实现猫狗数据集分类(Keras框架)

目录 1、作者介绍2、Alexnet网络2.1 网络介绍2.2 AlexNet网络的主要特点 3、基于Alexnet网络实现猫狗数据集分类3.1 猫狗大战数据集3.2 数据集处理3.3 准备工作3.4 训练过程3.4 对比实验3.4.1 HALCON平台下的Alexnet实验3.4.2 HALCON平台下的Resnet-50对比实验3.4.3 HALCON平台…

进程的通信——管道和共享内存

进程间的通信有很多种 管道 匿名管道pipe 命名管道 System V IPC System V 消息队列 System V 共享内存 System V 信号量 POSIX IPC 消息队列 共享内存 信号量 互斥量 条件变量 读写锁 这篇文章主要介绍管道和共享内存 管道 管道内核数据结构:在Linux2.6中 struct …

搭建自动化测试环境

目录 1、安装Python并配置环境变量。2、安装Pycharm开发工具。3、安装Selenium4、安装浏览器:Chrome和Firefox的其中之一。5、浏览器驱动:下载Chrome浏览器驱动或者是Firefox浏览器驱动。6、配置webdriver公众号粉丝福利 自动化测试环境: Pyt…

接口反应慢优化

遇到某个功能,页面转圈好久,需要优化 1.F12 查看接口时间 2.看参数 总共耗时9.6s Waiting for sercer response 时间是2秒 Content Download 7秒 慢在Content Download F12查看接口响应 显示Failed to load response data:Request content was e…

这些10款优秀的交互设计软件,你知道吗?

交互软件可以帮助设计师从“可用性”和“用户体验”的角度优化他们的作品。如果设计师想创建一个令人满意的交互设计作品,一个方便的交互设计软件是必不可少的。 根据设计师的个人喜好和方便,选择易于使用的交互设计软件来完成创建。本文盘点十款易于使…

【P55】JMeter 图形结果(Graph Results)

文章目录 一、图形结果(Graph Results)参数说明二、准备工作三、测试计划设计 一、图形结果(Graph Results)参数说明 可以以图形的方式查看和分析相关指标 使用场景:一般在调试测试计划期间用来查看相关指标&#xf…

微信小程序基础使用-请求数据并渲染

小程序基本使用-请求数据并渲染 小程序模板语法-数据绑定 在js中定义数据 Page({data: {isOpen: true,message: hello world!} })小程序的data是一个对象,不同于vue的data是一个函数 在模块中获取使用数据 小程序中使用 {{}} 实现数据与模板的绑定 内容绑定&a…

Qt Quick-QML地图引擎之v4版本(新增3D模型/抗锯齿任意多边形下载)

在上个版本Qt quick-QML地图引擎之v4版本(新增3D模型/高德/谷歌在线/离线预览/多线程离线裁剪下载/区域查询/位置搜索/路径规划)_qt 高德地图离线_诺谦的博客-CSDN博客更新了很多小功能。经过朋友们一致需求建议,所以V4继续优化。 B站视频: Qt Quick-QML…

【办公效率提升】Window10与ubuntu递归列出当前目录及其所有子目录中的文件和文件夹

在Windows操作系统中,没有内置的类似于Ubuntu的"tree"命令的功能。但是,你可以使用以下两种方法来实现相似的功能: 方法一:使用dir命令和递归 你可以使用Windows的内置命令"dir"以及递归参数"/s"来…

前后端交互二、form表单与模板引擎

零、文章目录 前后端交互二、form表单与模板引擎 1、form表单的基本使用 HTML相关知识请参考HTML入门 &#xff08;1&#xff09;表单是什么 表单在网页中主要负责数据采集功能。HTML中的<form>标签&#xff0c;就是用于采集用户输入的信息的&#xff0c;并通过<…

linux PerfCollect收集日志及perfview分析

Perfview&#xff1a;https://github.com/Microsoft/perfview/releases PerfCollect&#xff1a;https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/linux-performance-tracing.md Linux 环境中运行的 ASP.NET Core应用中收集跟踪 PerfCollect&#…

5.6.1 Ext JS之标签页的关闭和批零关闭

Tab Panel 是包含多个标签页的面板, 这是一种很常用的组件, 类似于浏览器的标签页。关于 Ext JS的Tab Panel的基本使用可以参考: [Ext JS3.9] 标签面板(TabPanel )介绍与开发, 本篇介绍如何关闭单个标签页和批量关闭标签页。 Tab 标签页的可关闭 默认状况下,标签页是无…

Bitmiracle Docotic.Pdf 9.015 Crack

Docotic.Pdf 库是正确的法语和强大的编程和界面&#xff0c;可以让用户和开发人员创建专业和高质量的 PDF 文件&#xff0c;甚至可以阅读和修改那些已经存在的。它具有干净而强大的编程接口&#xff0c;能够帮助用户创建质量非常好的 PDF 文档。在这个库的帮助下&#xff0c;用…