webentwicklung-frage-antwort-db.com.de

Headless Chrome Node API- und Puppeteer-Installation

Während des Installationsprozesses chrome headless auf einem sauberen Ubuntu 18.04 hatte ich einige Probleme. Die Installationsanleitung für Github reicht für einen sauberen Ubuntu 18.04 nicht aus

Das Folgende sind einige Fehler und Antworten/Lösungen zum Einrichten von Headless chrome eine Alternative zu Phantomjs.

Fehler 1

(node:23835) UnhandledPromiseRejectionWarning: Error: Chromium revision is not downloaded. Run "npm install" or "yarn install"
    at Launcher.launch owlcommand.com /puppeteer/node_modules/puppeteer/lib/Launcher.js:112:15)
    at <anonymous>
(node:23835) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:23835) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Fehler 2

(node:25272) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome!
owlcommand.com /puppeteer/node_modules/puppeteer/.local-chromium/linux-594312/chrome-linux/chrome: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory
6
CodeGuru

Basierend auf https://github.com/GoogleChrome/puppeteer

Sie müssen nur den folgenden Befehl in Ubuntu 18.04 ausführen

npm i puppeteer

Leider reicht das nicht aus.

Sie benötigen die folgenden Abhängigkeiten

Sudo apt-get install gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget

Danach erhalten Sie eine Fehlermeldung, wenn Sie es wie in ihrem Beispiel ausführen

    (node:28469) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome!
[1025/150325.817887:ERROR:zygote_Host_impl_linux.cc(89)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.

Die Lösung dafür ist

const browser = await puppeteer.launch({args: ['--no-sandbox']});

Hinzufügen von --no-Sandbox

Es wird dann entsprechend funktionieren. Der vollständige Quellcode ist unten

    const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({args: ['--no-sandbox']});
  const page = await browser.newPage();
  await page.goto('http://owlcommand.com');
  await page.screenshot({path: 'example.png'});

  await browser.close();
})();

Lösung für [email protected]~install: kann nicht in wd% s% s ausgeführt werden (wd =% s)

npm install --unsafe-perm

Screenshot-Größe

Die Standardeinstellung ist sehr klein. Wenn die zu testende Seite reagiert, können Sie sie mit verschiedenen Ansichtsfenster-Einstellungen testen. Sie können die Abmessungen über die Methode setViewport ändern.

await page.setViewport({
  width: 1600, 
  height: 1000
});
18
CodeGuru

Update 18.11 .: Sie benötigen das Flag --no-sandbox nicht mehr, sondern sollten die Eigenschaft headless: false in dem Objekt verwenden, das Sie an .launch () senden.

const browser = await puppeteer.launch({
    headless: false,
    slowMo: 80,
    args: ['--window-size=1920,1080']
    });

Stellen Sie außerdem sicher, dass Sie alle erforderlichen Debian-Abhängigkeiten installiert haben:

Sudo apt-get install gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
2
Juan

Ich hatte diese Art von Problem nur, als ich versuchte, eine Knotenanwendung auf Docker auszuführen. Aufgrund der gegebenen Antworten funktionierte es schließlich mit dieser Docker-Datei:

FROM node:12
WORKDIR /app
COPY package.json /app/
RUN apt-get update \
    && apt-get install -y \
    gconf-service \ 
    libasound2 \ 
    libatk1.0-0 \ 
    libatk-bridge2.0-0 \ 
    libc6 \ 
    libcairo2 \ 
    libcups2 \ 
    libdbus-1-3 \ 
    libexpat1 \ 
    libfontconfig1 \ 
    libgcc1 \ 
    libgconf-2-4 \ 
    libgdk-pixbuf2.0-0 \ 
    libglib2.0-0 \ 
    libgtk-3-0 \ 
    libnspr4 \ 
    libpango-1.0-0 \ 
    libpangocairo-1.0-0 \ 
    libstdc++6 \ 
    libx11-6 \ 
    libx11-xcb1 \ 
    libxcb1 \ 
    libxcomposite1 \ 
    libxcursor1 \ 
    libxdamage1 \ 
    libxext6 \ 
    libxfixes3 \ 
    libxi6 \ 
    libxrandr2 \ 
    libxrender1 \ 
    libxss1 \ 
    libxtst6 \ 
    ca-certificates \ 
    fonts-liberation \ 
    libappindicator1 \ 
    libnss3 \ 
    lsb-release \ 
    xdg-utils \ 
    wget \ 
    && npm i puppeteer
COPY . /app
CMD [ "node", "app.js" ]

Wie bereits erwähnt, habe ich den Startcode geändert. So hat es funktioniert: const browser = await puppeteer.launch({args: ['--no-sandbox']});

0
Bruno Zani