work.log

元エンジニアの備忘録的ブログ

CentOSにSeleniumとGoogle Chrome & ChromeDriverをインストールする

投稿:2018-04-24 17:44  更新:

ログイン認証が必要な Web ページの内容をスクレイピングしたくなったので Selenium を使ってみる事にしました。

認証が必要なページを自力でスクレイピングしようとすると中々大変なので、ブラウザの Google Chrome を Selenium (& ChromeDriver) から操作してしまおうという感じです。

今回試した環境は下記となります。

  • CentOS6 もしくは Centos7
  • Python 3.6.5 (pyenv)
  • Selenium 3.11.0
  • Google Chrome 66.0.3359.117
  • ChromeDriver 2.38.551591

ChromeDriverとフォントのインストール

まず始めは Chrome を外部から操作できるように ChromeDriver (WebDriver) をインストールします。

また、ブラウザのスクリーンショットを撮った時に日本語が文字化けしないようにフォントの調整も行います。

まずはインストールの準備から。

# yum -y install libX11 GConf2 fontconfig

ChromeDriver を公式からダウンロードしてインストールします。

# wget https://chromedriver.storage.googleapis.com/2.38/chromedriver_linux64.zip
# unzip chromedriver_linux64.zip
# mv chromedriver /usr/local/bin/

最新バージョンは公式で確認してください。

CentOS7 の場合はこれで大丈夫ですが、CentOS6 の場合は追加で調整をします。

CentOS6の調整箇所

CentOS6 の場合は GLIBC のバージョンが古いらしくこのようなエラーが出ました。

# chromedriver --version
chromedriver: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by chromedriver)

これに対応するために GLIBC のバージョンを上げます。

wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm
wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm

rpm -Uvh glibc-2.17-55.el6.x86_64.rpm \
glibc-common-2.17-55.el6.x86_64.rpm \
glibc-devel-2.17-55.el6.x86_64.rpm \
glibc-headers-2.17-55.el6.x86_64.rpm

もう一度動作確認をしてみます。

# chromedriver --version
ChromeDriver 2.38.551591 (bcc4a2cdef0f6b942b2bb8049068f65340fa2a69)

これでOK。ただ、他への影響は未確認なのでご注意ください。

日本語フォントのインストール

次に日本語フォントのインストールですが、今回は Windows でお馴染みのメイリオを日本語フォントとして使います。

文字化けしなければフォントは何でも良いとは思いますが、スクリーンショットを撮った時に見慣れているフォントの方がしっくり来るのでここは好みでこれを使う事にしました。

メイリオのフォントファイルは Windows 環境が別途必要なので、これを使わない人はここを飛ばして次で解説する別の日本語フォントのインストール方法を参照してください。

メイリオフォントをインストールする場合

Windows10 を使ってログインユーザーのデスクトップにフォントファイルをコピーします。

下記はコマンドプロンプトを使う例ですが username の部分は利用する環境に合わせてください。

> cd C:\Users\username\Desktop
> mkdir Meiryo
> copy C:\Windows\Fonts\meiryo.ttc Meiryo
> copy C:\Windows\Fonts\meiryob.ttc Meiryo

デスクトップに作成した Meiryo フォルダをサーバにアップして、フォントをインストールします。

# mv Meiryo /usr/share/fonts/
# fc-cache -fv

fc-cache でフォントキャッシュを更新すれば完了です。

他のフォントをインストールする場合

他には Google Noto Fonts を使う方法と、定番の IPA フォントを使う方法があります。

Google Noto Fonts でも良かったのですが、検証した CentOS7 の環境では微妙に文字化けする現象が起きてしまいました。

その場合、IPA フォントを入れるととりあえず解消されるので二通りのやり方を残しておきます。

Google Noto Fonts のインストール

# wget https://noto-website-2.storage.googleapis.com/pkgs/Noto-hinted.zip
# mkdir Noto-hinted
# unzip -d Noto-hinted Noto-hinted.zip
# mkdir -p /usr/share/fonts/opentype/noto
# cp *otf *ttf /usr/share/fonts/opentype/noto
# fc-cache -fv

Google Noto Fontsは容量が大きめなので空き容量に注意。

IPA Fonts のインストール

# yum -y install ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts
# fc-cache -fv

こちらは yum でサクッと入ります。

これで ChromeDriver とフォントのインストールは完了です。

Google Chromeのインストール

次は CentOS に Linux 用の Google Chrome をインストールします。

CentOS6

CentOS6 の場合は必要な依存ファイルが多いので下記インストールスクリプトを使うのが簡単です。

# curl https://intoli.com/install-google-chrome.sh | bash

何やら色々インストールされますがこのスクリプトが何をしているかは下記ページで説明されています。

Centos7

CentOS7 の場合は yum からサクッと入りますので、まずは Chrome 用のリポジトリを追加します。

# vi /etc/yum.repos.d/google-chrome.repo

----- ここから -----
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://dl.google.com/linux/linux_signing_key.pub

続いて yum でインストールします。

# yum -y install google-chrome-stable libOSMesa

libOSMesa は CentOS7 でクラッシュする問題に対応するために入れた方がいいらしい。

プログラムを実行してみてエラーがでなければインストール完了です。

# google-chrome --version
Google Chrome 66.0.3359.117 

Seleniumのインストール

pyenv を使って Python3 のセットアップと Selenium のインストールを行います。

pyenv および Python3 のインストールは下記を参照してください。

$ sudo pip install selenium
$ vi headless.py

headless.py にはこのようなコードを記述します。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')

driver = webdriver.Chrome(chrome_options=options)
driver.get('https://worklog.be/')

driver.save_screenshot('test.png')
driver.quit()

これを実行するとこのようなスクリーンショットが撮れます。

インストールは少々大変ですが、シンプルな記述でブラウザを操作できるので非常に便利です!

ChromeDriverのUAを変更する

おまけで ChromeDriver が吐き出す UA の変更方法について。

デフォルトだとこのような UA を残します。

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/66.0.3359.117 Safari/537.36

HeadlessChrome と出すようです。

これを変更するには webdriver にこのようなオプションを追加すると OK です。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36'

options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1280,1024')
options.add_argument('--user-agent=' + ua)
.
.
.

簡単ですね。

以上で、Selenium のセットアップは完了です。

よく読まれている記事

  • 本日
  • 週間
  • 月間