[ConoHa][Python] サーバ環境でSeleniumを動かすためのシンプルな設定方法

ConoHa

本記事では、『ConoHa WING』のレンタルサーバを前提として、PythonのSeleniumパッケージを動かすところまでの設定方法を解説します。

以前の記事でSeleniumの使い方を解説しましたが、1時間単位でとか定期的にスクリプト実行しようとすると、どうしてもPCを動かし続ける必要があります。
多くの方はPCを24時間ずっと起動し続けるようなことはしていないと思いますので、定期的な実行は難しいと思います。
そういった場合、『ConoHa WING』などのレンタルサーバの利用が選択肢となります。

毎月の費用は掛かりますが、電気代を気にせず24時間ずっと動かし続けることができます。
デスクトップPCの場合は地味にファンの音とかも気になると思いますので、このような悩みからも解放されます。

レンタルサーバを持っておくことで他にも色々利用することができます。

  • ブログ(WordPress)開設
  • Webサーバ開設
  • 開発環境として利用
  • プログラミング学習やOS学習に活用
  • 共有ファイルサーバとして利用
りお
りお

色々なハマりポイントがあって苦戦しました。。

りおがConoHa WINGを選んでいる理由
WordPressブログを運営する上で『ConoHa WING』のサーバーをレンタルしています。
数多くのレンタルサーバーがありますが、自分の場合は以下の点で『ConoHa WING』を選びました。

  • 認知度が高いこと:これはWeb検索した結果と、ブログのレビューなどを参考にしています。ある程度品質が高く、評判がいいレンタルサーバーは安心できます。そういった意味では、ConoHa WING以外にもXServerが挙げられると思います。
  • 価格がよりリーズナブルであること:XServerと比較すると、6ヵ月プランはConoHa WINGと同価格なのですが、12ヵ月になってくるとConoHa WINGの方が若干安くなっています(2025年8月時点)。

今のところ、運用している上でも大きな不満はありませんので、『ConoHa WING』を継続利用予定です。

動作環境バージョン

環境による違いで動作が変わることがよくありますので、動作環境をまとめておきます。
うまくいかない場合はソフトウェアバージョンなどの動作環境が影響している可能性があります。

  • OS(カーネルバージョン):Linux 3.10.0-962.3.2.lve1.5.60.el7.x86_64 ※uname -rで確認
  • Pythonバージョン:3.6.11
  • seleniumパッケージバージョン:3.141.0 ※pip show seleniumで確認
  • glibcバージョン(Chromeを動作させるために必要):2.17 ※/lib64/libc.so.6で確認

現在レンタルしている『ConoHa WING』はrootユーザの権限はありませんので、Pythonバージョンやglibcバージョンを自由にアップデートすることはできません。
この制約に苦しめられることになるのですが、そういった煩わしさから解放されたい方は、『ConoHa VPS』をおすすめします。
『ConoHa VPS』はOSから貸し出してくれるサーバですので、自分でOSなどをセットアップする必要がありますが、バージョンなどを自由に管理することができます。

Chromeのダウンロードと動作確認

まずはLinux上でChromeを動作させるために、ソフトウェアをダウンロードします。

The Chromium ProjectsDownload Chromiumページにアクセスします。
今回はglibcバージョンが古いこともあり、最新のChromeが動作しません。古いバージョンのChromeをダウンロードするため、https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.htmlにアクセスします。

フォルダ一覧が表示されますので「Linux x64」をクリックします。

バージョン管理されているフォルダ一覧が表示されますので、「1000000」フォルダをクリックします。
本記事では一番古いバージョンを選んでいますが、glibcのバージョンによって新しいバージョンのフォルダを選んでください。

「chrome-linux.zip」と「chromedriver_linux64.zip」をダウンロードします。
リンクをクリックすると、バージョン番号を含む以下のファイル名でダウンロードされます。

  • Linux_x64_1000000_chrome-linux.zip
  • Linux_x64_1000000_chromedriver_linux64.zip

これらの2つのファイルをConoHa Wing上のサーバにコピーします。
任意のディレクトリに2つのzipファイルを解凍します。

本記事では、/home/cXXXXXXX/browser ディレクトリに解凍したとします。
ファイル一覧としてはこのようになっていると思います。

$ ls -l
total 159214
-rw-r--r-- 1 cXXXXXXX cXXXXXXX 155695883 Oct 29 23:23 Linux_x64_1000000_chrome-linux.zip
-rw-r--r-- 1 cXXXXXXX cXXXXXXX   7169097 Oct 29 23:29 Linux_x64_1000000_chromedriver_linux64.zip
drwxr-xr-x 6 cXXXXXXX cXXXXXXX        27 Oct 29 23:33 chrome-linux
drwxr-xr-x 2 cXXXXXXX cXXXXXXX         3 Oct 29 23:30 chromedriver_linux64

chromeを実行するためにPATHを通します。

$ export PATH=$PATH:/home/cXXXXXXX/browser/chrome-linux:/home/cXXXXXXX/browser/chromedriver_linux64

実際にchromeを実行できるか確認します。
https://www.selenium.dev/ サイトのスクリーンショットを取得しています。
WARNINGやERRORがたくさん出力されますが、カレントディレクトリにscreenshot.pngとして保存されます。

$ which chrome
~/browser/chrome-linux/chrome
$ chrome --headless --ignore-certificate-errors --screenshot https://www.selenium.dev/
[1031/223312.753766:WARNING:bluez_dbus_manager.cc(247)] Floss manager not present, cannot set Floss enable/disable.
[1031/223312.769329:WARNING:sandbox_linux.cc(376)] InitializeSandbox() called with multiple threads in process gpu-process.
[1031/223312.971865:ERROR:cert_verify_proc_builtin.cc(681)] CertVerifyProcBuiltin for www.selenium.dev failed:
----- Certificate i=2 (CN=ISRG Root X1,O=Internet Security Research Group,C=US) -----
ERROR: No matching issuer found
  :

[1031/223313.470580:ERROR:cert_verify_proc_builtin.cc(681)] CertVerifyProcBuiltin for www.netlify.com failed:
----- Certificate i=2 (CN=DigiCert Global Root G2,OU=www.digicert.com,O=DigiCert Inc,C=US) -----
ERROR: No matching issuer found


[1031/223313.557798:INFO:headless_shell.cc(660)] Written to file screenshot.png.

screenshot.pngを確認してみると、正しくスクリーンショットが取得されていることが分かります。

ここまででchromeの動作確認は完了です。

Seleniumの動作確認

今度はSeleniumパッケージを使って、chromeを動かしてみます。

まずはpipコマンドでSeleniumパッケージをインストールします。
特に問題なくインストールできると思います。

$ pip install --user selenium

Seleniumパッケージを使ったサンプルスクリプト(seltest.py)全体を示します。
動作内容は非常にシンプルで、指定されたWebページのタイトルを返すだけのプログラムです。

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

options = webdriver.ChromeOptions()
options.add_argument("--headless")

capabilities = DesiredCapabilities.CHROME.copy()
capabilities["acceptInsecureCerts"] = True

with webdriver.Chrome(options=options, desired_capabilities=capabilities) as driver:
    driver.get('https://www.selenium.dev/')
    print("Webpage Title is %s" % driver.title)

seltest.pyを実行すると指定したWebページのタイトルを返してくれます。

$ python seltest.py 
Webpage Title is Selenium

エラーが発生せず、期待した結果が出力されていれば、Seleniumパッケージの動作確認は以上になります。

つまづきポイント

ConoHa WingでSeleniumパッケージを動かすまでに少々苦戦しました。
つまづいたポイントを紹介しておきます。

glibcバージョン問題

最新のchromeを使おうとすると以下のようなエラーが発生する場合があります。

$ chrome --headless --ignore-certificate-errors --screenshot https://www.electronjs.org/
chrome: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by chrome)

エラー内容は、chromeを実行するために必要としているglibc 2.25というバージョンがないよ!という意味です。
ConoHa WINGではglibcをアップデートできないので、古いバージョンのchromeを使って回避しました。

残存プロセス問題

「python seltest.py」実行時に以下のようなエラーに遭遇しました。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/cXXXXXXX/.local/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
    desired_capabilities=desired_capabilities)
  File "/home/cXXXXXXX/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/home/cXXXXXXX/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/home/cXXXXXXX/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute    self.error_handler.check_response(response)
  File "/home/cXXXXXXX/.local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed.
  (chrome not reachable)
  (The process started from chrome location /home/cXXXXXXX/browser/chrome-linux/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

こちらは中途半端なchromeプロセスがOS上に残ってしまっていることが原因です。
(エラー発生時などにchromeプロセスが残ってしまう場合があるようです)

psコマンドで残存プロセスが存在するかを確認後、プロセスをkillします。
残存プロセスがなくなったことで、「python seltest.py」実行時のエラーも解消しました。

$ ps auxf | grep chrome
cXXXXXXX 399163  0.0  0.0   9092   676 pts/1    S+   23:52   0:00  \_ grep --color=auto chrome
cXXXXXXX 202951  0.0  0.0 34152060 55032 pts/1  Sl   23:33   0:00  \_ /home/cXXXXXXX/browser/chrome-linux/chrome --allow-pre
-commit-input --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-h
ang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --enable-automation --enable-blink-feature
s=ShadowDOMV0 --enable-logging --headless --log-level=0 --no-first-run --no-service-autorun --password-store=basic --remo
te-debugging-port=0 --test-type=webdriver --use-mock-keychain --user-data-dir=/tmp/.org.chromium.Chromium.paxN9G data:,
  :
$ kill -9 202951
$ ps auxf | grep chrome
cXXXXXXX 407559  0.0  0.0   9092   676 pts/1    S+   23:53   0:00  \_ grep --color=auto chrome
$ 

まとめ

本記事では、『ConoHa WING』のレンタルサーバを前提として、PythonのSeleniumパッケージを動かすところまでの設定方法を解説しました。

自動実行させたいことが色々出てきているので、実装に向けて試してみたいと思います。

コメント

タイトルとURLをコピーしました