2015/01/20

ライブラリ:selenium

Python の「 selenium 」というライブラリをご紹介します。

import selenium

selenium ライブラリは、同名の Selenium というブラウザ操作用のツールがあるのですが、その Python バインディング、いわゆる「 Selenium の Python 版」です。

selenium ライブラリを使うことで Firefox などのブラウザを Python からかんたんに操作できるようになります。

以下、使い方をかんたんに見ていきます。まずはインストールから。


インストール

pip が入っていれば、他のライブラリと同じように pip install でインストールすることができます。
pip install selenium

Mac 環境だとこの形でインストールできますが、 Windows 環境では少し異なるかもしれません。 Python 以外の情報も含む Selenium 全体の公式ダウンロードページはこちらになります。
- Downloads - Selenium


使い方

基本的な使い方を見ていきます。

最小単位は次のような形になるでしょうか。
# ライブラリの読み込み
from selenium import webdriver

# ドライバの生成
# 問題なければFirefoxブラウザが自動的に起動する
driver = webdriver.Firefox()

# Firefox上でURLを指定してGETリクエスト
driver.get("http://www.google.co.jp/")

# ドライバを閉じる
# 問題なければFirefoxも終了する
driver.close()

ブラウザを開いて、特定のページを開いて、ブラウザを閉じる、という一連の流れがこれだけのコードで実現できます。

ちなみに、 selenium ではブラウザを操作するインスタンスを「ドライバ」と読んでいます。デフォルトで使えるのは Firefox ですが、Firefox のほかにも Chrome Safari PhantomJS IE など主要なブラウザを操作するドライバがサードパーティ製で公開されているので、適宜インストールすれば使うことができるようになります。

上の例ではページを開いて閉じただけであまりおもしろみがないので、キーボード操作をするような例についても見てみたいと思います。

こちらは公式ドキュメントの例にコメントをつけたものになります。
# ライブラリの読み込み
# Keys はキーボード操作に相当するモジュール
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# ドライバの生成
# Firefoxを起動させる
driver = webdriver.Firefox()

# FirefoxでGETリクエスト
driver.get("http://www.python.org")

# 期待どおりのページが開かれたことを確認するアサーション
assert "Python" in driver.title

# ページ内のHTML要素をname属性を使って取得
# name属性の値が q である要素が選択される
elem = driver.find_element_by_name("q")

# 選択した要素に対してキーボード入力
# selenium という文字を入力し、リターンキーを押す
elem.send_keys("selenium")
elem.send_keys(Keys.RETURN)

# 期待どおりのページが開かれたことを確認するアサーション
assert "Google" in driver.title

# ドライバを閉じる
# Firefoxも終了する
driver.close()

コードの各文の意味合いはコメントに書いてあるとおりです。

このコードを走らせてみると、ブラウザがひとりでにウニョウニョ動く様子を確認することができます。

以上です。


一見こむずかしく思えますが、 Python らしいシンプルでわかりやすいインターフェイスになっているので意外とかんたんに使えます。

この他にも、ページ内のテキストを取得したり、マウスを操作したり、画面キャプチャを撮ったりと、通常ウェブブラウジングを行う上での基本操作が意外とシンプルなコードでできるようになっているので、興味がある方はぜひ公式ドキュメントをのぞいてみてください。

ちなみに、「ヘッドレスブラウザ」と呼ばれる PhantomJS などをインストールすればブラウザウィンドウを開かずに各種処理を行うことも可能となります。

もひとつちなみに、 Python バインディングではないおおもとの Selenium の方には、数多くのさまざまな「 Selenium ◯◯」が存在していて、 Selenium シリーズのようになっています。現在最も広く使われるものは次の2つになるでしょうか。

  • Selenium IDE
  • Selenium WebDriver


前者のIDEというのはFirefoxのプラグインとして動くもの、 WebDriverは今回ご紹介したPythonバインディングなどのようなコードによる操作を可能とするものです。


参考
Python Selenium ライブラリの公式ページ
- Selenium with Python — Selenium Python Bindings公式ドキュメント

同じくPyPIのページ
- selenium - Python Package Index

Seleniumのページ
- Selenium - Web Browser Automation

英語Wikipediaのページ
- Selenium (software) - Wikipedia

Seleniumの歴史も含めて解説されているページです。わかりやすいです。
- Selenium何とかっていうツールがやたら色々あるのはどういうわけなのか | 品質向上ブログ

0 件のコメント: