Ad

Seleniumとは anchor.png Edit

Seleniumとは本来は微量元素、セレンのことですが、ここではブラウザをスクリプトから操作するツール群のことです。公式ページはこちら

これを使うとWebアプリのテストなどの自動化が可能です。

それ以外にも、例えばログインなどの面倒なサイトへ自動ログインして自動で情報の取得、更新ができる自分用のツールを作ったりもできます。

もちろん、コマンドラインだけでログインなども可能なのですが、Javascriptなどで情報のやりとりを行っているサイトも多く、意外にうまくいかないこともあります。かといってディベロッパーツールなどでネットアクセスを解析するのも面倒です。そんなときにはブラウザでアクセスできるSeleniumが便利です。

対応言語はJava、C#、Ruby、Python、Javascripと幅広く、対応ブラウザもChrome、FireFoxEditなど主なところはだいたい対応していると思ってよいでしょう。

個人的にはログインの面倒なサイトなどの自動化でPythonとChromeの組み合わせで使っており、ここでもその二つを中心に解説します。

Page Top

Macでのインストール anchor.png Edit

SeleniumをPythonで動かすには二つのステップが必要です。

  • Seleniumをインストール
  • ブラウザのドライバーをインストール

他にSeleniumサーバというのもありますが、個人でちょっとしたことに使う分には必要ありません。

Page Top

Seleniumをインストール anchor.png Edit

pipに対応しているので、コマンドラインから簡単にインストールできます。

sudo pip install selenium

もし「-H」オプションが必要と言われたらつけてください。

sudo -H pip install selenium
Page Top

ブラウザのドライバーをインストール anchor.png Edit

ブラウザのドライバーはサードパーティーなどによって各ブラウザごとに開発されています。こちらのページからダウンロード可能です。 ここではChromeのものをダウンロードしてきます。

解凍したドライバはパスの通った場所に置く必要があります。 または、メンテナンスなどを考えるとリンクの方が楽かも知れません。

ln -s /yourlocationdir/chromedriver /usr/local/bin/chromedriver

これで準備は完了です。

Page Top

基本的な使い方 anchor.png Edit

まずインポートします。

from selenium import webdriver

次にドライバーのオブジェクトを取得します。

driver = webdriver.Chrome()

この段階で、新しいプロセスでブラウザが立ち上がり、空の画面が表示されます。

移動は

driver.get("http://njf.jp")

でそのページに移動します。

そのページに表示されている要素の取得も可能で「find_element_by〜」というメソッドで行います。 特によく使うのは、

find_element_by_name
find_element_by_id
find_element_by_xpath

あたりです。それぞれname、id、XPathをもと要素に取得します。XPathとはその文書の要素のパスです。Chromeだとディベロッパーツールの中のエレメントタブから好きなエレメントを右クリックし、「copy」を選ぶとXPathをコピーできます。どの要素でも一意に指定できるので、nameやidで区別できない要素を取得するのに便利です。

xpath_copy.png

また取得した要素にはsend_keysというメソッドがあり、これによってフォームに値を入力できます。

driver.find_element_by_name("email").send_keys("mymail@mymail.jp")
driver.find_element_by_name("password").send_keys("mypassword")

日本語を入力するときはUTF-8を使いましょう。

driver.find_element_by_name("comment").send_keys(u"テストです")

ボタンのクリックも可能です。

driver.find_element_by_id("form_button").click()

Seleniumはスクレイパーとしての機能はさほど優れてはいないため、情報の取得を行うときは、別途Beautiful Soupなどを使うのがおすすめです。 表示中のhtmlソースはpage_sourceで取得できます。

html = driver.page_source
bf = BeautifulSoup(html,"html.parser")

画面を閉じるのはcloseメソッドです。

driver.close()
Page Top

注意事項 anchor.png Edit

注意としては、普段使っているブラウザでもクッキーなどは共有されないようで、ログイン処理などは毎回しなければなりません。

また、起動のたびにプロセスが立ち上がるので、開発中は自分で閉じるのを忘れるとメモリを圧迫するので注意が必要です。

プロセスが終わるとブラウザも落ちてしまうことがあります。その時は以下のような処理を最後に入れて、「q」とコマンドラインで入力するまでプログラムを終了させないようにするとよいでしょう。

print "Type 'q' to end"
while True:
    inputline = raw_input()
    if inputline == "q":
        break
Page Top

まとめ anchor.png Edit

Selenium+Pythonだとかなり簡単にブラウザが操作できます。 テストの自動化はもちろん、個人でもたとえば、ちょっとした情報をWebサービスなどで見るのにも、トップページ->ログインページ->ログイン後ページ->目当てのページ、という風にしなければならなかったものを自動化できます。

この程度の処理なら10分ほどで書けてしまうので、普段の面倒な処理の効率化にもおすすめです。


Front page   Edit Freeze Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 724, today: 1, yesterday: 0
Princeps date: 2016-12-03 (Sat) 09:06:42
Last-modified: 2016-12-03 (Sat) 12:22:17 (JST) (955d) by njf
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失


NJF