SeleniumeBasicでWeb要素の取得 usage_find

リファレンス

 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判定をします。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAを中心とした自動化、効率化の手法を紹介しています。現在は、SeleniumBasicのexamplesを紹介しています。その内、SeleniumBasic以外の手法も掲載したいと思っております。

目次