Nodejs Playwright 打开的浏览器,调用 browser.close(); 关闭窗口可以触发 browser.on 的监听。但手动的点击 X 关闭浏览器,后台监听不了,大家有什么方法吗

发布于 1周前 作者 gougou168 来自 nodejs/Nestjs

playwright 打开的浏览器,调用 browser.close();关闭窗口可以触发 browser.on 的监听。

但手动的点击 X 关闭浏览器,后台监听不了,大家有什么方法吗
Nodejs Playwright 打开的浏览器,调用 browser.close(); 关闭窗口可以触发 browser.on 的监听。但手动的点击 X 关闭浏览器,后台监听不了,大家有什么方法吗

6 回复

所以为啥要手动关闭,这玩意不是这么用的吧


handless 模式,再开一个浏览器进入 chrome://inspect 连接

找个办法判断 cdp 是否还能连上去

所以为啥要手动关闭,这玩意不是这么用的吧 +1

在 Node.js 中使用 Playwright 进行自动化测试时,确实存在一个问题:通过 browser.close() 可以触发相关的事件监听,但手动点击浏览器窗口的关闭按钮(X)则不会触发这些监听事件。这是因为手动关闭窗口通常会导致进程被强制终止,而不会执行任何 JavaScript 清理逻辑。

为了解决这个问题,你可以尝试以下几种方法:

  1. 使用全局监听器: 虽然 Playwright 本身不提供直接的解决方案,但你可以尝试使用 Node.js 的全局进程监听器来捕捉进程退出事件。不过,这种方法通常只能用于执行一些最后的清理工作,而无法阻止窗口关闭。

  2. 修改浏览器配置: 某些浏览器配置或启动参数可能允许你捕获窗口关闭事件,但这通常取决于具体的浏览器实现,且 Playwright 可能不支持所有配置。

  3. 使用 Playwright 的子进程管理: 你可以尝试通过 Playwright 启动一个子进程来运行浏览器,并监听该子进程的退出事件。虽然这不会直接捕获浏览器的关闭事件,但你可以执行一些后续操作。

以下是一个简单的示例,展示如何使用 Node.js 的 process.on('exit', callback) 来执行一些清理工作:

process.on('exit', (code) => {
  console.log(`About to exit with code: ${code}`);
  // 在这里执行清理工作
});

// 你的 Playwright 脚本
// ...

请注意,这种方法并不能阻止窗口关闭,只能让你在进程退出时执行一些操作。

回到顶部