如何将FirefoxDriver挂载到正在运行的Firefox实例上?
挂载已运行Firefox实例的实现方法
你之前的写法不生效是因为debuggerAddress的配置方式是Chrome/Edge的逻辑,Firefox适配Selenium CDP协议的配置方式有区别,按下面步骤调整即可:
1. 确认Firefox启动参数正确
首先确保你启动的Firefox调试服务正常可用,启动参数可以补全为如下形式避免权限限制:firefox --start-debugger-server 61300 --remote-allow-origins=*
启动后可以在浏览器访问http://127.0.0.1:61300/json,如果能返回JSON格式的调试接口信息,说明调试服务启动正常。
2. 修正C#代码逻辑
适用版本:Selenium 4.0及以上(推荐使用最新稳定版)
直接给FirefoxOptions的DebuggerAddress属性赋值即可,不需要手动添加额外Capability:
FirefoxOptions firefoxOptions = new FirefoxOptions(); // 直接指定已启动Firefox的调试地址,不需要走AddAdditionalCapability firefoxOptions.DebuggerAddress = "127.0.0.1:61300"; // 此时初始化驱动不会启动新的Firefox进程,直接挂载到已有实例 var d = new FirefoxDriver(firefoxOptions); d.Navigate().GoToUrl("https://google.com/");
注意事项
- 如果需要按需切换控制,可以将初始化完成的
FirefoxDriver对象缓存复用,不需要每次操作都重新初始化,就算重复初始化也不会生成新的Firefox实例 - 不要给已启动的Firefox开启隐私浏览模式,会限制调试服务的调用权限
- 确保你本地的GeckoDriver版本和已运行的Firefox版本匹配,避免出现协议兼容问题
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

