SeleniumBasicで指定したHTML要素を複数取得する方法について紹介します。検索結果など複数表示されている要素をループ処理で取得する方法の紹介となります。複数要素の取得方法はいくつか用意されていますが、1つだけ覚えれば大丈夫です。あとは簡単な応用となります。
また、HTML要素が見つからなかった場合の処理についても簡単に紹介します。
FindElementsByClassで解決する
指定されているclass属性値をFindElementsByClassに指定するとWebElements型でHTML要素を複数取得することができます。WebElements型はList型なので、ループ処理にて1つずつ取得して、Text関数を使うことで文字列を取得できます。
FindElementByとFindElementsByの違いは、単一要素(WebElement)か複数要素(WebElements)を返却するかの違いです。
関数 | 返却型 | 説明 |
---|---|---|
FindElementBy系 | WebElement | 複数要素が見つかっても、最初の要素のみ返却する |
FindElementsBy系 | WebElements | 1つしか要素が見つからなくても、長さ1のWebElementsが返却される |
FindElementsBy系の関数は他にもいくつかありますので、以下に記載します。FindElementsByCssとFindElementsByXPath以外は、ほぼ使い方は一緒です。
関数名 | 説明 |
---|---|
FindElementsById | 指定されたidに一致する要素を検索する。 |
FindElementsByClass | 指定されたCSSクラスに一致する要素を検索する。 |
FindElementsByLinkText | 指定されたリンクテキストに一致する要素を検索する。 |
FindElementsByName | 指定された名前に一致する要素を検索します。 |
FindElementsByPartialLinkText | 与えられたリンクテキストの部分に一致する要素を探す |
FindElementsByTag | 指定されたタグ名に一致する要素を検索する。 |
FindElementsByCss | 指定されたCSSセレクタに一致する要素を検索します。 |
FindElementsByXPath | 指定されたXPathに一致する要素を検索する。 |
サンプルプログラム(コピペでOK)
最安値.comから大手通販モール名一覧を取得するサンプルプログラムコードを記載しました。大手通販モール名が記載されている箇所のclassは”p_dt30″であるため、FindElementsByClassで取得することができます。
Option Explicit
Sub sample()
Dim dr As New Selenium.WebDriver
dr.Start "Chrome"
dr.Get "https://www.saiyasune.com/J4902370542905.html"
Dim els As WebElements
Set els = dr.FindElementsByClass("p_dt30")
Debug.Print "取得要素数:"; els.Count ' 取得要素数: 6
Dim i As Long
For i = 1 To els.Count
Debug.Print els.Item(i).Text() ' 楽天市場 Qoo10 Yahoo!ショッピング amazon.co.jp auPAYマーケット PayPayモール
Next
Stop
End Sub