From 0fb13558e01c009421dfa17091c95a9a51bb48a3 Mon Sep 17 00:00:00 2001 From: hp0912 <809211365@qq.com> Date: Sat, 30 May 2026 02:26:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=9A=84=E6=B8=85?= =?UTF-8?q?=E7=90=86=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skills/web-page/scripts/web_page.js | 56 +++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/skills/web-page/scripts/web_page.js b/skills/web-page/scripts/web_page.js index e97f835..cc6ae7f 100755 --- a/skills/web-page/scripts/web_page.js +++ b/skills/web-page/scripts/web_page.js @@ -225,6 +225,57 @@ function withTimeout(promise, ms, message) { return Promise.race([promise, timeout]).finally(() => clearTimeout(timer)); } +function waitForProcessExit(child, timeoutMs) { + if (child.exitCode !== null || child.signalCode !== null) { + return Promise.resolve(); + } + return withTimeout( + new Promise((resolve) => child.once("exit", resolve)), + timeoutMs, + "等待 Chromium 退出超时", + ); +} + +async function closeChromium(client, browser) { + try { + await withTimeout(client.send("Browser.close"), 1500, "关闭 Chromium 超时"); + } catch (error) { + if ( + browser.chrome.exitCode === null && + browser.chrome.signalCode === null + ) { + browser.chrome.kill("SIGTERM"); + } + } + + try { + await waitForProcessExit(browser.chrome, 3000); + } catch (error) { + if ( + browser.chrome.exitCode === null && + browser.chrome.signalCode === null + ) { + browser.chrome.kill("SIGKILL"); + } + await waitForProcessExit(browser.chrome, 3000).catch(() => null); + } finally { + client.close(); + } +} + +async function cleanupUserDataDir(userDataDir) { + try { + await fsp.rm(userDataDir, { + recursive: true, + force: true, + maxRetries: 8, + retryDelay: 200, + }); + } catch (error) { + stdout(`清理 Chromium 临时目录失败,已忽略: ${error.message || error}`); + } +} + async function launchChromium(params) { const chromeBin = findChromium(); const userDataDir = await fsp.mkdtemp( @@ -733,9 +784,8 @@ async function run() { stdout(`页面截图已保存: ${screenshot.output}${suffix}`); } } finally { - client.close(); - browser.chrome.kill("SIGKILL"); - await fsp.rm(browser.userDataDir, { recursive: true, force: true }); + await closeChromium(client, browser); + await cleanupUserDataDir(browser.userDataDir); } }