写自动化脚本,最难受的就是调试了。每次运行都打开新浏览器,尤其是调试元素定位、页面状态时,真想直接连接我已经手动打开的那个浏览器窗口,省得重复登陆、加载,能直接“插手”它。

其实,Selenium 是支持这种玩法的,只要开启了 Chrome 的远程调试端口,我们就能“attach”到本地浏览器,边操作边调试。今天就把我摸索的思路整理一下,给自己补个笔记,也给你参考。


一、为什么要连接本地浏览器?

  • 手动登录状态直接复用,省去自动登录折腾
  • 页面状态更稳定,特别是动态加载的内容,不用反复刷新
  • 方便断点调试,操作更直观
  • 适合调试复杂页面,尤其是和浏览器扩展交互时

二、如何启动带远程调试端口的 Chrome

我们需要以特殊参数启动 Chrome:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222 \
--user-data-dir="/tmp/chrome-debug"

这里有两点:

  1. --remote-debugging-port=9222 是关键,告诉 Chrome 开启远程调试端口
  2. --user-data-dir 用来指定用户数据目录,避免和你日常 Chrome 冲突

打开后,这个 Chrome 就“监听”在9222端口,Selenium 可以连上。


三、Python Selenium 如何连接?

核心代码很简单:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.debugger_address = "127.0.0.1:9222"  # 连接远程调试端口

driver = webdriver.Chrome(options=chrome_options)

这句 debugger_address 是魔法,只要本地有对应端口监听,Selenium 就会附加到这个已经打开的浏览器。


四、用这个方式调试的心得

  • 不要关闭你用来调试的浏览器,否则连接断了
  • 操作时最好手动提前把页面弄到你想测试的状态
  • 注意不要让 Selenium 自动关闭浏览器,调试完记得手动关
  • 因为是“附加”操作,部分 Selenium 新开标签页、新窗口操作可能会不如预期,要小心

五、简单示例:打开百度,搜索“自动化调试”

假设你已经启动带远程调试的 Chrome,Python 代码如下:

from selenium.webdriver.common.by import By

driver.get("https://www.baidu.com")
search_box = driver.find_element(By.ID, "kw")
search_box.send_keys("自动化调试")
search_box.submit()

你就可以实时观察你操作的浏览器窗口,输入内容,点按钮,调试会方便很多。


六、总结

连接本地已打开浏览器真的是我调试 Selenium 脚本的“秘密武器”,尤其调试复杂页面,元素定位反复失败时,它帮我省了大量时间。

推荐你也试试,只要记得启动 Chrome 时加上远程调试参数,再用 Selenium 连接对应端口即可。


添加微信