Chrome 137.0.7151.41更新后,ChromeDriver无法连接已有浏览器实例
我的Google Chrome已更新至版本137.0.7151.41 (Official Build) (64-bit),当前使用的ChromeDriver版本为137.0.7151.40。
更新前,我可通过在Chrome快捷方式中添加参数--remote-debugging-port=9222,再使用以下C#代码连接已有Chrome实例:
ChromeDriverService chromeDriverService = ChromeDriverService.CreateDefaultService(); chromeDriverService.HideCommandPromptWindow = false; chromeDriverService.Start(); ChromeOptions chromeOptions = new ChromeOptions(); chromeOptions.DebuggerAddress = "127.0.0.1:9222"; IWebDriver tempDriver = new ChromeDriver(chromeDriverService, chromeOptions);
但现在调用ChromeDriver构造函数时会挂起直至超时,报错:
$exception {"The HTTP request to the remote WebDriver server for URL http://localhost:62047/session timed out after 60 seconds."} OpenQA.Selenium.WebDriverException
我通常在ChromeDriver与Chrome版本不匹配时遇到此错误,但本次版本差异极小。请问连接已有实例的远程调试是否已被弃用?该问题的成因可能是什么?
远程调试连接已有Chrome实例的功能并未被弃用,以下是可能的成因及解决方向:
微小版本差异的兼容性问题:即使Chrome和ChromeDriver仅差最后一位版本号,新版本Chrome可能对远程调试协议做了细微调整,导致Driver无法正常解析通信内容。建议升级ChromeDriver至与Chrome完全匹配的版本(
137.0.7151.41)。远程调试权限限制:Chrome 111及以上版本默认限制了远程调试的跨域请求,需要在Chrome启动参数中添加
--remote-allow-origins=*,否则ChromeDriver的请求会被拦截,导致超时。不必要的ChromeDriverService启动:连接已有Chrome实例时,无需手动启动
ChromeDriverService,直接使用带DebuggerAddress的ChromeOptions构造ChromeDriver即可。手动启动服务可能引发端口冲突或额外的通信问题,简化代码如下:ChromeOptions chromeOptions = new ChromeOptions(); chromeOptions.DebuggerAddress = "127.0.0.1:9222"; IWebDriver tempDriver = new ChromeDriver(chromeOptions);端口占用或防火墙拦截:检查
9222端口是否被其他程序占用,同时确认ChromeDriver启动的随机端口(如报错中的62047)未被系统防火墙拦截。Chrome启动参数冲突:检查Chrome快捷方式中是否存在其他冲突参数,比如
--no-sandbox、--user-data-dir等,可能干扰远程调试端口的正常监听。
内容的提问来源于stack exchange,提问作者John

