[Web自动化] Selenium浏览器复用

10.16 Selenium浏览器复用

在使用selenium进行自动化测试中我们有时会遇到这样的情况:

我们需要手动打开浏览器,进入到所需的页面,执行一些手动任务,如输入表单、输入验证码,登陆成功后,然后再开始运行自动化脚本。

这种情况下如何使用selenium来接管先前已打开的浏览器呢?这里给出Google Chrome浏览器的解决方案。我们可以利用Chrome DevTools协议。它允许客户检查和调试Chrome浏览器。

10.16.1 方法一:通过谷歌浏览器的debug模式

1、打开cmd,在命令行中输入命令并运行以便打开一个用于测试的谷歌浏览器。
方式一:通过cmd命令的方式启动测试的谷歌浏览器

cmd 复制代码
chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"

说明:

-remote-debugging-port:指定一个未被其它程序占用的端口。

-user-data-dir:指定创建新Chrome配置文件的目录。它是为了确保在单独的配置文件中启动chrome,不会污染你的默认配置文件。

进入cmd,使用命令:telnet 127.0.0.1 9222,如果能telnet通,则意味着python程序可以接管了

在环境变量中PATH里将chrome的路径添加进去。

方法二:通过Python脚本来打开谷歌浏览器的debug模式

py 复制代码
import os
os.system(r'start chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenium\AutomationProfile"')  # 一定要添加start,否则会一直卡住

方式三:通过修改命令参数启动测试的谷歌浏览器

新建一个chrome.exe的快捷方式,将--remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"作为启动参数添加到快捷方式里去。这样就可以通过双击这个谷歌浏览器快捷方式直接打开并进入到debug模式。

当然,方式三也可以结合到方式二里,即,将start命令后面的部分(带启动参数的谷歌浏览器)改成chrome.lnk即可。

2、此时会打开一个浏览器页面,我们输入百度网址,我们把它当成一个已存在的浏览器。现在,我们需要接管上面的浏览器。新建一个python文件,运行以下代码:

py 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
 
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_driver = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"
driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
print(driver.title)

会发现打印出了 百度一下,你就知道 的网页标题。这样我们就实现了对一个已打开的浏览器的控制。更多需求可以自己在此基础上进行修改。

10.16.2 方法二:使用attach_to方法(Selenium 4+)

Selenium 4 引入了 attach_to 方法,可以用来连接到一个已经运行的浏览器实例:

python 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

service = Service(executable_path='path/to/chromedriver')
chrome_options = Options()
service.start()

# 假设Chrome已经以调试模式启动
driver = webdriver.Chrome(service=service)

# 使用attach_to方法连接到已经打开的浏览器
# 这需要知道Chrome的调试端口和PID
driver.attach_to(port=9222, pid=chrome_pid)  # chrome_pid是Chrome进程的ID

driver.get("http://www.example.com")

注意事项:

  • 浏览器复用需要浏览器支持调试协议,并且正确配置了调试参数。
  • 确保使用的Selenium库版本与浏览器版本兼容。
  • 连接到已打开的浏览器实例可能需要额外的权限或配置。
  • 在使用 attach_to 方法时,需要知道浏览器的调试端口和进程ID。

通过上述方法,你可以实现Selenium中的浏览器复用,这有助于减少资源消耗,并在某些场景下提高测试效率。

相关推荐
liuze4084 分钟前
安装boss-zhipin-mcp(招聘)
开发语言·python
TickDB5 分钟前
Python 接入 A 股盘前集合竞价数据:AkShare 报错到 TickDB 实测的完整解法
python·websocket·行情数据 api
Csvn9 分钟前
模板字面量类型:用类型做字符串的正则
前端
2601_9622982718 分钟前
【自动化测试】基于Selenium + Python的web自动化框架
自动化测试·python·selenium·测试用例·web框架
吴佳浩 Alben21 分钟前
构建企业级 DevOps 排错 Agent:从日志告警到自动化修复 PR
大数据·人工智能·语言模型·架构·自动化·ai编程·devops
2601_9620775321 分钟前
Python 条件表达式
python·语法·列表推导式·条件表达式·pep308
倾颜35 分钟前
AI Chat 长会话性能实践:消息虚拟化、动态高度与流式滚动设计
前端·react.js·node.js
幸运小圣37 分钟前
SSE 与 WebSocket 新手入门:前端实时通信完全指南【JavaScript】
前端·javascript·websocket
艾伦野鸽ggg38 分钟前
25级开学 JS 考核题解
前端·javascript
右耳朵猫AI1 小时前
Python周刊2026W36 | Python 3.15候选版、RISC-V获CPython支持、PEP 843、asyncio修复
python·sqlite·risc-v