Headless Chromium på Ubuntu & CentOS: Trinn-for-trinn guide


En trinnvis veiledning for installasjon av Headless Chromium på Ubuntu og CentOS

Hva er Headless Chrome?

Headless Chrome fungerer som en nettleser, men uten det grafiske grensesnittet (UI). Den kjører i et miljø uten synlig vindu, noe som er ideelt for automatiserte tester.

Hvilke muligheter åpner Headless Chrome for oss?

En av de mest spennende funksjonene er muligheten til å teste de nyeste nettleserfunksjonene, som ES6-moduler, service workers og streams. Med Headless Chrome kan du bygge og teste apper med oppdatert gjengivelse. I tillegg får du tilgang til funksjoner som nettverksregulering, emulering av enheter og kodedekning.

Med Headless Chrome kan du utføre tester uten å skrive en eneste kodelinje – ganske kult, ikke sant?

Du kan styre testene fra kommandolinjen. Her er noen av de mest brukte flaggene:

      --screenshot # for å ta et skjermbilde
      --print-to-pdf # for å konvertere nettside til PDF
      --dump-dom # for å hente DOM (Document Object Model) data
    

Viktig: Dette er ikke det samme som Chromium-nettleseren.

Installasjon av Chromium på Ubuntu

Trinn 1: Oppdater Ubuntu

Start med å oppdatere pakkene i Ubuntu-systemet.

      [email protected]:~$ sudo apt-get update
      Hit:1 https://download.docker.com/linux/ubuntu bionic InRelease
      Hit:2 http://security.ubuntu.com/ubuntu cosmic-security InRelease
      Hit:3 http://ppa.launchpad.net/ansible/ansible/ubuntu cosmic InRelease
      Hit:5 http://apt.puppetlabs.com bionic InRelease
      Ign:6 http://pkg.jenkins.io/debian-stable binary/ InRelease
      Hit:7 http://us.archive.ubuntu.com/ubuntu cosmic InRelease
      Hit:8 http://ppa.launchpad.net/canonical-chromium-builds/stage/ubuntu cosmic InRelease
      Hit:9 http://pkg.jenkins.io/debian-stable binary/ Release
      Hit:10 http://us.archive.ubuntu.com/ubuntu cosmic-updates InRelease
      Hit:11 http://us.archive.ubuntu.com/ubuntu cosmic-backports InRelease
      Hit:4 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
      Reading package lists... Done
  

Trinn 2: Installer avhengigheter

Installer de nødvendige avhengighetene for installasjonen.

      [email protected]:~$ sudo apt-get install -y libappindicator1 fonts-liberation
      Reading package lists... Done
      Building dependency tree
      Reading state information... Done
      fonts-liberation is already the newest version (1:1.07.4-7).
      fonts-liberation set to manually installed.
      The following package was automatically installed and is no longer required:
      chromium-codecs-ffmpeg-extra
      Use 'sudo apt autoremove' to remove it.
      The following additional packages will be installed:
      libdbusmenu-gtk4 libindicator7
      Suggested packages:
      indicator-application
      The following NEW packages will be installed:
      libappindicator1 libdbusmenu-gtk4 libindicator7
      0 upgraded, 3 newly installed, 0 to remove and 238 not upgraded.
      Need to get 68.2 kB of archives.
      After this operation, 280 kB of additional disk space will be used.
      Get:1 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 libdbusmenu-gtk4 amd64 16.04.1+18.10.20180917-0ubuntu1 [27.1 kB]
      Get:2 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 libindicator7 amd64 16.10.0+18.04.20180321.1-0ubuntu1 [21.7 kB]
      Get:3 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 libappindicator1 amd64 12.10.1+18.04.20180322.1-0ubuntu1 [19.4 kB]
      Fetched 68.2 kB in 1s (61.1 kB/s)
      Selecting previously unselected package libdbusmenu-gtk4:amd64.
      (Reading database ... 318270 files and directories currently installed.)
      Preparing to unpack .../libdbusmenu-gtk4_16.04.1+18.10.20180917-0ubuntu1_amd64.deb ...
      Unpacking libdbusmenu-gtk4:amd64 (16.04.1+18.10.20180917-0ubuntu1) ...
      Selecting previously unselected package libindicator7.
      Preparing to unpack .../libindicator7_16.10.0+18.04.20180321.1-0ubuntu1_amd64.deb ...
      Unpacking libindicator7 (16.10.0+18.04.20180321.1-0ubuntu1) ...
      Selecting previously unselected package libappindicator1.
      Preparing to unpack .../libappindicator1_12.10.1+18.04.20180322.1-0ubuntu1_amd64.deb ...
      Unpacking libappindicator1 (12.10.1+18.04.20180322.1-0ubuntu1) ...
      Setting up libindicator7 (16.10.0+18.04.20180321.1-0ubuntu1) ...
      Setting up libdbusmenu-gtk4:amd64 (16.04.1+18.10.20180917-0ubuntu1) ...
      Processing triggers for libc-bin (2.28-0ubuntu1) ...
      Setting up libappindicator1 (12.10.1+18.04.20180322.1-0ubuntu1) ...
      Processing triggers for libc-bin (2.28-0ubuntu1) ...
      libappindicator1: This library is used to export menu by an application into a panel
      fonts-liberation: This library has similar font metrics as Arial, Times and Courier
  

I noen tilfeller kan det mangle noen avhengigheter. Kjør kommandoen nedenfor for å installere de resterende avhengighetene.

      [email protected]:~$ sudo apt-get install -f
      The following additional packages will be installed:
        at-spi2-core cpp cpp-7 dconf-gsettings-backend dconf-service gcc-7-base glib-networking glib-networking-common
        glib-networking-services gsettings-desktop-schemas libappindicator3-1 libasound2 libasound2-data libatk-bridge2.0-0
        libatspi2.0-0 libauthen-sasl-perl libcairo-gobject2 libcolord2 libdata-dump-perl libdbusmenu-gtk3-4 libdconf1
        libdrm-amdgpu1 libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libencode-locale-perl libepoxy0 libfile-basedir-perl
        libfile-desktopentry-perl libfile-listing-perl libfile-mimeinfo-perl libfont-afm-perl libfontenc1 libgl1
        libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgtk-3-0 libgtk-3-bin libgtk-3-common
        libhtml-form-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libhttp-cookies-perl
        libhttp-daemon-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl libice6 libindicator3-7
        libio-html-perl libio-socket-ssl-perl libipc-system-simple-perl libisl19 libjson-glib-1.0-0 libjson-glib-1.0-common
        liblcms2-2 libllvm9 liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl libmpc3 libnet-dbus-perl
        libnet-http-perl libnet-smtp-ssl-perl libnet-ssleay-perl libnspr4 libnss3 libpciaccess0 libproxy1v5 librest-0.7-0
        libsensors4 libsm6 libsoup-gnome2.4-1 libsoup2.4-1 libtie-ixhash-perl libtimedate-perl libtry-tiny-perl liburi-perl
        libwayland-client0 libwayland-cursor0 libwayland-egl1 libwww-perl libwww-robotrules-perl libx11-protocol-perl
        libx11-xcb1 libxaw7 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-shape0 libxcb-sync1 libxft2
        libxkbcommon0 libxml-parser-perl libxml-twig-perl libxml-xpathengine-perl libxmu6 libxpm4 libxshmfence1 libxss1 libxt6
        libxtst6 libxv1 libxxf86dga1 libxxf86vm1 perl-openssl-defaults x11-common x11-utils x11-xserver-utils xdg-utils
      Suggested packages:
        cpp-doc gcc-7-locales indicator-application libasound2-plugins alsa-utils libdigest-hmac-perl libgssapi-perl colord
        gvfs liblcms2-utils libcrypt-ssleay-perl lm-sensors libauthen-ntlm-perl libunicode-map8-perl libunicode-string-perl
        xml-twig-tools mesa-utils nickle cairo-5c xorg-docs-core
      The following NEW packages will be installed:
        at-spi2-core cpp cpp-7 dconf-gsettings-backend dconf-service gcc-7-base glib-networking glib-networking-common
        glib-networking-services gsettings-desktop-schemas libappindicator3-1 libasound2 libasound2-data libatk-bridge2.0-0
        libatspi2.0-0 libauthen-sasl-perl libcairo-gobject2 libcolord2 libdata-dump-perl libdbusmenu-gtk3-4 libdconf1
        libdrm-amdgpu1 libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libencode-locale-perl libepoxy0 libfile-basedir-perl
        libfile-desktopentry-perl libfile-listing-perl libfile-mimeinfo-perl libfont-afm-perl libfontenc1 libgl1
        libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgtk-3-0 libgtk-3-bin libgtk-3-common
        libhtml-form-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libhttp-cookies-perl
        libhttp-daemon-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl libice6 libindicator3-7
        libio-html-perl libio-socket-ssl-perl libipc-system-simple-perl libisl19 libjson-glib-1.0-0 libjson-glib-1.0-common
        liblcms2-2 libllvm9 liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl libmpc3 libnet-dbus-perl
        libnet-http-perl libnet-smtp-ssl-perl libnet-ssleay-perl libnspr4 libnss3 libpciaccess0 libproxy1v5 librest-0.7-0
        libsensors4 libsm6 libsoup-gnome2.4-1 libsoup2.4-1 libtie-ixhash-perl libtimedate-perl libtry-tiny-perl liburi-perl
        libwayland-client0 libwayland-cursor0 libwayland-egl1 libwww-perl libwww-robotrules-perl libx11-protocol-perl
        libx11-xcb1 libxaw7 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-shape0 libxcb-sync1 libxft2
        libxkbcommon0 libxml-parser-perl libxml-twig-perl libxml-xpathengine-perl libxmu6 libxpm4 libxshmfence1 libxss1 libxt6
        libxtst6 libxv1 libxxf86dga1 libxxf86vm1 perl-openssl-defaults x11-common x11-utils x11-xserver-utils xdg-utils
      0 upgraded, 117 newly installed, 0 to remove and 58 not upgraded.
      1 not fully installed or removed.
      Need to get 40.7 MB of archives.
      After this operation, 369 MB of additional disk space will be used.
      Do you want to continue? [Y/n] Y
      Fetched 40.7 MB in 4s (9470 kB/s)
      Extracting templates from packages: 100%
  

Trinn 3: Last ned Chrome

Last ned Google Chrome stable-pakken for Ubuntu-systemet.

      [email protected]:~$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
      --2020-01-15 13:58:41--  https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
      Resolving dl.google.com (dl.google.com)... 172.217.163.78, 2404:6800:4007:80c::200e
      Connecting to dl.google.com (dl.google.com)|172.217.163.78|:443... connected.
      HTTP request sent, awaiting response... 200 OK
      Length: 62204098 (59M) [application/x-debian-package]
      Saving to: ‘google-chrome-stable_current_amd64.deb’

      google-chrome-stable_current_amd64. 100%[=================================================================>] 59.32M 11.1MB/s in 29s

      2020-01-15 13:59:10 (2.04 MB/s) - ‘google-chrome-stable_current_amd64.deb’ saved [62204098/62204098]
  

Trinn 4: Installer Chrome

Installer den nedlastede stabile pakken.

      [email protected]:~$ sudo dpkg -i google-chrome*.deb
      Selecting previously unselected package google-chrome-stable.
      (Reading database ... 318285 files and directories currently installed.)
      Preparing to unpack google-chrome-stable_current_amd64.deb ...
      Unpacking google-chrome-stable (79.0.3945.117-1) ...
      Setting up google-chrome-stable (79.0.3945.117-1) ...
      update-alternatives: using /usr/bin/google-chrome-stable to provide /usr/bin/x-www-browser (x-www-browser) in auto mode
      update-alternatives: using /usr/bin/google-chrome-stable to provide /usr/bin/gnome-www-browser (gnome-www-browser) in auto mode
      update-alternatives: using /usr/bin/google-chrome-stable to provide /usr/bin/google-chrome (google-chrome) in auto mode
      Processing triggers for gnome-menus (3.13.3-11ubuntu2) ...
      Processing triggers for desktop-file-utils (0.23-3ubuntu2) ...
      Processing triggers for mime-support (3.60ubuntu1) ...
      Processing triggers for man-db (2.8.4-2) ...
  

Trinn 5: Kontroller Chrome-versjonen

For å bekrefte at installasjonen er vellykket, sjekk Google Chrome-versjonen.

      [email protected]:~$ google-chrome-stable -version
      Google Chrome 79.0.3945.117
  

Valgfritt: Kjør Chrome Headless

Her er et eksempel på hvordan du kjører Chrome i headless-modus.

Vi skal kjøre Chrome i headless-modus og lagre innholdet på https://gf.dev/ som en PDF-fil.

      [email protected]:~$ google-chrome-stable --headless --disable-gpu --print-to-pdf https://gf.dev/
      [0115/140930.772108:INFO:headless_shell.cc(620)] Written to file output.pdf.
  

Du vil nå se en fil med navnet output.pdf.

      [email protected]:~$ ls -l out*
      -rw------- 1 tipsbilk.net tipsbilk.net 80799 Jan 15 14:09 output.pdf
      [email protected]:~$
  

Nå skal vi se hvordan du gjør det samme oppsettet på CentOS-systemet.

Installasjon av Chromium på CentOS

Trinn 1: Oppdater CentOS

Oppdater CentOS-systemet med kommandoen nedenfor.

[[email protected] ~]$ sudo yum update

Trinn 2: Opprett Chrome-repositorium

Legg til Google Chrome-repositoriet til systemet. Opprett en fil med navnet google-chrome.repo i /etc/yum.repos.d/ og legg til følgende informasjon:

      [[email protected] ~]$ sudo gedit /etc/yum.repos.d/google-chrome.repo

      [google-chrome]
      name=google-chrome
      baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
      enabled=1
      gpgcheck=1
      gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
  

Trinn 3: Installer Chrome

Kjør yum-kommandoen nedenfor for å installere Google Chrome på CentOS-systemet.

      [[email protected] ~]$ sudo yum install google-chrome-stable
      Last metadata expiration check: 0:04:04 ago on Wed 22 Jan 2020 01:06:24 PM EST.
      Dependencies resolved.
      ================================================================================
      Package          Arch    Version           Repository        Size
      ================================================================================
      Installing:
      google-chrome-stable   x86_64   79.0.3945.130-1  google-chrome   60 M
      Installing dependencies:
      libXScrnSaver      x86_64    1.2.3-1.el8         AppStream         31 k
      libappindicator-gtk3   x86_64    12.10.0-19.el8   AppStream        43 k
      libdbusmenu       x86_64    16.04.0-12.el8    AppStream        140 k
      libdbusmenu-gtk3  x86_64    16.04.0-12.el8     AppStream        41 k
      libindicator-gtk3    x86_64   12.10.1-14.el8   AppStream        70 k
      liberation-fonts     noarch     1:2.00.3-4.el8    BaseOS            19 k
      liberation-serif-fonts  noarch  1:2.00.3-4.el8   BaseOS           607 k

      Transaction Summary
      ================================================================================
      Install  8 Packages

      Total download size: 60 M
      Installed size: 213 M
      Is this ok [y/N]: y
      Downloading Packages:
      (1/8): libXScrnSaver-1.2.3-1.el8.x86_64.rpm  146 kB/s | 31 kB   00:00
      (2/8): libappindicator-gtk3-12.10.0-19.el8.x86_   171 kB/s | 43 kB  00:00
      (3/8): libdbusmenu-gtk3-16.04.0-12.el8.x86_64.r 691 kB/s | 41 kB  00:00
      (4/8): libindicator-gtk3-12.10.1-14.el8.x86_64.  558 kB/s | 70 kB  00:00
      (5/8): liberation-fonts-2.00.3-4.el8.noarch.rpm    74 kB/s | 19 kB   00:00
      (6/8): liberation-serif-fonts-2.00.3-4.el8.noar  1.3 MB/s | 607 kB  00:00
      (7/8): libdbusmenu-16.04.0-12.el8.x86_64.rpm 121 kB/s | 140 kB  00:01
      (8/8): google-chrome-stable-79.0.3945.130-1.x86  8.4 MB/s | 60 MB   00:07
      --------------------------------------------------------------------------------
      Total  6.5 MB/s | 60 MB  00:09
      warning: /var/cache/dnf/google-chrome-eb0d6f10ccbdafba/packages/google-chrome-stable-79.0.3945.130-1.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 7fac5991: NOKEY
      google-chrome     49 kB/s |  10 kB     00:00
      Importing GPG key 0x7FAC5991:
      Userid : "Google, Inc. Linux Package Signing Key <[email protected]>"
      Fingerprint: 4CCA 1EAF 950C EE4A B839 76DC A040 830F 7FAC 5991
      From    : https://dl-ssl.google.com/linux/linux_signing_key.pub
      Is this ok [y/N]: y
      Key imported successfully
      Importing GPG key 0xD38B4796:
      Userid : "Google Inc. (Linux Packages Signing Authority) <[email protected]>"
      Fingerprint: EB4C 1BFD 4F04 2F6D DDCC EC91 7721 F63B D38B 4796
      From    : https://dl-ssl.google.com/linux/linux_signing_key.pub
      Is this ok [y/N]: y
      Key imported successfully
      Running transaction check
      Transaction check succeeded.
      Running transaction test
      Transaction test succeeded.
      Running transaction
      Preparing      : 1/1
      Installing    : libdbusmenu-16.04.0-12.el8.x86_64   1/8
      Installing    : libdbusmenu-gtk3-16.04.0-12.el8.x86_64  2/8
      Installing    : liberation-serif-fonts-1:2.00.3-4.el8.noarch    3/8
      Installing    : liberation-fonts-1:2.00.3-4.el8.noarch   4/8
      Installing    : libindicator-gtk3-12.10.1-14.el8.x86_64    5/8
      Installing    : libappindicator-gtk3-12.10.0-19.el8.x86_64    6/8
      Installing    : libXScrnSaver-1.2.3-1.el8.x86_64    7/8
      Running scriptlet: google-chrome-stable-79.0.3945.130-1.x86_64   8/8
      Installing    : google-chrome-stable-79.0.3945.130-1.x86_64  8/8
      Running scriptlet: google-chrome-stable-79.0.3945.130-1.x86_64    8/8
      Redirecting to /bin/systemctl start atd.service

      Verifying     : libXScrnSaver-1.2.3-1.el8.x86_64     1/8
      Verifying     : libappindicator-gtk3-12.10.0-19.el8.x86_64    2/8
      Verifying     : libdbusmenu-16.04.0-12.el8.x86_64    3/8
      Verifying     : libdbusmenu-gtk3-16.04.0-12.el8.x86_64     4/8
      Verifying     : libindicator-gtk3-12.10.1-14.el8.x86_64  5/8
      Verifying     : liberation-fonts-1:2.00.3-4.el8.noarch    6/8
      Verifying     : liberation-serif-fonts-1:2.00.3-4.el8.noarch   7/8
      Verifying     : google-chrome-stable-79.0.3945.130-1.x86_64   8/8

      Installed:
      google-chrome-stable-79.0.3945.130-1.x86_64
      libXScrnSaver-1.2.3-1.el8.x86_64
      libappindicator-gtk3-12.10.0-19.el8.x86_64
      libdbusmenu-16.04.0-12.el8.x86_64
      libdbusmenu-gtk3-16.04.0-12.el8.x86_64
      libindicator-gtk3-12.10.1-14.el8.x86_64
      liberation-fonts-1:2.00.3-4.el8.noarch
      liberation-serif-fonts-1:2.00.3-4.el8.noarch

      Complete!
  

Trinn 4: Kontroller Chrome-versjonen

For å bekrefte at installasjonen er vellykket, sjekk Google Chrome-versjonen.

        [[email protected] ~]$ google-chrome -version
        Google Chrome 79.0.3945.130
    

Valgfritt: Kjør Chrome Headless

La oss se et eksempel på å kjøre Chrome i headless-modus på CentOS.

Vi skal ta et skjermbilde. Kommandoen nedenfor vil kjøre Chrome i headless-modus og lagre innholdet fra https://www.chromestatus.com/ som en PDF-fil.

        [[email protected] ~]$ google-chrome-stable --headless --disable-gpu --print-to-pdf https://www.chromestatus.com/
        [0122/131602.193881:INFO:headless_shell.cc(620)] Written to file output.pdf.
    

Filen output.pdf er opprettet og inneholder nå innholdet fra https://www.chromestatus.com/.

        [[email protected] ~]$ ls -l
        total 61208
        drwxr-xr-x. 2 tipsbilk.net tipsbilk.net       6 Sep 25 11:49 Desktop
        drwxr-xr-x. 2 tipsbilk.net tipsbilk.net       6 Sep 25 11:49 Documents
        drwxr-xr-x. 2 tipsbilk.net tipsbilk.net       6 Sep 25 11:49 Downloads
        -rw-rw-r--. 1 tipsbilk.net tipsbilk.net     180 Jan 22 13:05 google-chrome.repo
        -rw-------. 1 tipsbilk.net tipsbilk.net  146776 Jan 22 13:16 output.pdf
    

Dette var en veiledning for hvordan du installerer Chrome på Ubuntu og CentOS og kjører den i headless-modus.