diff --git a/scripts/browser-discovery.mjs b/scripts/browser-discovery.mjs index ac6f160..83bcb5b 100644 --- a/scripts/browser-discovery.mjs +++ b/scripts/browser-discovery.mjs @@ -130,9 +130,20 @@ export async function selectBrowser(override = null) { // 兜底:扫描常用固定端口 // 适用场景:用户手动 --remote-debugging-port=9222 启动浏览器, // 此时 DevToolsActivePort 可能不在默认 user-data-dir。 +// 返回 { port, wsPath } 或 null(需 fetch wsPath 因为 Chrome 要求完整 UUID 路径) export async function findFallbackPort() { for (const port of [9222, 9229, 9333]) { - if (await checkPort(port)) return port; + if (!(await checkPort(port))) continue; + try { + const resp = await fetch(`http://127.0.0.1:${port}/json/version`, { signal: AbortSignal.timeout(3000) }); + const data = await resp.json(); + const wsUrl = data.webSocketDebuggerUrl; + if (wsUrl) { + const u = new URL(wsUrl); + return { port, wsPath: u.pathname }; + } + } catch {} + return { port, wsPath: null }; } return null; } diff --git a/scripts/cdp-proxy.mjs b/scripts/cdp-proxy.mjs index 9457405..8dd363a 100755 --- a/scripts/cdp-proxy.mjs +++ b/scripts/cdp-proxy.mjs @@ -90,11 +90,11 @@ async function discoverChromePort() { ); } // 仅在「从未成功连接 + 无偏好/override」时允许固定端口兜底(手动 --remote-debugging-port 启动场景) - const fallbackPort = await findFallbackPort(); - if (fallbackPort !== null) { + const fallback = await findFallbackPort(); + if (fallback !== null) { connectedBrowser = { id: 'unknown', label: '未知(通过手动调试端口连接)', source: 'fallback' }; - console.log(`[CDP Proxy] 通过手动调试端口连接: ${fallbackPort}`); - return { port: fallbackPort, wsPath: null }; + console.log(`[CDP Proxy] 通过手动调试端口连接: ${fallback.port}${fallback.wsPath ? ',带 wsPath' : ''}`); + return { port: fallback.port, wsPath: fallback.wsPath }; } return null; } diff --git a/scripts/check-deps.mjs b/scripts/check-deps.mjs index 87c49ba..3469847 100644 --- a/scripts/check-deps.mjs +++ b/scripts/check-deps.mjs @@ -165,9 +165,9 @@ async function resolveAndReport(override) { case 'empty': { // 末路兜底:尝试常见固定端口(用户手动 --remote-debugging-port=9222 启动的场景) - const fallbackPort = await findFallbackPort(); - if (fallbackPort) { - console.log(`browser: ok (port ${fallbackPort}) [通过手动调试端口连接]`); + const fallback = await findFallbackPort(); + if (fallback) { + console.log(`browser: ok (port ${fallback.port}) [通过手动调试端口连接]`); return { proceed: true }; } console.log('browser: 未连接 — 没有任何浏览器打开远程调试开关');