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

相关推荐
进击的雷神2 小时前
Cursor 浏览器自动化:Playwright MCP Server 使用指南
运维·自动化·cursor·playwright mcp
之歆2 小时前
Linux 系统安装、故障排除、sudo、加密、DNS 与 Web 服务整理
linux·运维·前端
OpenTiny社区2 小时前
TinyEngine 2.10 版本发布:零代码 CRUD、云端协作,开发效率再升级!
前端·vue.js·低代码
-小麦子-2 小时前
Python 变量组包、解包及星号扩展机制详解
开发语言·python
哟哟-2 小时前
Nginx配置:静态文件访问时动态添加时间戳
运维·前端·javascript·nginx
Jia ming2 小时前
编程思维VS法律思维:Python教学双轨制
python·教学
码云数智-园园2 小时前
自助建站哪个好?三款主流自助建站对比评测
前端
肆忆_2 小时前
C++ 汇编层面与语法语义层面总结:this指针 模板 块级作用域 引用
前端
用户4099322502122 小时前
Vue中默认插槽、具名插槽、作用域插槽如何区分与使用?
前端·vue.js·github