こんにちは、blueです。
前回はTinySeleniumVBAの導入方法について説明しました。
今回はTinySeleniumVBAに搭載されている各種メソッドについて説明します。
SeleniumBasicを利用されたことのある方はメソッド名が違うだけなので簡単に使用できると思いますが、初めての方向けにわかりやすく説明するようにします。
VBAを使ったものではありませんが、Seleniumを勉強する為の基本的な書籍です。WebDriverについても説明がありますのでコードを書く際の参考になります。
要素の取得
条件に合う要素の取得(FindElementメソッド)
条件にマッチした要素を取得する場合に使用します。
書き方は以下2通りがあります。
- FindElement(By.ClassName,●●●)
- FindElement(By.CssSelector, ●●●)
- FindElement(By.ID, ●●●)
- FindElement(By.Name, ●●●)
- FindElement(By.TagName, ●●●)
- FindElement(By.XPath, ●●●)
- FindElementByClassName(●●●)
- FindElementByCssSelector(●●●)
- FindElementByID(●●●)
- FindElementByName(●●●)
- FindElementByTagName(●●●)
- FindElementByXPath(●●●)
どちらを使ってもOKです(SeleniumBasicを使われたことがある方は後者、Pythonなどは前者がわかりやすいと思います)
CssSelectorやXPathは以下の様に取得します。
1 Chromeの右上のボタンをクリックする
2「その他のツール」をクリックする
3「デベロッパーツール」をクリックする
4「要素の取得」ボタンをクリックする
5 取得したい場所をマウスでクリックする
6「デベロッパーツール」の青く塗りつぶされた場所を右クリックする
7Copy→Copy Selector(Copy XPath)で取得する
あとはFindElementの第二引数にコピーすればOKです。文字列なので””で囲うことを忘れないようにしてください。
ClassNameやID, Name, TagNameはHTMLコードを利用して取得します。
HTMLについては以下で詳しく説明していますのでご参考下さい。
HTMLが理解できるようになればタグなどから情報を取得できるようになります。
条件に合うすべての要素の取得(FindElementsメソッド)
条件にマッチしたすべての要素を取得する場合に使用します。
メソッドは以下の通りです。
- FindElements(By.ClassName,●●●)
- FindElement(By.Name, ●●●)
- FindElement(By.TagName, ●●●)
IDやCssSelector, XPathは性質上ここでは使わないのでメインはこの3つになります。
以下ではTagがTableであるすべての要素を取得しています。
Driver.FindElements(By.TagName, "table")
FindElementsは条件に合う情報をまとめて取得して、その中の要素を検索するときによく使います。
Excel VBAでいうWorksheetsコレクションとRangeオブジェクトのような関係です。
一意な情報を取得するFindElementメソッドより高度な取得方法になります。
要素の内容の取得
GetText, GetValueメソッド
要素内に表示されている文字や値を取得する際はGetTextやGetValueメソッドを使います。
メソッドは以下の通りです。
- Driver..FindElement(By.●●●, 〇〇〇).GetText
- Driver..FindElement(By.●●●, 〇〇〇).GetValue
どちらが使えるかは以下で確認することができます。
1 以下の様に要素を選択後、「プロパティ」を選択する。
TextやValueの項目に書かれている内容が取得できる内容となります。
右上の「Gmail」と書かれたテキストはtextとして記載されていることがわかります。
一方「Google検索」はvalueとして記載されていることがわかります。
このように要素内のテキストや値の取得は2つのメソッドを使い分ける必要があります。
要素の操作
Clickメソッド
ボタンなどを押す際はClickメソッドを使います。
メソッドは以下の通りです。
- Driver..FindElement(By.●●●, 〇〇〇).Click
ユーザー操作によってプログラムが動く仕組みはイベントと呼ばれ、JavaScriptに記載されています。
JavaScriptについての記事は以下をご参考ください。
SetValueメソッド
ブラウザ上のボックスなどにテキストを入力する際はSetValueメソッドを使用します。
メソッドは以下の通りです。
- Driver..FindElement(By.●●●, 〇〇〇).SetValue “テキスト”
SetValueメソッドの引数に入力したい文字列を記載します。
ウィンドウの操作
ブラウザを立ち上げる
ブラウザを立ち上げるにはOpenBrowserメソッドを使います。
- Driver.OpenBrowser
URLに移動する
指定URLに移動する際はNavigateメソッドを使います。
- Driver.Navigate “URL”
Navigateメソッドの引数にURLを記載すればOKです。
ブラウザを閉じる
ブラウザを閉じるにはCloseBrowserメソッドやShutDownメソッドを使います。
- Driver.CloseBrowser
- Driver.Shutdown
CloseBrowserメソッドは今操作を行っているブラウザ、ShutDownメソッドはすべてのブラウザを閉じます。
ページ上のアラート(警告)画面に移行
ページ上に表示されるアラートを操作するには以下のメソッドを使用します。
アラート操作は簡易的なメソッドとしては登録されていない為、コマンド処理をするExecuteメソッドを使用することとなります。
- Driver.Execute Driver.CMD_W3C_ACCEPT_ALERT
- Driver.Execute Driver.CMD_W3C_DISMISS_ALLERT
- Driver.Execute Driver.CMD_W3C_GET_ALERT_TEXT
- Driver.Execute Driver.CMD_W3C_SET_ALERT_Value,parameters
ExecuteメソッドはWebDriverにコマンド(HTTPリクエスト)を送るメソッドになります。
引数にはドライバーのコマンド、パラメーターを指定します。
ACCEPT_ALERTは警告画面で「OK」をクリックする操作、DISMISS_ALERTは「キャンセル」や「いいえ」をクリックする操作になります。
GET_ALERT_TEXTは警告画面に表示されるテキストを取得するメソッドになります。
SET_ALERT_Valueは警告画面に表示されるボックスにテキストを入力するメソッドになります。
このコマンドのみ第二引数にパラメーターを指定する必要があります。このパラメーターは辞書型である必要があるので次の様に記載します。
以下はAlert画面でテキストに「tama」と記載するコードです。
Dim data As New Dictionary
data.Add "text", "tama"
Driver.Execute Driver.CMD_W3C_SET_ALERT_VALUE, data
次のページに進む、前のページに戻る
ブラウザの「進む」、「戻る」ボタンを使用する際は以下のメソッドを使用します。
この操作も簡易的なメソッドとしては登録されていない為、コマンド処理をするExecuteメソッドを使用することとなります。
- Driver.Execute Driver.CMD_GO_FORWARD
- Driver.Execute Driver.CMD_GO_BACK
現在のURLを取得する、タイトルを取得する
現在対象となっている画面のURL、タイトルを取得する際は以下のメソッドを使用します。
この操作も簡易的なメソッドとしては登録されていない為、コマンド処理をするExecuteメソッドを使用することとなります。
- Driver.Execute Driver.CMD_GET_CURRENT_URL
- Driver.Execute Driver.CMD_GET_TITLE
このメソッドは対象画面がわからなくなった場合や、新しいウィンドウが開いた場合によく使います。
画面を最大化する
対象となっている画面を最大化する際は以下のメソッドを使用します。
この操作も簡易的なメソッドとしては登録されていない為、コマンド処理をするExecuteメソッドを使用することとなります。
- Driver.Execute Driver.CMD_W3C_MAXIMIZE_WINDOW
その他
JavaScriptの実行
TinySeleniumにはJavaScriptを実行する為のメソッドが存在します。
- Driver.ExecuteScript “JavaScriptのコード”
このメソッドが非常に有用で、使いこなせればTinySeleniumVBA単独ではできないような処理をJavaScriptとして実行することができます。
以下はSeleniumBasic向けの記事ですが記載方法は同じです。
活用範囲が広がるので是非ご参考ください。
待機処理
TinySeleniumVBAにはプログラムを待機する為のメソッドが存在しません。
その為一般的にはWindows APIのSleep関数を使うこととなります。
Sleep関数の導入方法については以下を参照ください。
もし、SeleniumBasicやSeleniumVBAのようなWaitメソッドを使用したい場合は@yajuさんのコードが役に立ちます。
サイトのコードを以下の様にWebDriverのクラスモジュールに入れてあげれば使えるようになります。
まとめ
今回はTinySeleniumVBAに搭載されている各種メソッドについて説明しました。
TinySeleniumVBAに搭載されているメソッドは多くはないですが、簡単な操作は行うことができます。一方SeleniumBasicには多くのメソッドが用意されています。以下の記事でも紹介していますのでこちらの記事も是非合わせて読んでみてください。
VBAを使ったものではありませんが、Seleniumを勉強する為の基本的な書籍です。WebDriverについても説明がありますのでコードを書く際の参考になります。
コメント