Configurando o Chrome Headless em Ubuntu e CentOS: Guia Completo

Foto do autor

By luis

Um guia detalhado sobre como configurar o Chromium Headless tanto no Ubuntu quanto no CentOS.

O que é o Chrome Headless?

O Chrome Headless funciona como uma instância do navegador Chrome, mas sem a interface gráfica. Ele opera em um ambiente sem “cabeça” (headless), sendo extremamente útil para automatizar testes e outras tarefas.

Quais funcionalidades o Chrome Headless nos proporciona?

Uma das vantagens mais interessantes é a capacidade de testar as mais recentes funcionalidades da plataforma web, como módulos ES6, service workers e streams. Com o Chrome Headless, você pode desenvolver aplicações e testá-las com renderização atualizada. Outras funcionalidades notáveis incluem limitação de rede, emulação de dispositivos e análise de cobertura de código.

Com o Chrome Headless, é possível realizar testes sem a necessidade de escrever código, uma grande vantagem!

Você pode executar comandos diretamente pela linha de comando. Abaixo, alguns dos comandos mais utilizados:

  --screenshot  #Para tirar um print da tela.
  --print-to-pdf #Para converter uma página web para PDF.
  --dump-dom  #Para extrair dados do DOM (Document Object Model).
  

Observação: O Chrome Headless é diferente do navegador Chromium.

Instalando o Chromium no Ubuntu

Passo 1: Atualizar o Ubuntu

Primeiramente, é essencial atualizar os pacotes do Ubuntu.

[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

Passo 2: Instalar Dependências

Instale as dependências necessárias para a instalação.

[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

Em alguns casos, podem faltar algumas dependências para instalar o Chrome. Portanto, execute o comando abaixo para instalar todas as dependências adicionais necessárias.

[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%

Passo 3: Baixar o Chrome

Baixe o pacote estável do Google Chrome para o sistema Ubuntu.

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

Passo 4: Instalar o Chrome

Instale o pacote estável do Chrome.

[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) ...

Passo 5: Verificar a Versão do Chrome

Para confirmar que a instalação foi concluída com sucesso, verifique a versão do Google Chrome.

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

Opcional: Executar o Chrome Headless

Vou demonstrar um exemplo de execução do Chrome no modo headless.

Neste caso, o Chrome será executado sem interface gráfica e o conteúdo de https://gf.dev/ será salvo como um arquivo PDF.

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

Você poderá ver um arquivo chamado output.pdf.

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

A seguir, demonstrarei como realizar a mesma configuração no sistema CentOS.

Instalação do Chromium no CentOS

Passo 1: Atualizar o CentOS

Atualize o sistema CentOS com o comando abaixo.

[[email protected] ~]$ sudo yum update

Passo 2: Criar Repositório do Chrome

Adicione o repositório do Google Chrome ao sistema. Crie um arquivo chamado google-chrome.repo dentro de /etc/yum.repos.d/ e insira os detalhes abaixo.

[[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

Passo 3: Instalar o Chrome

Execute o comando yum abaixo para instalar o Google Chrome no sistema CentOS.

[[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!

Passo 4: Verificar a Versão do Chrome

Para confirmar que a instalação foi concluída com sucesso, verifique a versão do Google Chrome.

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

Opcional: Executar o Chrome Headless

Vou demonstrar um exemplo de como executar o Chrome no modo headless no CentOS.

Usarei um exemplo de captura de tela. O comando abaixo irá executar o Chrome no modo headless e o conteúdo de https://www.chromestatus.com/ será salvo como um arquivo PDF.

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

O arquivo output.pdf foi criado com todo o conteúdo de https://www.chromestatus.com/.

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

Este foi um guia sobre como instalar o Chrome no Ubuntu e no CentOS, além de como executá-lo no modo headless.