連載
» 2014年08月21日 18時00分 公開

テストエビデンス取得自動化の秘技(前編):Selenium VBAを使って自動でブラウザーを操作してスクショをExcelに張り付けてみた (4/4)

[薬師寺国安,PROJECT KySS]
前のページへ 1|2|3|4       

WebサイトをスクショしてExcel上に張り付ける

 先ほど、Selenium VBAで取得したコードを使って、VBAを記述することも可能だが、先ほどのものはあくまでも、Selenium VBAの使い方としての一例のコードなので、ここでは先ほど取得したVBAのコードは利用しない。

 より汎用性があるように、例としてフォームを使ったスクショの撮り方と、張り付け方法を解説する。適宜アレンジして使ってほしい。

 Excelフォームの基本について知りたい方は記事「Excelに入力フォームを作成、コントロールを追加、表示、ボタンでイベント実行」を参照してほしい。

「SeleniumWrapper Type Libray」の参照設定

 ここでは「SeleniumWrapper.WebDriver」を使用するため、「SeleniumWrapper Type Libray」を参照しておく必要がある。

 VBE(Visual Basic Editor)のメニューから、[ツール]→[参照設定]と選択し、表示される「参照設定」画面から、「SeleniumWrapper Type Library」にチェックを付ける(図20)。そして「OK」をクリックするだけだ。

図20 参照設定から「SeleniumWrapper Type Library」にチェックを付ける

テスト実行用のフォームの作成

 まず、Excelメニューから[挿入]→[図形]と選択して、「角丸四角形」を配置し、テキストに「フォームの表示と指定しておく(図21)。

図21 「フォームの表示」ボタンを配置した

 次に、Excelメニューから[開発]→[Visual Basic]と選択して、VBE(Visual Basic Editor)を起動する。

 メニューから、[挿入]→[ユーザーフォーム]を選択する。するとフォームの画面が表示される。このフォームを選択して、プロパティの「Caption」に「画面キャプチャを撮る」と指定する。すると、フォームのタイトルが「画面キャプチャを撮る」に変わる。

 次に、フォーム上にツールボックスから「リストボックス」を1個配置する。プロパティの「オブジェクト名」はデフォルトの「ListBox1」のままにしておく。

 リストボックス内に表示されるフォントの種類やサイズは、プロパティの「Font」から設定が可能だ。もちろん読者の好きな書体や文字サイズに設定してもらって構わない。

 全て設定したのが図22だ。

図22 フォーム上にコントロールを配置した

UserFormがActivateになったときの処理

 プロジェクト内のUserForm1を選択し、マウスの右クリックで表示されるメニューから、「コードの表示」を選択する。コードエディター画面が表示されるので、この中にコードを書いていく。

 まずUserFormがActivateになったときに、リスト2のコードを記述する。

 UserFormがActivateになったときのコードのひな型は、図23の方法で作成できる。

図23 UserFormのActivateを選択した

 左のドロップダウンリストから「UserForm」を選択し、右のドロップダウンリストから「Activate」を選択すると、下記のひな型が作成される。

  Private Sub UserForm_Activate()
    
  End Sub

 この中にリスト2のようにコードを記述する。

Private Sub UserForm_Activate()
 ListBox1.AddItem ("テキスト検索.html")
  ListBox1.AddItem ("円を描く.html")
  ListBox1.AddItem ("銀行.html")
  ListBox1.AddItem ("道後温泉ルート検索.html")
End Sub
リスト2 UserFormがActivateになった時の処理

 これは、ListBoxのAddItemメソッドで各種「html」ファイルの名前を追加していくものだ。

リストボックス選択時の処理

 次に、リスト2で追加された「html」が選択されたときの処理になる。この場合は、図23の左ドロップダウンリストボックスから「ListBox1」を選択し、右のドロップダウンリストボックスから「Change」を選択し、作成されたひな型の中に、リスト3のコードを記述する。

Private Sub ListBox1_Change()
  Dim selenium As New SeleniumWrapper.WebDriver
  selenium.Start "firefox", "http://2008r2.projectkyss.net/selenium/" & ListBox1.Text
  selenium.Open "http://2008r2.projectkyss.net/selenium/" & ListBox1.Text
  selenium.Wait 2000
  selenium.getScreenshot().Copy
  selenium.stop
  Sheets(1).Range("A10").PasteSpecial
End Sub
リスト3 ListBox1から項目が選択されたときの処理

 このChangeイベント内では、先ほど設定したSeleniumWrapper.WebDriverを使用する。

 まず1行目で、新しいSeleniumWrapper.WebDriverのインスタンスである、seleniumオブジェクトを作成する。

 2行目では、「Start」メソッドの引数に、Webブラウザーとして「Firefox」を指定し、例として筆者のサーバーのURLである、「http://2008r2.projectkyss.net」の「selenium」というフォルダーと、ListBox1より選択された項目名を連結して、第2引数に指定している。

 筆者のサーバーにはあらかじめ、リスト2で追加した「html」ファイルをアップロードしておいた。

 3行目の「Open」メソッドでListBoxより選択された「html」ファイルを開いている。4行目では、完全に「html」ファイルを読み取り表示するまで、「Wait」メソッドで2000ミリ秒(2秒)待機している。

 その後5行目で、「getScreenshot().Copy」メソッドで読み込んだWebサイトのスクショを撮る。6行目でインスタンスを停止し、7行目で撮ったスクショを「A10」セルに「PasteSpecial」メソッドで張り付けている。

フォームを開くときの処理

 最後に、[挿入]→[標準モジュール]と選択し、Module1を追加し、その中に、リスト4のコードを記述する。

Option Explicit
Sub フォームを開く()
  UserForm1.Show vbModeless
End Sub
リスト4 フォームを開くコード

 UserForm1をモードレス表示で開く。「モードレス表示」とは、通常フォームが表示された場合は、Excelの操作が不可になるが、モードレスでフォームを開いた場合は、フォームが開いていても、Excelの操作が可能になる。

 このリスト4のマクロを図21の「フォームを開く」ボタンと関連付け実行した結果が、図24だ。

図24 「フォームを開く」ボタンでフォームが開いた

 図24でリストボックスから「html」ファイルを選択すると、Firefoxで該当するWebサイトが表示される。スクショが自動的に取られ、「A10」のセルに、サイズの大きいまま張り付けられる。図25では、筆者自身が画像を選択してサイズを小さくし、任意の位置にそろえて配置した。

図25 リストボックスから「銀行.html」と「道後温泉ルート検索.html」を指定して開いた

Selenium VBAでいろいろ試してみよう

 以上のように、Selenium VBAをインストールしておくと、「SeleniumWrapper」の使用が可能になり、いちいち手動でスクショを撮ってExcel上に張り付ける手間が省ける。

 今回はフォームを作って、筆者自身が作った「html」のページをサーバーにアップして、それを読み込ませているが、クライアントから引き受けた仕事の場合もこれと同じことだと思う。動作を確認したいページのURLをVBAの中に記述して、リストボックスで一覧表示させ、そこから選択することでスクショを撮って、Excel上に張り付ければいい。

 今回のSelenium VBAでは、Webのブラウジングを自動記録して再現してくれる、ということを理解しておいていただくといいだろう。ブラウジングしたプロセスはVBAとして書き出されるため、Excel上で管理できる。Excel上で管理ができれば、作成したWebページの一連の流れを、ExcelのVBAで再現して、クライアントに見せることも可能になる。そういった意味でも、大変に面白いツールなのではないだろうか。

 また今回使っている主なコマンドは「Open」「clickAndWait」の2種類だが、もちろんテキスト入力やドロップダウンの選択も可能なので、各自調べて今回の内容を基にアレンジして使ってみてほしい。特に以下のブログが参考になると思う。

次回は、スクショ取得自動化に役立つTipsを紹介

 なお今回、スクショを撮ってExcel上に張り付けたが、実際に業務で使うにはそれだけでは足りないだろう。例えば、画像が大き過ぎれば画像を縮小させて全て同じサイズにする必要があったり、マクロを自動実行させる時間を指定したりしたい場合もあるはずだ。そこで後編では、スクショ取得自動化に役立つTipsをいくつか紹介するので、楽しみにしてほしい。

著者プロフィール

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。

Microsoft MVP for Development Platforms - Client App Dev(Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。