CentOS7でPython+Selenium+Chromeの動作環境の作成

こんにちは
この夏ウクレレにはまるSRE課栩野です。

CentOS7でPython+Selenium+Chromeの動作環境の作成

簡単なブラウザ操作(特定の画面開いてスクリーンショット撮るだけとか)
を自動化するために、自分のPC上にPython+Selenium+Chromeの動作環境を整えて
手動でPythonでSelemiumを実行していたのですが

実行を夜間にスケジューリングして、実行も自動化したいなー

と思ったので、今回はサーバ上にSeleniumの動作環境を構築して実際に実行するところまでやってみます。

Python+Selenium+Chromeの動作環境構築

検証環境

  • CentOS Linux release 7.8

Python3系のインストール

まずPythonの3系をインストールしていきます。

CentOSにPython3系をインストールする際、以前は以下の参考サイトのように
Python3系用のリポジトリを準備して、そこからインストールする必要がありましたが
参考:CentOS7にPython3系をインストールする手順

なんとCentOS7.7系以降からは標準リポジトリからyumでPython3.6系をインストール出来るようになったみたいです。
参考:CENTOS7.7でPYTHON3.6をインストールしてみよう

今回実行環境はCentOS7.8なので、標準リポジトリからPythonをインストールします。
CentOS7.7未満のバージョンの場合、問題なければyum updateを実行してからPython3系のインストールお願いします。

// もしCentOS7.7未満の場合、特に問題なければyum updateを実施して最新にします。
yum update

// 現時点ではPython3.6がインストールされます。
yum install python3

Python3系のインストールはこれでOKです。
一応確認しておくと

python -V
-------------
Python 3.6.8
-------------

// 依存関係でpip3もインストールされます。
pip3 -V
-------------
pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)
-------------

問題なくインストールされています。

Seleniumのインストール

次にSeleniumをインストールします。

先ほど依存関係でpip3コマンドも一緒にインストールされているので
pipでSeleniumをインストールします。

pip3 install selenium

一応確認

pip3 show selenium
-------------
Name: selenium
Version: 3.141.0
Summary: Python bindings for Selenium
Home-page: https://github.com/SeleniumHQ/selenium/
Author: UNKNOWN
Author-email: UNKNOWN
License: Apache 2.0
Location: /usr/local/lib/python3.6/site-packages
Requires: urllib3
-------------

こちらも問題なくインストールされました。

Chromeのインストール

最後にCentOS7上にChromeを準備していきます。

インストールのためChromeのレポジトリを設定します。
viで[google-chrome.repo]を作成します。

vi /etc/yum.repos.d/google-chrome.repo
-------------
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=0
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
-------------

作成が完了したら、yumで先ほど設定したレポジトリを使ってChromeをインストールします。

yum install --enablerepo=google-chrome google-chrome-stable

インストールできたことを確認

google-chrome --version
-------------
Google Chrome 84.0.4147.89 
-------------

ただSeleniumでChromeを使う場合、これだけではなく
chromedriverをダウンロードする必要があります。

またchromedriverは、先ほどインストールしたChromeとバージョンを合わせる必要があるため
今回はバージョンが84のchromedriverをダウンロードします。

// wgetで該当するバージョンのchromedriverをとってきます。
wget https://chromedriver.storage.googleapis.com/84.0.4147.30/chromedriver_linux64.zip

他のバージョンが必要な場合は以下ダウンロードサイトを確認ください。
参考:chromedriverのダウンロード

ダウンロードができたら、zipを解凍してPATHが通っているディレクトリにコマンドを設置します。

// 解凍(unzipがなければyum install unzip)
unzip chromedriver_linux64.zip

// PATHが通っている場所にchromedriverを移動させます。
mv chromedriver /usr/local/bin/

// 権限を755に変更します。
chmod 755 /usr/local/bin/chromedriver

// 不要になったchromedriverのzipファイルは削除しておきます。
rm chromedriver_linux64.zip

これでchromedriver設定も完了になります。
一応確認しておくと

chromedriver --version
-------------
ChromeDriver 84.0.4147.30
-------------

バージョンも84なので問題なしです。

実際にCentOS7上でSeleniumを実行してみる

Seleniumの動作環境はこれで整いましたので
最後に実際にプログラムを書いて動かしてみようと思います。

今回はとりあえず、ただただgoogleのトップページのスクリーンショットを取得するだけの
プログラムを設置します。

サンプルコード

sample.py

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

# ヘッドレスでの実行が必要になるため、ヘッドレスで必要なオプションを追加します。
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
browser = webdriver.Chrome(options=options)
browser.implicitly_wait(10)

url = "https://google.com"

browser.get(url)
browser.save_screenshot('google.png')
browser.quit()

実行する前に、このままではスクリーンショットを取得した時に日本語フォントが読み込まれずに
文字化けしてしまうので、以下必要なフォントをyumでインストールしておきます。

yum install ipa-pgothic-fonts.noarch

これで準備は整ったのでプログラムを実行すると

python3 sample.py

sample.py と同階層に google.png が保存されるので
FTPやSCP等で自PCに落として確認してみると...

google

無事にスクリーンショットが取得できました。

あとはスケジューリングして自動実行するために
crontabに設定しておけば、指定した時間にプログラムを実行してスクリーンショットを取得できます。

crontab -e
-------------
// 毎日AM01:00に実行する設定
0 1 * * * /usr/bin/python3 /root/sample.py
-------------

あとがき

サーバ上にSeleniumの実行環境を構築することで
Seleniumの実行も日時を指定して、夜間でも自動的に実行できるようにできました。
あとは色々プログラムに手を加えて試してみてください。

参考:CentOS7にPython3系をインストールする手順
参考:CENTOS7.7でPYTHON3.6をインストールしてみよう
参考:chromedriverのダウンロード
参考:CentOS7×Chromeでスクレイピング環境を構築するチュートリアル