news 2026/7/8 18:13:49

一次性搞定多任务!Python自动化复用浏览器技巧大揭秘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一次性搞定多任务!Python自动化复用浏览器技巧大揭秘

复用浏览器

简介

在 Web 自动化测试中,浏览器复用是指将已打开的浏览器实例用于多个测试用例。这可以显著提高测试效率和性能,并减少资源消耗。浏览器复用通常与浏览器驱动程序(如 Selenium WebDriver)一起使用,以便更好地管理浏览器窗口和标签页。常见的浏览器复用场景如下:

  • 多个测试用例复用同一个浏览器实例:在自动化测试中,你可以创建一个浏览器实例,然后在多个测试用例之间共享它,而不必为每个测试用例启动和关闭浏览器。这可以加速测试执行并减少资源消耗。

  • 多个标签页或窗口:浏览器复用还可以用于在同一浏览器实例中打开多个标签页或窗口,并在它们之间切换。这在某些测试场景下非常有用,例如在一个标签页中执行登录,然后在另一个标签页中执行其他操作。

复用浏览器应用场景
  1. 在运行 Selenium 自动化时,通常要求在成功扫码登陆后才能执行后续操作。为了提高效率,可以在脚本运行之前先进行扫码登录,并在运行脚本时复用已经打开的浏览器窗口。

  2. 当调试了某个步骤很多的测试用例,前面的 N-1 步骤已经成功执行,只需调试第 N 步。为了避免重新运行整个脚本造成耗时过多,这时我们可以直接复用浏览器只操作第 N 步。

  3. 复用浏览器的特点在于, webdriver 在启动时不会创建新的浏览器窗口,而是重用已打开的浏览器的当前页面,使得可以对元素进行进一步的操作。这种方式可以显著提高测试脚本的执行效率。

浏览器复用的优点
  • 节省时间:启动和关闭浏览器通常需要一定的时间。通过复用浏览器,可以减少这些开销,从而更快地执行测试用例。

  • 资源优化:每个浏览器实例都需要占用计算机资源,包括内存。通过复用浏览器,可以降低资源消耗。

  • 更高效的内存管理:浏览器复用有助于更有效地管理浏览器的内存,因为每次启动浏览器时,它会加载并初始化一个新的浏览器进程。

使用和未使用复用浏览器流程如图所示:

复用已有浏览器-配置步骤
  1. 需要退出当前所有的谷歌浏览器(特别注意)。

  2. 输入启动命令,通过命令启动谷歌浏览器

    • 找到 chrome 的启动路径

    • 配置环境变量

    • windows:chrome --remote-debugging-port=9222

    • mac:Google\ Chrome --remote-debugging-port=9222

  3. 验证是否启动成功

    • 访问浏览器查看浏览器是否启动 http://localhost:9222/

windows 关闭谷歌浏览器进程

windows 环境变量配置

1. 获取启动路径

2. 配置环境变量

3. 重启命令行

4. 验证

访问 http://localhost:9222/

Mac 环境变量配置
  1. 获取启动路径(注意:使用 tab 键,不要手动输入)。

  2. 将启动路径配置到环境变量中。

  1. # 举例,不要生搬硬套

  2. exportPATH=$PATH:/Applications/Google\ Chrome.app/Contents/MacOS

复用已有浏览器-代码设置

Python 实现

  1. from selenium import webdriver

  2. from selenium.webdriver.chrome.options import Options

  3. from selenium.webdriver.common.by import By

  4. option = Options()

  5. option.debugger_address = "localhost:9222"

  6. driver = webdriver.Chrome(options=option)

  7. driver.implicitly_wait(10)

  8. driver.get("https://work.weixin.qq.com/wework_admin/frame")

  9. # 人工扫码

  10. time.sleep(10)

  11. # 点击通讯录

  12. driver.find_element(By.XPATH,'//*[text()="通讯录"]').click()

Java 实现​​​​​​​

  1. importorg.junit.jupiter.api.AfterAll;

  2. importorg.junit.jupiter.api.BeforeAll;

  3. importorg.junit.jupiter.api.Test;

  4. importorg.openqa.selenium.By;

  5. importorg.openqa.selenium.WebDriver;

  6. importorg.openqa.selenium.WebElement;

  7. importorg.openqa.selenium.chrome.ChromeDriver;

  8. importorg.openqa.selenium.chrome.ChromeOptions;

  9. publicclass web_useAgainTest{

  10. staticWebDriverdriver;

  11. @BeforeAll

  12. staticvoidsetup(){

  13. ChromeOptionschromeOptions=newChromeOptions();

  14. chromeOptions.setExperimentalOption("debuggerAddress","localhost:9222");

  15. driver=newChromeDriver(chromeOptions);

  16. }

  17. @AfterAll

  18. staticvoidteardown(){

  19. driver.quit();

  20. }

  21. @Test

  22. voidremote2()throwsInterruptedException{

  23. driver.get("https://work.weixin.qq.com/wework_admin/frame");

  24. //人工扫码

  25. Thread.sleep(30000);

  26. WebElementelement=driver.findElement(By.xpath("//*[@class ='index_service_cnt_itemWrap']"));

  27. element.click();

  28. Thread.sleep(1000);

  29. }

  30. }

使用复用浏览器,只需要扫码登陆一次,只要浏览器窗口不关闭,就可以一直使用,从而避免每次打开都需要扫码。

调试代码

Python 实现​​​​​​​

  1. from selenium import webdriver

  2. from selenium.webdriver.chrome.options import Options

  3. from selenium.webdriver.common.by import By

  4. option = Options()

  5. option.debugger_address = "localhost:9222"

  6. driver = webdriver.Chrome(options=option)

  7. driver.implicitly_wait(10)

  8. # driver.get("https://work.weixin.qq.com/wework_admin/frame")

  9. # 人工扫码

  10. # time.sleep(10)

  11. # driver.find_element(By.XPATH,'//*[text()="通讯录"]').click()

  12. # 点击添加成员

  13. driver.find_elements(By.XPATH,'//*[text()="添加成员"]')[1].click()

Java 实现​​​​​​​

  1. importorg.junit.jupiter.api.AfterAll;

  2. importorg.junit.jupiter.api.BeforeAll;

  3. importorg.junit.jupiter.api.Test;

  4. importorg.openqa.selenium.By;

  5. importorg.openqa.selenium.WebDriver;

  6. importorg.openqa.selenium.WebElement;

  7. importorg.openqa.selenium.chrome.ChromeDriver;

  8. importorg.openqa.selenium.chrome.ChromeOptions;

  9. staticWebDriverdriver;

  10. @BeforeAll

  11. staticvoidsetup(){

  12. ChromeOptionschromeOptions=newChromeOptions();

  13. chromeOptions.setExperimentalOption("debuggerAddress","localhost:9222");

  14. }

  15. @AfterAll

  16. staticvoidteardown(){

  17. driver.quit();

  18. }

  19. @Test

  20. voidremote2()throwsInterruptedException{

  21. driver=newChromeDriver(chromeOptions);

  22. WebElementelement=driver.findElement(By.xpath("//*[text()='添加成员'][1]"));

  23. element.click();

  24. Thread.sleep(1000);

  25. }

如果需要在通讯录页面继续进行点击添加成员的操作,可以将打开界面和点击通讯录的操作注释,编写要进行的操作。

总结

复用浏览器是指在启动 selenium 程序时,浏览器不另外打开一个新的页面,而是直接使用现有的浏览器页面,并进行操作。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

​​​​​​​

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 4:00:25

适合新手的电脑版AI编曲软件快速根据哼唱清唱主旋律作伴奏

适合新手的电脑版AI编曲软件——小白桌面AI编曲软件 对于新手而言,涉足音乐编曲领域往往困难重重。没有专业的音乐知识,缺乏操作复杂编曲软件的经验,找专业编曲师费用高昂且时间成本大,这些问题成为了新手进入音乐编曲世界的一道道…

作者头像 李华
网站建设 2026/7/7 19:29:21

ZW3D二次开发_分享一个通过命令按钮查找关联API函数的插件

给大家分享一个ZW3D二次开发的插件,可以快速输出ZW3D界面中的功能按钮对应的API函数,目前已支持超530个ZW3D命令。 插件资源: 下载方法1: 通过网盘分享的文件:ZW3DAPITeller.zip 链接: https://pan.baidu.co…

作者头像 李华
网站建设 2026/7/8 9:14:43

【光照】Unity[光照探针]的作用与工作原理

光照探针的作用光照探针(Light Probes)是Unity中用于解决动态物体间接光照问题的核心技术,主要作用包括:‌为动态物体提供间接光照‌:在静态场景中,动态物体无法直接使用烘焙光照贴图,光照探针通过存储空间中的光照信息…

作者头像 李华
网站建设 2026/7/7 21:35:58

你有没有想过,像 ChatGPT 这样聪明的 AI,它是怎么“出生”的?

很多人以为 AI 是工程师一行一行代码写出来的,就像写个计算器程序一样。其实不是。现代 AI 更像是一个被“养大”的孩子。而在它能够和你谈笑风生之前,它必须经历一个漫长、枯燥且极其昂贵的阶段——预训练(Pre - training)。 如…

作者头像 李华
网站建设 2026/7/6 11:50:53

基于单片机的数字电压表设计

2 系统原理及基本框图 如图2.1所示,模拟电压经过档位切换到不同的分压电路衰减后,经隔离干扰送到A/D转换器进行A/D转换,然后送到单片机中进行数据处理。处理后的数据送到LCD中显示,同时通过串行通讯与上位机通信。图2.1系统基本方…

作者头像 李华
网站建设 2026/7/7 6:06:12

强化学习系统性学习笔记(二):策略优化的理论基础与算法实现

.2 REINFORCE: 最早的策略梯度算法在完成策略梯度定理的推导后,我们获得了梯度的理论形式:然而,这个期望本身仍然无法直接计算。我们面临的根本问题是:轨迹空间是高维甚至连续无限的,无法枚举所有可能的 组合。策略优化的实践核心在于用有限采样近似期望:与环境交互收集 条轨迹…

作者头像 李华