本記事では、『ConoHa WING』
のレンタルサーバを前提として、PythonのSeleniumパッケージを動かすところまでの設定方法を解説します。
以前の記事でSeleniumの使い方を解説しましたが、1時間単位でとか定期的にスクリプト実行しようとすると、どうしてもPCを動かし続ける必要があります。
多くの方はPCを24時間ずっと起動し続けるようなことはしていないと思いますので、定期的な実行は難しいと思います。
そういった場合、『ConoHa WING』
などのレンタルサーバの利用が選択肢となります。
毎月の費用は掛かりますが、電気代を気にせず24時間ずっと動かし続けることができます。
デスクトップPCの場合は地味にファンの音とかも気になると思いますので、このような悩みからも解放されます。
レンタルサーバを持っておくことで他にも色々利用することができます。
- ブログ(WordPress)開設
- Webサーバ開設
- 開発環境として利用
- プログラミング学習やOS学習に活用
- 共有ファイルサーバとして利用

色々なハマりポイントがあって苦戦しました。。
動作環境バージョン
環境による違いで動作が変わることがよくありますので、動作環境をまとめておきます。
うまくいかない場合はソフトウェアバージョンなどの動作環境が影響している可能性があります。
- 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 ProjectsのDownload 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パッケージを動かすところまでの設定方法を解説しました。
自動実行させたいことが色々出てきているので、実装に向けて試してみたいと思います。


コメント