SeleniumBasicのWeb要素取得例を紹介します。examplesに紹介されている構文は、FindElementByLinkTextやFindElementsByLinkTextを用いた要素検索方法が多く紹介されています。
- 利用目的は業務効率化です。(テスト自動化ではありません)
- ブラウザはGoogleChromeが対象です。(EdgeやFirefoxは対象外)
- 原文のVBAでは現在エラー発生する場合が多いため、修正を加えてます。
Examples.xlsmの保存場所(ここをクリック)
Examples.xlsmが保存されている場所は、SeleniumBasicがインストールされているサブフォルダ内になります。SeleniumBasicのインストール完了時に保存フォルダを確認することができます。ただ、大体以下フォルダのどちらかにファイル保存されています。
- C:\Program Files\Seleniumbasic\Examples\Excel
- shell:Local AppData\SeleniumBasic\Examples\Excel
FindElementByLinkText
ホームページ上のリンクテキストを検索し、Web要素を取得する方法の紹介です。
Private Sub Find_By_LinkText()
Dim Assert As New Selenium.Assert
Dim drv As New ChromeDriver
drv.Get "https://ja.wikipedia.org/wiki/Main_Page"
drv.FindElementByLinkText("ノート").Click
Assert.Matches "ノート:", drv.title
Stop
drv.Quit
End Sub
- 5行目
-
FindElementByLinkTextにてWeb要素(リンクテキスト)を取得。
- 6行目
-
取得したオブジェクト名が予想値と合致しているか確認(部分一致検索)
FindElementByXPath タグ要素検索(完全一致検索)
Private Sub Find_By_Value()
Dim Assert As New Selenium.Assert
Dim drv As New ChromeDriver
drv.Get "https://www.google.co.jp"
Dim ele As WebElement
Set ele = drv.FindElementByXPath("//input[@value='Google 検索']")
Assert.Equals "Google 検索", ele.Value
Stop
drv.Quit
End Sub
- 6行目
-
FindElementByXPathでWeb要素取得。Chromeから対象要素のXPath要素を取得した場合、以下が取得値になります。
/html/body/div[1]/div[3]/form/div[1]/div[1]/div[4]/center/input[1]
このままXPath名を取得しても良いのですが、該当箇所のinputタグを見るとvalue値があり、このvalue値でWeb要素を検索することも可能です。
検索表現は、//input[@value='Google 検索'] です。"//"を入力することで、XPath要素を省略できます。
//<タグ名>[@value=‘<検索値>‘]
FindElementByXPath タグ要素検索(部分一致検索)
ウィキペディア(日本語版)のメインページにあるリンクテキストを取得して、リスト化してからExcelシートに出力します。
Private Sub Find_By_Partial_Value()
Dim Assert As New Selenium.Assert
Dim drv As New ChromeDriver
drv.Get "https://www.google.co.jp"
Dim ele As WebElement
Set ele = drv.FindElementByXPath("//input[contains(@value,'検索')]")
Assert.Matches "検索", ele.Value
Stop
drv.Quit
End Sub
- 6行目
-
前項では属性ノードのvalue値('Google 検索')を完全一致で検索しましたが、上記表現で部分一致検索ができます。表現は //input[contains(@value,'検索')] となり、containsを入力することで、部分一致検索が可能になります。
- 7行目
-
Assertも部分一致で表現しています。前項は、完全一致で表現しています。
//<タグ名>[contains(@value,’<検索値>‘)]
FindElementsByXPath テキスト検索
ウィキペディアのメインページ内でXPath内で'ウィキペディア'という文字列が含まれている要素を全て取得し、イミディエイトウィンドウに出力する構文を紹介します。
Private Sub Find_By_Text()
Dim drv As New ChromeDriver
drv.Get "https://ja.wikipedia.org/wiki/Main_Page"
Dim ele As WebElement, eles As WebElements
Set eles = drv.FindElementsByXPath("//*[contains(text(),'ウィキペディア')]")
If eles.count > 0 Then
Debug.Print "Text is present"
For Each ele In eles
Debug.Print ele.Value
Next ele
Else
Debug.Print "Text is not present"
End If
drv.Quit
End Sub
要素の取得は、5行目で設定しています。複数の要素を取得するため、FindElementsByXPathを使用しています。全ての要素を検索するため、要素指定の箇所は、'*'を指定しています。要素内のテキストを取得する場合、text()というテキストノードを用います。表現は //*[contains(text(),'ウィキペディア')] となります。
//*[contains(text(),'ウィキペディア')]
JavaScriptで要素存在確認
JavaScriptを用いて、HTMLのbodyに'Google'の文字列が含まれているか確認するコードを紹介します。
Private Sub Text_Exists()
Const JS_HAS_TEXT = "return document.body.textContent.indexOf(arguments[0]) > -1"
Dim drv As New ChromeDriver
drv.Get "https://www.google.co.jp"
If drv.ExecuteScript(JS_HAS_TEXT, "Google") Then
Debug.Print "Text is present"
Else
Debug.Print "Text is not present"
End If
drv.Quit
End Sub
- 2行目
-
JavaScriptの構文設定しています。
- 5行目
-
ExecuteScriptメソッドでJavaScriptを呼出し、True/False判定をします。