写自动化脚本,最难受的就是调试了。每次运行都打开新浏览器,尤其是调试元素定位、页面状态时,真想直接连接我已经手动打开的那个浏览器窗口,省得重复登陆、加载,能直接“插手”它。
其实,Selenium 是支持这种玩法的,只要开启了 Chrome 的远程调试端口,我们就能“attach”到本地浏览器,边操作边调试。今天就把我摸索的思路整理一下,给自己补个笔记,也给你参考。
一、为什么要连接本地浏览器?
- 手动登录状态直接复用,省去自动登录折腾
- 页面状态更稳定,特别是动态加载的内容,不用反复刷新
- 方便断点调试,操作更直观
- 适合调试复杂页面,尤其是和浏览器扩展交互时
二、如何启动带远程调试端口的 Chrome
我们需要以特殊参数启动 Chrome:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222 \
--user-data-dir="/tmp/chrome-debug"
这里有两点:
--remote-debugging-port=9222
是关键,告诉 Chrome 开启远程调试端口--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 连接对应端口即可。