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

Docker容器运行Puppeteer时第二个标签返回chrome-error://chromewebdata/错误

Puppeteer Docker环境chrome-error://chromewebdata/错误解决方案

这个错误本质是Chromium在容器内无法正常加载目标页面,常见于Puppeteer v10+搭配node基础镜像的场景,可按以下步骤排查修复:


1. 补充Chromium系统运行依赖

node:16基础镜像默认没有预装Chromium需要的系统依赖库,Puppeteer 10.4.0自带的Chromium二进制无法正常启动执行页面加载逻辑。
在Dockerfile中提前安装依赖包,参考配置如下:

FROM node:16-slim

# 安装Chromium依赖及稳定版Chrome
RUN apt-get update \
    && apt-get install -y wget gnupg \
    && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
    && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
    && apt-get update \
    && apt-get install -y google-chrome-stable libxss1 \
    && rm -rf /var/lib/apt/lists/*

# 配置Puppeteer跳过自带Chromium下载,使用系统安装的版本
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true

WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .

CMD ["node", "index.js"]

2. 补全Puppeteer启动参数

你当前的启动参数缺少容器运行必需的配置项,需要明确指定Chrome执行路径并补充适配容器环境的参数:

const browser = await puppeteer.launch({
  // 指定系统安装的Chrome路径,和Dockerfile配置对应
  executablePath: '/usr/bin/google-chrome-stable',
  args: [
    '--disable-gpu',
    '--disable-dev-shm-usage',
    '--disable-setuid-sandbox',
    '--no-sandbox',
    '--disable-extensions',
    '--disable-background-networking',
    '--disable-default-apps',
    '--disable-sync',
    '--disable-translate',
    '--hide-scrollbars',
    '--metrics-recording-only',
    '--mute-audio',
    '--no-first-run',
    '--safebrowsing-disable-auto-update'
  ],
  headless: true
});

3. 修正标签页获取时序逻辑

直接通过索引[2]取第三个标签页的逻辑不稳定,容器环境下标签页加载速度比本地慢,即使加定时器也会偶发失败,应该监听targetcreated事件主动捕获新标签页:

const browser = await puppeteer.launch(/* 上述启动配置 */);
const page = await browser.newPage();

// 监听新标签页创建事件
const newPagePromise = new Promise(resolve => {
  browser.on('targetcreated', async target => {
    if(target.type() === 'page') {
      const newPage = await target.page();
      // 可按需添加URL匹配逻辑过滤目标页
      resolve(newPage);
    }
  });
});

// 触发新标签页打开的操作写在这里,比如点击链接等
// await page.click('打开新页的元素选择器')

const secondPage = await newPagePromise;
// 等待页面加载完成再执行后续操作
await secondPage.waitForNavigation({ waitUntil: 'networkidle2' });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:15:02