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でスクレイピング環境を構築するチュートリアル

2件のコメント

  1. こんにちは。
    CentOS7環境でPython+Selenium+Chromeスクレイピングしたいと思い、記事を参考にさせて頂きました。
    しかしながら以下エラーになってしまいます。
    pythonファイルを設置する場所の指定などあるのでしょうか?

    Python 3.9.9
    Google Chrome 105.0.5195.52
    ChromeDriver 105.0.5195.52

    —————————————–
    [root@160-251-78-248 test]# python3 sample.py
    Traceback (most recent call last):
    File “/root/pyscript/test/sample.py”, line 9, in
    browser = webdriver.Chrome(options=options)
    File “/usr/local/lib/python3.9/site-packages/selenium/webdriver/chrome/webdriver.py”, line 69, in __init__
    super().__init__(DesiredCapabilities.CHROME[‘browserName’], “goog”,
    File “/usr/local/lib/python3.9/site-packages/selenium/webdriver/chromium/webdriver.py”, line 92, in __init__
    super().__init__(
    File “/usr/local/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py”, line 270, in __init__
    self.start_session(capabilities, browser_profile)
    File “/usr/local/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py”, line 363, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
    File “/usr/local/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py”, line 428, in execute
    self.error_handler.check_response(response)
    File “/usr/local/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py”, line 243, in check_response
    raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.
    (unknown error: DevToolsActivePort file doesn’t exist)
    (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
    Stacktrace:
    #0 0x5563678ca693
    #1 0x5563676c3b0a
    #2 0x5563676e8ef2
    #3 0x5563676e41f4
    #4 0x55636771f953
    #5 0x556367719743
    #6 0x5563676ef533
    #7 0x5563676f0715
    #8 0x55636791a7bd
    #9 0x55636791dbf9
    #10 0x5563678fff2e
    #11 0x55636791e9b3
    #12 0x5563678f3e4f
    #13 0x55636793dea8
    #14 0x55636793e052
    #15 0x55636795871f
    #16 0x7f095db3daaf
    —————————————–

    1. たにちゃん様
      ブログをご参考にいただきありがとうございます。

      エラーの内容を拝見したところ、恐らくですが
      Headlessオプションが有効になっていない可能性がございます。

      pyhotnファイルの設置場所には特に指定ありませんので
      一度、実行いただいたsample.pyにheadlessのオプションが含まれているか
      ご確認いただけますでしょうか。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA