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
相关产品推荐
相关产品推荐

