2017年02月

AWS上のEC2でubuntuを立ち上げてseleniumを動かしました(備忘録)

・インスタンスの起動
t2.microでデフォルト構築します。数分でインスタンスが起動してくるので、ssh接続します。sshキーは10分チュートリアルで作成した秘密鍵を使います。デフォルトユーザーはubuntuの場合はubuntuです。設定するとこんな感じの画面。
ubuntu_20170208


・事前の設定
firefoxをインストールします。
sudo apt-get install firefox

apt-getをアップデートするように言われるので一旦アップデート。
sudo apt-get update

再度firefoxをインストールします。
sudo apt-get install firefox

・pythonの設定
事前にパッケージインストール。
sudo apt-get install git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev

matplotlibで問題が出るようなので事前にインストール。
sudo apt-get install python3-tk tk-dev python-tk libfreetype6-dev

pyenvをインストール。
git clone https://github.com/yyuu/pyenv.git ~/.pyenv

設定を.bashrcに記載して
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"

再度読み込む
source ~/.bashrc

インストールできるリストを取得する。
pyenv install --list
最新のバージョンあたりは以下なので、3.5.3あたりを選択してみることに。
3.5.1
3.5.2
3.5.3
3.6.0
3.6-dev
3.7-dev

インストールする。
pyenv install 3.5.3

デフォルト設定する。
pyenv global 3.5.3

バージョン確認。無事3.5.3になりました。
python -V

以下を参考にvirtualenvを追加。
http://qiita.com/Kodaira_/items/feadfef9add468e3a85b

インストール(virtualenv)する。
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

設定を.bashrcに追加。
eval "$(pyenv virtualenv-init -)"

再読み込み。
source ~/.bashrc

「新しいpython環境の作成は、pyenv virtualenv [version] とすることで新しくvirtualenv-nameという環境ができる。ここの[version]には、既存の環境を指定する。」ということらしいので、マネしてやってみる。

仮想環境を設定。
pyenv virtualenv 3.5.3 test_3.5.3
pyenv local test_3.5.3
以下のように表示される。
ubuntu@ip-XXX-XX-XX-XX:~$ pyenv local test_3.5.3
(test_3.5.3) ubuntu@ip-XXX-XX-XX-XX:~$

管理ツールとしてpipを追加
sudo apt-get install python-pip

seleniumをインストール
pip install selenium

早速pythonを起動して
from selenium import webdriver
browser = webdriver.Firefox()
を実行すると、geckodriverが無いと怒られる。

調べてみると0.14.0が最新らしい。とりあえず最新をゲット。
wget https://github.com/mozilla/geckodriver/releases/download/v0.14.0/geckodriver-v0.14.0-linux64.tar.gz

解凍して
tar -zxvf ./geckodriver-v0.14.0-linux64.tar.gz

lsでチェックすると
-rwxrwxr-x 1 ubuntu ubuntu 5593244 Jan 31 17:14 geckodriver
解凍できてます。

binに入れ込んで
sudo mv geckodriver /usr/local/bin

早速pythonを起動して
from selenium import webdriver
browser = webdriver.Firefox()
を実行するもエラー。
selenium.common.exceptions.WebDriverException: Message: connection refused

以下のサイトを見ると足らないものがありそうなので実行。
http://stackoverflow.com/questions/39547598/selenium-common-exceptions-webdriverexception-message-connection-refused

以下を実行。xvfbのほうはchromeでも入れたなぁ。。。
pip install pyvirtualdisplay selenium
sudo apt-get install xvfb

再度pythonを起動して
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.google.com')
print (browser.title)
Google
となりOK。


んが、再度実行してみるとconnection refusedのエラーになってしまった。。。
よくわからないので一旦ここまで。

・・・で、しばらく調べてみるとやはりfirefoxでもchromと同じようにwebdriverのバージョンが問題みたい。
http://stackoverflow.com/questions/26070834/how-to-fix-selenium-webdriverexception-the-browser-appears-to-have-exited-befor

そういう訳で同じように実行。まずはアンインストール
sudo apt-get purge firefox

続いて確認
apt-cache show firefox | grep Version
Version: 51.0.1+build2-0ubuntu0.16.04.2
Version: 45.0.2+build1-0ubuntu1

上記サイトと全くバージョンも一緒だったのでそのまま実行
sudo apt-get install firefox=45.0.2+build1-0ubuntu1

apt-getで更新されないようにホールド。
sudo apt-mark hold firefox

なお、バージョンアップしたい時は下を実行。
sudo apt-mark unhold firefox
sudo apt-get upgrade

再度pythonを起動して実行。
from selenium import webdriver
browser = webdriver.Firefox()
んが、またエラー。。。

ただ、サイトにあるままを実行したらうまくいきました。
from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(1024, 768))
display.start()

browser = webdriver.Firefox()
browser.get('http://www.google.com/')
print (browser.title)

browser.close()
display.stop()

で、もしや実行の方法が悪かったのかと思って
sudo apt-mark unhold firefox
sudo apt-get upgrade
でバージョン上げて再実行しましたが、今度はうまくいきました。
どうやらバージョンの問題ではなかったみたい。。。

めでたしめでたし。
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。