selenium之浏览器复用

浏览器复用

在进行 Web 自动化测试或爬虫开发时,我们经常需要使用 Selenium 驱动浏览器进行操作。然而,每次执行脚本都启动一个新的浏览器实例,不仅耗费时间,也可能占用大量系统资源。本文将深入探讨 Selenium 中的浏览器复用技术,帮助您告别重复启动,显著提升自动化效率。

为什么复用浏览器

在自动化场景中,频繁地启动和关闭浏览器会带来以下问题:

  • 耗时: 启动一个完整的浏览器实例需要一定的时间,尤其是在配置较为复杂的环境中。
  • 资源消耗: 每个浏览器实例都会占用一定的内存和 CPU 资源,频繁启动和关闭会增加系统负担。
  • 环境初始化: 每次启动新浏览器都需要重新进行 Cookie、Session 等信息的初始化,可能导致测试或爬虫逻辑的复杂化。
  • 调试困难: 在调试过程中,如果每次都重新启动浏览器,难以保持之前的状态进行问题排查。

浏览器复用允许我们在多次执行脚本或在不同脚本之间共享同一个已经打开的浏览器实例,从而有效地解决上述问题。

Selenium 本身并没有直接提供“复用已有浏览器”的功能,但我们可以通过一些技巧进行实现

基于Chrome DevTools Protocol (CDP)的远程调试

Chrome 和 Chromium 内核的浏览器提供了强大的DevTools Protocol,允许我们通过编程方式与浏览器进行交互。我们可以利用 CDP 的远程调试功能,连接到一个已经启动的浏览器实例。

原理:

  1. 首先,我们需要以远程调试模式启动 Chrome 浏览器,并指定一个调试端口。
  2. 然后,我们的 Selenium 脚本通过 CDP 连接到这个正在运行的浏览器实例。
  • 第一步,关闭所有的google浏览器
  • 找到chrome的启动路径;右键属性即可看到目标后那一栏
  • 配置环境变量,把启动路径加入到Path里面
  • 输入启动命令chrome --remote-debugging-port=9222
  • 这个时候,会启动一个浏览器;访问localhost:9222;是否正常访问

代码如下

from selenium import webdriver
# 定义配置的实例对象Options()
from selenium.webdriver.chrome.options import Options
options = Options()
# 修改实例属性为debug模式启动的ip+端口
options.debugger_address = "127.0.0.1:9222"
# 实例化driver时,需将driver源码自带的options参数带上
driver = webdriver.Chrome(options=option)

你可能感兴趣的:(Selenium,selenium,测试工具)