moxt

Just another Blog site

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を通します

 

Seleniumをインストール

Seleniumは様々な言語用にライブラリが用意されてるようです。
ここではRubyのライブラリを使います。

 

インストールできたら実際にSeleniumを呼び出すスクリプトを書いてみます。

上記を実行すると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’)

スクリーンショットを取得する

 - プログラミング

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

  関連記事

no image
RubyMine(OSX)でGit操作するときのコマンド集

GITを操作系のポップアップを表示したい

logo_og
ReduxのMiddlewareについて理解したいマン

ReduxのMiddlewareの仕組みがよく分からない。 具体的な処理過程を追いかけて理解に至るまでのメモ。 …

no image
SwiftでOSのバージョンが8.0.0以下とそれより大きいヤツで処理を分岐させたい

前置き push通知のデバイストークン取得方法がiOS8から変わりました。 …

images
Chef::Exceptions::ChecksumMismatch:というエラーの対処

今頃になってChefの話。 チェックサムの形式をミスってる可能性がある。 …

no image
Mastodonインスタンス(お一人様用)を作り方メモ

Mastodonは運営の存在を気にせず罵詈雑言吐けるの便利そう。 自分用のインスタンス作ったので、便所の落書きしておく。 …

no image
ディープラーニングが気になる

ダラダラとメモ。 Contents1 …

no image
YosemiteでRubyMineが起動できない

yosemiteからjavaが1.7系になってる。 一方、rubymineは1.6系を想定している。 …

300px-Ruby_logo
nokogiriでスクレイピングするときによく忘れるヤツ集

書くことで記憶を定着させる施術。 class,id以外の属性を指定してタグを探したい …

no image
フロントエンド開発のメモ

最近のフロントエンド開発ではビルドランナーを使うのが常識になってきてるみたいなので。 jspm的なもっと進んだやり方でも良いんだけど、pluginが少ない、文献が少ない、自身の技術力不足、ということでビルドランナーなやり方でやる。 …

large_v
Docker Machineのメモ

随時追記する Contents1 …