SeleniumでChromeを自動操作したい
2015/07/03
Seleniumという便利なソフトウェアがあります。
これはブラウザ上の操作をスクリプト化し自動化することを目的としています。
操作の自動化はどんな場面で使われるのでしょうか?
例えば、テスト。現代のソフトウェア開発では欠かせない存在になりつつありますよね。
一口にテストといえど、さまざまなテストがあります。
中でも「ブラウザやアプリのUI上で仕様通りの挙動になってますか?」というユーザに届けたい体験を確認するためのテストはE2Eテストといいます。
このテストは実際に人がPCやスマホをイジって仕様通りか確認する必要があります。
そのため、他のテストと比較して時間・金銭コストが高くなります。
Seleniumを使えばE2Eテストを自動化できます。
自動化することができれば、テストするためにたくさんの人を雇わなくてよくなりますし、コードの変更が発生したタイミングで自動テストを実行すれば効率的に問題を発見できます。
もちろん、UIが変更されるたびにテストケースをメンテナンスするコストが必要ですが。。
このように、Seleniumは高尚な目的で作られたモノです。
しかし、単にブラウザを自動操作できるモノと考えてみてください。
下世話で怪しげな用途が次々と思い浮かびますよね。
私の場合、エロサイトの情報収集に使えるなと思いました。
テストなんかどうでもいいのです。
Chrome Driverを導入
下記からChrome Driverを入手します。
Seleniumを介してChromeを操作するために必要なものです。
https://code.google.com/p/selenium/wiki/ChromeDriver
入手したらchrom_driverの実行ファイルにpathを通します
1 2 |
# For ChromeDriver export PATH="$HOME/["path_to_chromedriver"]:$PATH" |
Seleniumをインストール
Seleniumは様々な言語用にライブラリが用意されてるようです。
ここではRubyのライブラリを使います。
1 |
gem install selenium-webdriver |
インストールできたら実際にSeleniumを呼び出すスクリプトを書いてみます。
1 2 3 4 5 6 7 |
require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome driver.navigate.to 'http://google.com' sleep 3 driver.quit |
上記を実行するとchromeが立ち上がりgoogleが表示された後にchromeが終了すると思います。
具体的なコードはアレなんですが、SeleniumのAPIを駆使すればたいていのことができます。
あわせて読みたい
具体的な使用例:
SeleniumでChromeを自動操作して画像をダウンロードするヤツ
この辺は参考になるので読んだりした方が良い。
https://github.com/SeleniumHQ/selenium/wiki/Ruby-Bindings
http://qiita.com/tomerun/items/9cb81d7a98150ff22f53
よく使うコマンドをメモ。
- find_element
指定されたclass,id,タグ名に該当するDOMを1つ取得する。
find_elementsにすると複数取得できる。
find_elementの返り値に対してfind_elementを行うと、はじめに取得したDOMの中を対象に検索してくれる。
driver.find_element(:class, ‘XXX’)
driver.find_element(:id, ‘XXX’)
driver.find_element(:tag_name, ‘object’)
- switch_to.frame XXX
指定されたiframeにフォーカスをあてる。
あるサイトの広告(iframe)をクリックしたいな、といった場合は
driver.switch_to.frame driver.find_elements(:tag_name, ‘iframe’)[XXX]
これでiframeにフォーカスがあたった。
この状態でdriver_find_elementを実行すると、このiframe内を対象に検索してくれる。
広告を表示している部分が
みたいな感じだったら、driver.find_element(:id, ‘hogehuga’).clickとやればクリックできそう。
ドラッグアンドドロップやファイルのアップロードなんかも自動化できる。
https://seleniumhq.github.io/selenium/docs/api/rb/Selenium/WebDriver/ActionBuilder.html
- save_screenshot(‘file_name.png’)
スクリーンショットを取得する
336px
336px
関連記事
-
-
iOSアプリの設計ってどうやるの?
Vi …
-
-
開発で詰まったときにググるキーワード
そも …
-
-
AndroidのHandlerって何?
Ha …
-
-
フロントエンド開発のメモ
最近 …
-
-
Docker導入したらどうするの?
Do …