Playwright无法连接已启动Chrome实例的问题求助
一、解决CDP连接超时问题
如果尝试通过ConnectOverCDPAsync连接已启动的Chrome一直超时,按以下步骤排查:
彻底清理Chrome进程后重启
关闭所有Chrome进程(包括后台隐藏的chrome.exe),再用命令行重新启动:"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222残留进程可能导致端口占用或会话冲突,引发超时。
动态获取WebSocket调试地址
每次重启Chrome,webSocketDebuggerUrl都会生成新值,硬编码必然导致连接失败。建议通过接口动态获取:// 先请求接口获取有效WebSocket地址 using var client = new HttpClient(); var jsonResp = await client.GetStringAsync("http://127.0.0.1:9222/json/version"); var versionData = JsonSerializer.Deserialize<dynamic>(jsonResp); var validWsUrl = versionData.webSocketDebuggerUrl.ToString(); // 使用动态获取的地址连接 _browser = await _playwright.Chromium.ConnectOverCDPAsync(validWsUrl);检查版本兼容性
Playwright与Chrome版本必须匹配(比如Chrome 122对应Playwright 1.41.x),版本不兼容会导致CDP协议交互失败。执行dotnet tool update microsoft.playwright.cli更新Playwright到对应版本。排除拦截因素
部分杀毒软件或防火墙会拦截本地WebSocket连接,可暂时关闭相关软件测试是否恢复正常。
二、复用自定义Chrome配置文件(推荐方案)
如果CDP连接始终有问题,直接复用已登录的Chrome用户配置文件是更稳定的方案:
复制Chrome用户数据目录
Chrome默认用户数据路径为:C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data
注意:不要直接使用原目录(同一目录无法被多个Chrome实例同时加载),复制一份到其他位置,比如C:\ChromeSavedData。在Playwright中指定配置目录
修改LaunchAsync配置,添加--user-data-dir参数指向复制后的目录:_browser = await _playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { ExecutablePath = @"C:\Program Files\Google\Chrome\Application\chrome.exe", Args = new[] { "--user-data-dir=C:\\ChromeSavedData" } });启动后的Chrome会自动加载复制目录中的已登录状态,无需重复登录。
注意事项
- 复制目录前必须完全关闭所有Chrome进程,避免文件损坏。
- 后续在Playwright启动的Chrome中更新登录状态,配置文件会自动保存。
内容的提问来源于stack exchange,提问作者Zoop

