You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows休眠后Puppeteer浏览器连接丢失问题求助

Puppeteer休眠唤醒后重新连接Chrome的解决方案

电脑休眠唤醒后,Puppeteer和Chrome实例之间的WebSocket连接会被系统休眠中断,导致browser.isConnected()返回false——虽然浏览器窗口还能正常手动操作,但Puppeteer已经失去了控制通道。以下是不用重新登录就能恢复控制的方法:

核心方案:启动时开启调试端口,后续通过端口重连

1. 修改启动代码,开启远程调试端口

启动Chrome时添加--remote-debugging-port参数,固定一个未被占用的端口(比如9222),让Chrome保持可被远程连接的状态:

browser = await puppeteer.launch({ 
  headless: false, 
  ignoreHTTPSErrors: true, 
  args: [
    `--window-size=500,750`,
    `--remote-debugging-port=9222` // 开启调试端口
  ], 
  defaultViewport: null 
}); 
page = await browser.newPage();

2. 检测连接状态并手动重连

当发现browser.isConnected()返回false时,断开旧连接,通过调试端口重新绑定到现有Chrome窗口:

if (!await browser.isConnected()) {
  // 仅断开Puppeteer与Chrome的连接,不会关闭浏览器窗口
  await browser.disconnect();
  // 通过调试端口重新连接
  browser = await puppeteer.connect({
    browserURL: 'http://localhost:9222',
    defaultViewport: null
  });
  // 获取当前活跃的页面(根据实际情况选择,比如取第一个页面)
  const pages = await browser.pages();
  page = pages[0];
}

3. 自动监听断开事件触发重连

可以给browser绑定disconnected事件,一旦连接中断就自动尝试重连:

browser.on('disconnected', async () => {
  console.log('连接已断开,尝试重新连接');
  try {
    await browser.disconnect();
    browser = await puppeteer.connect({
      browserURL: 'http://localhost:9222',
      defaultViewport: null
    });
    page = (await browser.pages())[0];
    console.log('重新连接成功');
  } catch (err) {
    console.error('重连失败:', err);
  }
});

额外注意事项

  • 选择调试端口时,要确保该端口未被其他程序占用;如果需要动态端口,可以在启动时获取并保存端口号,后续用对应端口连接。
  • 部分防火墙或安全软件可能在休眠后重置网络规则,需提前配置允许该调试端口的通信。
  • browser.disconnect()和browser.close()的区别:前者仅切断Puppeteer与Chrome的控制连接,不会关闭浏览器窗口;后者会直接关闭Chrome进程。

内容的提问来源于stack exchange,提问作者drb01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:31:30