持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
「selenium实战专栏」将记录selenium实战(Python版)过程,以及各类问题的解决方案。
大致规划如下:
- 利用Element UI组件库联系对各种元素的操作
- 利用一个真实网站进行部分页面UI自动化实战
使用版本如下:
- Python 3.10.6
- selenium 4.0.5
前面的章节,所有示例都是通过webdriver打开一个新的浏览器,但是在有些情况下,我们希望能够直接操作已经打开的浏览器,比如:
- 某个页面需要扫码登陆
- 某个页面操作路径非常长,调试页面时,都需要经过很长的前置步骤
- 调试页面时,每次都是重新打开一个浏览器,等待时间长,效率底
- ...
本节来演示如何直接操作已经打开的浏览器。主要就是通过chrome浏览器提供的参数remote-debugging-port,开启远程调试窗口。
开启Chrome浏览器远程调试窗口
不同操作系统操作方式不一样,但是核心思路都一样,即 找到Chrome可执行文件,然后添加启动参数启动。这里仅以Windows和Mac为例。
Windows
-
右键Chrome应用程序,选择【打开文件所在位置】,就可以自动跳转到文件所在位置了。
-
可执行文件右键,选择【发送到-桌面快捷方式】,这样就可以创建一个新的快建方式,重命名为
chrome automator -
桌面快建方式图标右键,选择【属性】,再"目标"字段添加启动参数
--remote-debugging-port=9222 --user-data-dir="新Chrome数据目录地址"
- 最后点击【应用】、【保存】按钮就可以了。以后需要的时候就直接选择
chrome automator快捷方式启动浏览器
Mac
- 在应用程序中,找到浏览器应用复制一个新的,重命名为
Google Chrome V1,然后右键,选择【显示包内容】 - 进入MacOS目录,因为原本的执行文件
Google Chrome是二进制文件无法修改,因此先将它重名为Google Chrome.real,然后创建一个新文件命名为Google Chrome,作为新的入口文件。
- 然后在新的入口文件
Google Chrome中编写下列代码,其中的路径要使用上面步骤中复制的路径进行替换。
#!/bin/bash
cd "/Applications/Google Chrome V1.app/Contents/MacOS"
"/Applications/Google Chrome V1.app/Contents/MacOS/Google Chrome.real" --remote-debugging-port=9222 --user-data-dir="新Chrome数据目录地址"
- 最后通过命令
chmod 775 "Google Chrome"将新的入口文件Google Chrome更改为可执行文件。
- 以后需要的时候就直接选择
Google Chrome V1启动浏览器。
使用--user-data-dir启动参数,可以将自动化和平时使用的浏览器数据隔离开,具体操作方式查看文章Chrome浏览器进行多开操作实现
开启Chrome浏览器远程调试窗口
首先打开上面配置好的浏览器,然后在代码中新增启动webriver启动参数debugggerAddress,然后完成后续的自动化操作,这里是访问了之前练习到的Element UI链接组件。
service = Service(executable_path=MajorChromeDriverManager().install())
options = Options()
options.add_experimental_option('debuggerAddress', '127.0.0.1:9222')
driver = webdriver.Chrome(options=options, service=service)
driver.get('https://element-plus.gitee.io/zh-CN/component/link.html')
MajorChromeDriverManager是上一节《06 DriverManager源码解析+问题解决方案》中的自定义的驱动管理类,感兴趣的可以查看上一节。也可以直接换成本地webdriver安装的目录。
再次启动脚本,可以看到没有打开新的浏览器,而是直接在打开的浏览器中访问网页,如下: