色々なサイトを見ながら構築しましたが、中々色々なところで引っかかったので思い出しながら流したコマンドをメモしておきます。
目次
概要
最近(?)はやりのRPAにも使えるWebアプリケーションの自動化ツールであるSelenium。勉強したかったので使えるようにしようと思いましたが、将来的に自動処理をしてみたいことがあったのでWebサーバに環境構築を検討しました。
ただし現在このブログを運営しているXserverにはroot権限がないので、構築がやや面倒そう(できないとは言っていない)。
そこで先般AWSの勉強のためにアカウントを作成していたことを思い出し、無料利用枠を利用してAWS上にLinuxサーバを立ててSelenium環境構築することにしました。
Amazon Linux 2の構築
無料枠で構築できるインスタンスの一つである「Amazon Linux 2」を利用しました。AWSの環境構築は手段の一部であるのでミニマムな設定です。
そしてその設定は下記のサイトがとても参考になりました。順を追ってAWSの操作方法を説明されていますのでとても分かりやすいです。よって構築の説明は割愛。
▼参考サイト:AWSを無料で利用する方法を実際にやってみて注意点まとめてみた。(外部サイト)
Selenium環境の構築
最初に私が環境構築で引っかかったところを先に列挙しておきます。
pythonのバージョンが切り替わらない
Seleniumのインストールでエラーがでる
yumがバグる
ちなみに私のサーバ知識は、参考サイトを確認しながらミニマム構成なWordPressのWEBサーバ構築ができる程度。システム開発レベルも簡単なJavaScript、VBA、Batが調べながら書ける程度でPythonは初めて。
用は初心者だけど一念発起してRPAやスクレイピングの勉強がしたい方たちが、このサイトを見ればスムーズに構築できるようにコマンドを順番にメモしていきます。赤枠、青枠は読み飛ばして問題ないです。
まず、設定するうえでベースとさせていただいたのは下記サイトで、このサイト通りに設定していく中で、上記の通り引っかかったところを補足します。
順番通りにやればAmazon Linux 2でSeleniumが使えるようになります。
▼参考サイト:CENTOS7でPYTHON+SELENIUM+CHROMEの動作環境の作成(外部サイト)
1.Pythonのインストール
//パッケージのアップデート
sudo yum update
//Python3インストール
sudo yum install python3
まずはPython3のインストール。
//バージョン確認
python -V
---------------------------------------------------------------------
Python 2.7.x
しかしここでインストール完了後、バージョン確認を実施すると、何故かPython 2系が表示されます。これはPython 3系をインストールしても、もとからあったPython 2系がデフォルトに設定されていることが原因のようです。
//コマンドのディレクトリへ移動
cd /usr/bin/
//Python 3のバージョン確認
ls pyth*
---------------------------------------------------------------------
python python2.7 python2-config python3.7 python-config
python2 python2.7-config python3 python3.7m
//現在のデフォルトリンク(Python 2系)を解除
sudo unlink ./python
//新たにデフォルトリンク(Python 3系)を設定
sudo ln -s /usr/bin/python3.7 ./python
//Python 3系がデフォルトになったことを確認
python -V
---------------------------------------------------------------------
Python 3.7.x
▼参考サイト:AmazonLinux 2 に python 3をインストール(外部サイト)
2.Seleniumのインストール
×エラー
pip3 install selenium
このコマンドを実行するとエラーが発生します。
pip3 install selenium --user
こうすればエラー無くインストールできます。管理者権限の必要のないディレクトリにパッケージをインストールするらしい。
▼参考サイト:pip install nfcpyでPermission denied発生したときの対処法(外部サイト)
3.yumの修正
Chrome関連のインストールを進める前にyumの設定変更が必要です。
×エラー
yum install xxx
———————————————————————
File “/usr/bin/yum”, line 30
except KeyboardInterrupt, e:
^
SyntaxError: invalid syntax
このコマンドを実行するとエラーが発生します。
まあこのようにインストールしようとすると意味不明なエラーが出るわけですね。
これはyumがPython 2系で記述されたコマンドであることが原因みたい。先ほどデフォルトをPython 3系にしたことで不具合が発生しています。これを2系で動かすために2つファイル修正します。
1行目を上記の通り修正します。pythonの後ろに2を付けます。
編集モードを解除し、上書きして完了。
sudo vim /usr/libexec/urlgrabber-ext-down
1行目を上記の通り修正します。pythonの後ろに2を付けます(さっきと同じ)。
こちらも上書きして完了。
これで次の作業の準備は整いました。
▼参考サイト:File “/bin/yum”, line 30 except KeyboardInterrupt, e: と表示されyumが使えない(外部サイト)
4.Google ChromeとChromeDriverのインストール
sudo 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
コピペしましょう。
編集モードを解除して上書き完了。
//Chromeのインストール
sudo yum install --enablerepo=google-chrome google-chrome-stable
//バージョン確認
google-chrome --version
---------------------------------------------------------------------
Google Chrome 86.0.4240.111
これでGoogle Chromeがインストールされました。これだけでは動かせないのでChromeDriverをインストールします。
このサイトからChromeDriverを取得するのですが、ここで重要なのが先ほど調べたバージョン。Google ChromeとChromeDriverはそのバージョンをマッチさせる必要があります。
今回はGoogle Chromeのバージョンが86だったので、この同じバージョンのChromeDriverをダウンロードします。
これをクリックすればダウンロードが始まります。
私は一度Windowsでダウンロードし、Linuxサーバにアップする方法で行いました。(コマンドでLinuxサーバから直接取得も可能です。)
TeraTermならメニューの[File] < [SSH SCP]で、FromはWindows側のフォルダで各自の設定、Toは上記の通りの設定で大丈夫です。
//ユーザディレクトリに上がったzipを解凍
sudo unzip /home/ec2-user/chromedriver_linux64.zip
//PATHの通ったディレクトリへ移動
sudo mv /home/ec2-user/chromedriver /usr/local/bin/
参考情報
echo $PATH
———————————————————————
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
PATHの通ったディレクトリたち
5.日本語フォントのインストール
sudo yum install ipa-pgothic-fonts.noarch
これをしておかないと、スクリーンショットを取った時に文字化けします。
そしてこれで最低限の準備完了です。
テスト/まとめ
これで準備が完了し、いよいよSeleniumが利用できる環境となりました。
//作業用フォルダの作成
mkdir /home/ec2-user/selenium
//カレントディレクトリの移動
cd /home/ec2-user/selenium
//テスト用データの作成
vi test.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')
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://www.google.co.jp/')
driver.save_screenshot('test.png')
driver.quit()
googleのトップページのスクリーンショットを、pyファイルと同じ階層のフォルダに生成します。
このコマンドで実行し、設定が正しければpngの画像が出来上がります。
こんな感じの画像になっていれば正解です。
色々悩みながら、サーバ構築からSeleniumインストール完了まで3時間くらい(?)でできました。途中で上手くいかなくても、心が折れなければ何とかなります。
また、設定後なぜか
selenium.common.exceptions.WebDriverException: Message: unknown error: DevToolsActivePort file doesn't exist
このようなエラーが出てくるようになり、処理できなくなってしましました。
これは小一時間悩んだ後、ふとインスタンスを再起動すると解消しました。所詮パソコン、「さっきまで動いてたのに」となったらとりあえず再起動してみましょう。
以上AWSにSelenium環境を構築したときのメモでした。
この記事の動画
コメント