Chrome 的 Puppeteer 浏览器连接超时

Wen*_*ger 7 google-chrome node.js docker puppeteer

我试图使用 puppeteer 截取网页的屏幕截图。当应用程序在本地运行时,屏幕截图流程工作正常,但当我尝试对我的应用程序进行 dockerize 时,屏幕截图流程会失败并出现以下错误。

无法启动浏览器,错误消息:尝试连接浏览器时 30000 毫秒后超时!只有修订版 r1069273 的 Chrome 才能保证正常工作。

以下是我在 Dockerfile 中下载并安装 chrome 和 chrome 驱动程序的方法:

RUN wget -O ./google-chrome-x64.zip "https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2F1036826%2Fchrome-linux.zip?generation=1660863194027156&alt=media" \
  && unzip google-chrome-x64.zip -d /usr/local \
  && chmod 0755 /usr/local/chrome-linux/chrome \
  && rm google-chrome-x64.zip
# mnatching chromedriver
RUN wget -O chromedriver-x64.zip "https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2F1036826%2Fchromedriver_linux64.zip?generation=1660863199489297&alt=media" \
    && unzip chromedriver-x64.zip -d /usr/local \
    && chmod 0755 /usr/local/chromedriver_linux64/chromedriver \
    && rm chromedriver-x64.zip

RUN dnf install -y \
    nss \
    alsa-lib atk at-spi2-atk cups-libs gtk3 libdrm\
    libXcomposite libXcursor libXdamage libXext libXi libXrandr libXScrnSaver libXtst \
    mesa-libgbm pango \
    xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-fonts-cyrillic \
    xorg-x11-fonts-misc xorg-x11-fonts-Type1 xorg-x11-utils \
    && update-crypto-policies --set LEGACY
ENV PATH="/usr/local/chrome-linux:${PATH}"
Run Code Online (Sandbox Code Playgroud)

这就是 puppeteer 的实例化方式:

const cluster = await Cluster.launch({
            concurrency: Cluster.CONCURRENCY_CONTEXT,
            maxConcurrency: 3,
            puppeteer,
            puppeteerOptions: {
                executablePath: config.chrome.path,
                headless: true,
                args:[
                    '--no-sandbox',
                    '--disable-dev-shm-usage',
                    '--disable-gpu',
                    '--disable-default-apps',
                    '--disable-extensions',
                    '--disable-background-networking',
                    '--disable-setuid-sandbox',
                ]
            },
            retryLimit: 1,
            retryDelay: 30000,
            timeout: 160000
        });
Run Code Online (Sandbox Code Playgroud)

从错误消息来看,很明显它要求我下载最新版本或 chrome,可能还要求下载 chrome 驱动程序。但由于我对这个领域非常陌生,并且不确定如何在使用https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots时获取最新版本的 chrome 和兼容的chrome 驱动程序/ .... 网址。是的,我们继承了代码,因此对它的了解非常有限,并且维护者不再为我们的组织工作。有人可以帮我们找到以下网址的替换网址,以便我们可以下载 chrome 和 chrome 驱动程序,而 docker 文件中的其他所有内容都可以保持不变吗?

当前 chrome 下载网址: https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2F1036826%2Fchrome-linux.zip ? Generation=1660863194027156&alt=media

1. 替换最新版本下载地址 -> ?

当前 chrome 驱动程序下载网址: https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2F1036826%2Fchromedriver_linux64.zip ? Generation=1660863199489297&alt=media

2. 替换最新版本下载地址 -> ?

节点版本:v14.21.1 puppeteer 和 puppeteer-core 版本:19.5.2 puppeteer-cluster 版本:0.23.0

mbe*_*son -1

在 Docker 中运行 Puppeteer中有一个很好的 Dockerfile 示例。我用它来将网页打印为 pdf,效果很好

正如您在下面的摘录中看到的,第一行下载最新的 google-chrome-stable。另请参阅评论中的注释,它看起来与您的问题相关。

# Dockerfile

# Install latest chrome dev package and fonts to support major charsets (Chinese, Japanese, Arabic, Hebrew, Thai and a few others)
# Note: this installs the necessary libs to make the bundled version of Chromium that Puppeteer
# installs, work.
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 fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \
      --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

...
Run Code Online (Sandbox Code Playgroud)