[待验收] Chrome 调试端口被其他实例占用时顺位尝试 #38

Open
opened 2026-10-07 16:33:53 +08:00 by ila · 1 comment
Owner

来源与目标

用户于 2026-10-07 提出:打开 Chrome 时若调试端口被占用,顺位尝试下一个端口,避免仅因其他浏览器占用而弹窗失败。

现状与根因

scanFreePort 已可跳过占用端口;但 EnsureBrowser 随后的循环只要发现端口范围内另一个 CDP 浏览器,就无条件报错,未区分它是否使用本项目专属 Profile。

范围与方案

  • 启动前检查正在运行的 Chrome 是否使用配置的专属 Profile;存在且无法由有效状态文件复用时继续阻止第二实例。
  • 其他进程占用端口时从配置范围内顺位选择首个可用端口;全部占用时保留明确错误。
  • 保留现有浏览器状态归属校验、退出关闭边界和淘宝登录流程;不修改风控或采集逻辑。

风险与回退

进程归属无法确认时停止启动,避免同一 Profile 双开;端口竞争或不可用时报告错误,不连接其他浏览器。可回退本次提交。

验收

  1. 首端口由其他程序或其他 Profile Chrome 占用时,使用后续空闲端口。
  2. 同一 Profile 已有实例而状态丢失或失效时阻止重复启动。
  3. 范围全部占用与进程检查失败有明确错误。
  4. 相关 Go 测试通过;浏览器行为文档更新到 Wiki 并同步镜像。

前置依赖:无。

## 来源与目标 用户于 2026-10-07 提出:打开 Chrome 时若调试端口被占用,顺位尝试下一个端口,避免仅因其他浏览器占用而弹窗失败。 ## 现状与根因 `scanFreePort` 已可跳过占用端口;但 `EnsureBrowser` 随后的循环只要发现端口范围内另一个 CDP 浏览器,就无条件报错,未区分它是否使用本项目专属 Profile。 ## 范围与方案 - 启动前检查正在运行的 Chrome 是否使用配置的专属 Profile;存在且无法由有效状态文件复用时继续阻止第二实例。 - 其他进程占用端口时从配置范围内顺位选择首个可用端口;全部占用时保留明确错误。 - 保留现有浏览器状态归属校验、退出关闭边界和淘宝登录流程;不修改风控或采集逻辑。 ## 风险与回退 进程归属无法确认时停止启动,避免同一 Profile 双开;端口竞争或不可用时报告错误,不连接其他浏览器。可回退本次提交。 ## 验收 1. 首端口由其他程序或其他 Profile Chrome 占用时,使用后续空闲端口。 2. 同一 Profile 已有实例而状态丢失或失效时阻止重复启动。 3. 范围全部占用与进程检查失败有明确错误。 4. 相关 Go 测试通过;浏览器行为文档更新到 Wiki 并同步镜像。 前置依赖:无。
Author
Owner

实施完成,待用户验收。

  • 根因:scanFreePort 后的旧校验把范围内任意 CDP 浏览器都视为专属 Profile 冲突。
  • 改动:先读取 Windows Chrome 进程命令行核对专属 --user-data-dir;仅同一 Profile 且运行状态不可复用时拒绝双开。其他程序/其他 Profile 占用端口时继续使用范围内首个空闲端口;进程归属无法读取或范围全占满时明确失败。
  • 验证:go test ./... -count=1 全通过;python -m unittest discover -s tests -q 55 项通过;Wails 构建通过;check --strict 与 sync --check 通过;当前 Windows 上 62 个 Chrome 进程的命令行均可读取。未在真实 Chrome 启动过程中人为制造端口竞争,待使用者从界面验收。
  • 文档:Wiki Troubleshooting 已回读 revision bb5e884ffc4c08b7b1872b251239268358a5f4ff,核心镜像 docs/06-troubleshooting.md 已同步并校验。
  • Git:badb0dd 已推送 main。本地既有 go.mod、go.sum 改动和未跟踪文件未纳入提交。
实施完成,待用户验收。 - 根因:`scanFreePort` 后的旧校验把范围内任意 CDP 浏览器都视为专属 Profile 冲突。 - 改动:先读取 Windows Chrome 进程命令行核对专属 `--user-data-dir`;仅同一 Profile 且运行状态不可复用时拒绝双开。其他程序/其他 Profile 占用端口时继续使用范围内首个空闲端口;进程归属无法读取或范围全占满时明确失败。 - 验证:`go test ./... -count=1` 全通过;`python -m unittest discover -s tests -q` 55 项通过;Wails 构建通过;`check --strict` 与 `sync --check` 通过;当前 Windows 上 62 个 Chrome 进程的命令行均可读取。未在真实 Chrome 启动过程中人为制造端口竞争,待使用者从界面验收。 - 文档:Wiki `Troubleshooting` 已回读 revision `bb5e884ffc4c08b7b1872b251239268358a5f4ff`,核心镜像 `docs/06-troubleshooting.md` 已同步并校验。 - Git:`badb0dd` 已推送 `main`。本地既有 `go.mod`、`go.sum` 改动和未跟踪文件未纳入提交。
ila changed title from [进行中] Chrome 调试端口被其他实例占用时顺位尝试 to [待验收] Chrome 调试端口被其他实例占用时顺位尝试 2026-10-07 16:37:45 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmsp#38