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

GCP App Engine部署whatsapp-web.js应用无法生成二维码问题

解决GCP App Engine部署whatsapp-web.js应用时的ProtocolError: Target closed问题

问题概述

基于Node.js + whatsapp-web.js的应用在Cloud Shell Editor中通过Web Preview运行正常,但部署到GCP App Engine标准环境后,访问URL无法生成二维码,日志抛出ProtocolError: Protocol error (Runtime.callFunctionOn): Target closed错误。

错误日志

/workspace/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:230
error: new Errors_js_1.ProtocolError(),
ProtocolError: Protocol error (Runtime.callFunctionOn): Target closed.

环境与配置

  • Node.js版本:18.12.1
  • App Engine配置(app.yaml):
runtime: nodejs18
env: standard
instance_class: F4_1G
  • 核心代码片段:
global.client = new Client({
  authStrategy: new LocalAuth({clientId: "my-client", dataPath: "/tmp"}),
  puppeteer: {
      headless: true,
      ignoreHTTPSErrors: true,
      args: ['--no-sandbox','--disable-setuid-sandbox']
    },
});

解决方案

1. 优化Puppeteer启动参数

App Engine标准环境的容器资源和沙箱限制会导致默认Puppeteer配置启动失败,需添加适配环境的参数:

global.client = new Client({
  authStrategy: new LocalAuth({clientId: "my-client", dataPath: "/tmp"}),
  puppeteer: {
    headless: 'new', // 使用新版无头模式,兼容性更好
    ignoreHTTPSErrors: true,
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--disable-dev-shm-usage', // 解决/dev/shm空间不足问题
      '--disable-accelerated-2d-canvas',
      '--no-first-run',
      '--no-zygote', // 禁用zygote进程,避免沙箱冲突
      '--single-process', // 单进程模式,减少资源占用
      '--disable-gpu', // 禁用GPU加速,适配无图形环境
      '--window-size=1920,1080' // 设置窗口大小,避免渲染异常
    ]
  },
});

2. 配置App Engine环境变量与启动超时

修改app.yaml,添加Puppeteer可执行路径和延长启动超时时间:

runtime: nodejs18
env: standard
instance_class: F4_1G
env_variables:
  PUPPETEER_EXECUTABLE_PATH: '/usr/bin/chromium-browser' # 指定系统Chromium路径
readiness_check:
  app_start_timeout_sec: 120 # 延长启动超时,给Puppeteer足够初始化时间

3. 确保Puppeteer正确安装

在package.json中添加postinstall脚本,确保部署时下载适配App Engine环境的Chromium:

"scripts": {
  "start": "node index.js",
  "postinstall": "node node_modules/puppeteer/install.js"
}

4. 验证Auth策略临时存储

LocalAuth的dataPath设置为/tmp是合理的,但App Engine实例重启后该目录会清空,需重新扫码授权。若需要持久化授权数据,可结合Cloud Storage实现(非当前错误必要项)。

验证部署

修改完成后重新部署:

gcloud app deploy

部署后通过gcloud app logs tail -s default监控日志,确认无ProtocolError且输出qr日志,即可访问对应URL获取二维码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:20:40