IT全般

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
でバージョン上げて再実行しましたが、今度はうまくいきました。
どうやらバージョンの問題ではなかったみたい。。。

めでたしめでたし。
スポンサーサイト

seleniumの実行その2

seleniumの続きです。googleに飛んで「エンタープライズエンジニア」を検索するだけの処理。sleepを入れているのは結果取得待ちです。なお、ソースを表示すると膨大なので、確認だけなら不要と思います。いろいろ遊ぶ前にマルチバイトチェックしましたが、うまく動きませんでした。python2.X系だとUTF8の「u」をつけてあげるんですね。普段プログラミングしないからわからんわ。。。
import os
import time
from selenium import webdriver
from pyvirtualdisplay import Display

display = Display(visible=0, size=(800, 600))
display.start()
driver = webdriver.Chrome()
driver.get("http://www.google.com")

search_input = driver.find_element_by_name('q')
search_input.send_keys(u'エンタープライズエンジニア')
search_input.submit()
time.sleep(3)
print driver.title

print driver.page_source.encode('utf-8')
driver.quit()
display.stop()


続いてダイレクトバンクングにアクセスします。以下を基本的にコピペ。環境差分のみを修正して、面倒なのでお知らせ系も省いています。お約束ですが実行は自己責任で。
http://blog.mursts.jp/entry/2015/09/25/scrape-netbanking-by-python-and-selenium/

auf:~/selenium$ cat btmu_drirect.py

#-*- coding: utf-8 -*-

import os
import time
from selenium import webdriver
from pyvirtualdisplay import Display

INFORMATION_TITLE = 'お知らせ - 三菱東京UFJ銀行'
ID = '自分のID'
PASSWORD = '自分のパスワード'
MUFG_TOP_URL = 'https://entry11.bk.mufg.jp/ibg/dfw/APLIN/loginib/login?_TRANID=AA000_001'

try:
display = Display(visible=0, size=(800, 600))
display.start()
driver = webdriver.Chrome()
driver.get(MUFG_TOP_URL)
time.sleep(2)

driver.find_element_by_id('account_id').send_keys(ID)
driver.find_element_by_id('ib_password').send_keys(PASSWORD)
driver.find_element_by_xpath('//img[@alt="ログイン"]').click()
time.sleep(3)


driver.find_element_by_xpath('//img[@alt="入出金明細をみる"]').click()
time.sleep(5)

print driver.title
#print driver.page_source.encode('utf-8')

driver.find_element_by_link_text('ログアウト').click()
time.sleep(3)

finally:
driver.quit()
display.stop()

auf:~/selenium$

以上でソースは問題なくgetできました。表示されると長いので#でコメントアウトしています。

あ、ちなみに前回解決できなかったLinuxのシャットダウンできない問題は、何故か何もしていないのにうまくいくようになりました。基本ITは勝手に変わることはないんですけど、たまにこういうこともありますね。。。いろいろ変更したのは確かなんですが、すぐに反映されないルールがどこかにあるともうお手上げです。

seleniumの実行

ブラウザの操作をLinuxでできると便利だなと思い始めて、インストールして放置していたUbuntuを再度使うことに。。。
http://blog.mursts.jp/entry/2015/09/25/scrape-netbanking-by-python-and-selenium/
のサイトが面白そうなので真似してみたので備忘録。そもそもUbuntuってろくに使ったこともないのでいろいろとはまるポイントが多いので記載しておくことに。もう超ビギナーレベルから(苦笑)

①そもそもエディタって何があるの?
geditが標準みたいです。Linuxを操作するときなんてSSHで接続してviくらいしか使わないので、Linuxのデスクトップ上で何が便利かわからないですが、とりあえず最低限あればいいのでこれでいいでしょ。

②Chromeのインストール
元々Forefoxが入っているのでGoogleから普通に落として終了。それだけ。でも起動がわからん。ま、調べればすぐわかるのですが、google-chromeで起動でした。どこにインストールされたのかと思ったら/optの下にディレクトリができていて、google-chromeもありました。ちなみに一度起動すると右クリックでLauncherに登録できます。起動さえしてしまえばブックマークも共有できて便利ですね。流石Google先生。

③Chromedriverのダウンロード
なぜかChromeでダウンロードできないのでFirefoxで落としてZipを解凍しました。なんでChromeでダメだったかはわからず未解決。。。(後日ダウンロードしてみたらできるようになってました。ようわからん)

④rootってなんだっけ?
/opt配下にgoogleディレクトリがあるので、Chromedriverもそこに置こうと思いましたが、rootのパスワードがわかりません。もうだいぶ前にインストールしたし覚えてないわ、、、って思って調べると、ubuntuってはじめはrootが設定されてないんですね。sudo passwd rootで初期設定できて完了。

⑤seleniumのインストール
pipは設定されているので特に問題なし

⑥実行
以下の同じ症状だったのでfor linuxを参考にやってみます。
http://stackoverflow.com/questions/8255929/running-webdriver-chrome-with-selenium

が、なかなかうまくいきません。追加で以下をインストールします。
sudo pip install pyvirtualdisplay
sudo apt-get install xvfb

そもそもchromiumを入れていないので以下も念の為実施(多分これが原因ではない)。
sudo apt-get install chromium-browser

とりあえず、以下のメッセージに進みましたがどうにもこうにもわからず、、、
selenium.common.exceptions.WebDriverException: Message: unknown error: Runtime.executionContextCreated has invalid 'context'・・・以下略

ネットで検索していると、chromedriverが2.24だとうまくいくよ、という情報が多いので
そこまでダウングレードしてみました。/usr/binに配置しているので置き換えるだけ(この時点で/optからはmvしてます)。
なお、2.9と2.8はダメでした。

とりあえず
import os
from selenium import webdriver
from pyvirtualdisplay import Display

display = Display(visible=0, size=(800, 600))
display.start()
driver = webdriver.Chrome()
driver.get("http://www.google.com")
print driver.page_source.encode('utf-8')
driver.quit()
display.stop()
以下のコマンドは問題なくできるようになりました。driver.page_sourceで無事にHTMLは取得できています。

やれやれ。。。
疲れたのでここで終了。

携帯代が来月から半額以下だぁ

最近話題になってきたMVNOで携帯料金を大幅に安く出来るのです。

うちは私のも嫁のも四年くらい使ったのでそろそろ端末にくたびれ感が出てきました。機種変更するにも高いしなあと思っていたので、いろいろ調べて試すことにしました。

いろいろなサービスが乱立していますが、私はIIJを選択しました。個人的にインターネット創成期からIIJにはいろいろお世話になったのと、なによりも情報提供量が多くて安心できたからです(実際にはWi-Fiも使えるビックカメラのビックSIMを契約してます)。選んだプランは7ギガのシェアプランでSMSつきです。2700円+280円なので税込で月に3200円です。これに別途ガラケーを持って通話専用機にします(二台持ち)。SMSを入れたのは普段使うのもありますが、いざという時の通信確保目的もあります。東日本大震災の時にインターネットの強さは実感しましたが、ドコモ回線も確保しておきたいなあと。あと、ガラケーはキャリアを変えますので(ソフトバンクの予定)いざという時に使える手段が増えます。

さて、選んだ機種はXperia Z1 SO-01Fです。IIJはドコモ回線なのでドコモの白ロムから選択する必要があります。金額は36000円以下にするとこの機種が候補になりました。36000円は24回払いだと1500円だから(笑)一年落ちくらいでしたが、全くストレスなく使えます。それにしてもバッテリーの持ちがかなり良くなってますね。余裕で1日もちます(笑)

20150209

さて、simフリーを考える上で気になっていたことが2つありました。

1)モバイルSuicaが使えるか
結論から言うと問題なく使えました。注意することと言えばモバイルSuicaの機種変更手続きしてから翌朝以降でないと移管できないところでしょうか?ちなみに私の買った白ロムはロックされていたのかわかりませんが、モバイルSuicaの初期設定ができませんでした。それもJRに電話してエラーコードを伝えたら解消しました。JRのコールセンターって親切ですね。対応が良くて助かりました。

2)GPS機能が劣る点
GPSは思った以上に複雑で、簡単にいうとGPS通信以外にキャリアのネットワークで補完されています。ドコモ回線ですが、そこの通信が使えなくなるので学習に時間がかかったりすることがあるようです。車のナビで使うことはないのでまだ試してませんが、普通にGPSを使う分には問題ありませんでした。ラジオが好きなのでradikoを良く使いますが、こちらも問題なく使えました。

ちなみにMVNOと一切関係ないですが、今回の対応で良かったこと、悪かったことのまとめです。

良かったこと
・携帯のレスポンスが格段に良くなった(4年の進歩を実感(笑))
・EOS remoteが使える!(前のAndroidのバージョンが古くて非対応(笑))
・(若干あやしいけど)端末が防水対応になった
・Xperiaの写真写りがいい!

悪かったこと
・ATOKが使えなくなって変換がお馬鹿ちゃん

これで月の通信費が5000円ちょっと。やろうと思えばもっと節約もできますが、これまでの半分以下になったので満足してます。あとは1500円出してATOKを買うかが目下の悩みです。。。

Google may have smart eyeglasses but Budweiser has smart beer glasses

今週見た記事で一番面白かったのがこれ↓
COMPUTER WORLDの記事

When two Buddy Cups are clinked together, they automatically send friend requests to the users
って読んだときに思わず吹き出してしまった(笑)こんなん押すやついるのか???知り合いならともかく・・・。とはいえ、こういう馬鹿げた発想は大好きですけどね。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。