07 selenium操作已经打开的浏览器

999 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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安装的目录。

再次启动脚本,可以看到没有打开新的浏览器,而是直接在打开的浏览器中访问网页,如下: