[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中的浏览器复用,这有助于减少资源消耗,并在某些场景下提高测试效率。

相关推荐
AI科技星10 分钟前
乖乖数学·全域超复数统一场论:五大核心门槛与全套标准定量数据
人工智能·python·算法·金融·全域数学
Liora_Yvonne11 分钟前
为什么你写了3年前端还是搭不好一个项目
前端·架构
snow@li12 分钟前
Java:后端项目会有一个类似前端node_modules的目录吗 / jar包在本地仓库 ~/.m2/repository 中按版本共存
java·开发语言·前端
weedsfly13 分钟前
单例模式在前端中的正确打开方式
前端·javascript·面试
ganbingfenxiang13 分钟前
太原干冰定制
大数据·python
PedroQue9914 分钟前
uni-router新推useUniEventChannel,彻底解决页面通信难题
前端·uni-app
IT_陈寒14 分钟前
Vite冷启动快?我遇到了个奇怪的依赖问题
前端·人工智能·后端
2603_9552797016 分钟前
通过 brew upgrade cmake 升级到最新版本
前端
REDcker23 分钟前
Android 15 16KB 内存页适配详解
android·开发语言·python
Dola_Zou24 分钟前
加密狗使用教程
自动化·软件加密