web-dev-qa-db-fra.com

Sans tête Chrome Node API et installation de Puppeteer)

Tout au long du processus d'installation chrome sans tête sur un ubuntu 18.04 propre, j'ai rencontré pas mal de problèmes. Le guide de configuration sur github n'est pas suffisant pour un ubuntu 18.04 propre

Voici quelques erreurs et réponses/solutions à la configuration de headless chrome une alternative aux phantomjs.

Erreur 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.

Erreur 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

Basé sur https://github.com/GoogleChrome/puppeteer

Vous n'avez qu'à exécuter la commande suivante dans Ubuntu 18.04

npm i puppeteer

Malheureusement, cela ne suffit pas.

Vous aurez besoin des dépendances suivantes

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

Après quoi, si vous l'exécutez selon leur exemple, vous recevrez une erreur

    (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.

La solution à cela est

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

Ajout de --no-sandbox

Cela fonctionnera alors en conséquence. Le code source complet de travail est ci-dessous

    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();
})();

Solution à [email protected]~install: ne peut pas s'exécuter dans wd% s% s (wd =% s)

npm install --unsafe-perm

Taille de la capture d'écran

La valeur par défaut est vraiment petite, si la page que vous testez est réactive, vous pouvez la tester avec différents paramètres de fenêtre. Vous pouvez modifier ses dimensions via la méthode setViewport.

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

Mise à jour du 18 novembre: vous n'avez plus besoin de l'indicateur --no-sandbox, vous devez utiliser la propriété headless: false dans l'objet que vous envoyez à .launch ()

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

Assurez-vous également que toutes les dépendances Debian requises sont installées:

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

J'ai eu ce genre de problème uniquement lorsque j'ai essayé d'exécuter une application de nœud sur Docker, donc sur la base des réponses données, je l'ai finalement fait fonctionner avec ce Dockerfile:

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" ]

J'ai également changé le code de lancement comme mentionné, cela a très bien fonctionné de cette façon: const browser = await puppeteer.launch({args: ['--no-sandbox']});

0
Bruno Zani