Google Chrome无头模式远程调试/json接口无响应问题排查
Chrome Headless 模式参数兼容性问题:最新版 Chrome 已将
--headless旧模式标记为废弃,默认推荐使用--headless=new。测试运行器仍使用旧参数启动时,可能导致 Chrome 无法正确初始化调试会话,进而使localhost:9222/json返回空数组。建议替换启动参数为--headless=new重试。调试端口被占用:SemaphoreCI 的 Ubuntu 环境中,9222 端口可能被其他进程占用,导致 Chrome 无法绑定该端口启动调试服务。此时访问指定端口自然无法获取有效会话列表。可在启动 Chrome 前检查端口占用情况,或更换为未被使用的端口。
容器环境权限与资源限制:即便添加了
--no-sandbox,SemaphoreCI 的容器环境仍可能存在权限不足、/dev/shm空间不足等问题。建议添加--disable-dev-shm-usage参数规避共享内存限制,同时确认运行测试的用户拥有足够权限启动 Chrome 进程。Chrome 与 ChromeDriver 版本不匹配:虽然使用了"最新版",但可能存在细微版本差(如 Chrome 为 118.x,Driver 为 117.x),导致调试端口通信逻辑异常。需严格保证 Chrome 和 ChromeDriver 的版本完全一致,在 SemaphoreCI 环境中手动指定匹配版本而非依赖默认的"最新版"。
启动等待时间不足:最新版 Chrome 启动耗时可能增加,测试运行器的等待逻辑未同步调整,导致发送 GET 请求时 Chrome 还未完成调试会话初始化,因此返回空数组。可延长等待时长,或添加轮询逻辑,直到获取非空响应再继续执行。
Chrome 启动失败未被捕获:SemaphoreCI 环境中可能缺少 Chrome 依赖的系统库,导致 Chrome 静默启动失败,但测试运行器未检测到错误仍继续访问调试端口。可在启动后检查 Chrome 进程是否存在,或查看启动日志排查初始化失败原因。
内容的提问来源于stack exchange,提问作者user3493916

