Excel-VBAとSeleniumでChrome操作 【コントロールを取得】

「そんなことググれば出てくるだろ?」
と言われたらExcel立ち上げてやればいい。

[clink url=”https://sugiyamatatsuya.com/selenium-vba-googlesearch/”]

という記事書きました。

今回は、Seleniumでコントロールの取得(フォーカス)についてもうちょっと残しておこうと思います。

VBAでChrome操作なので、SeleniumもBasic版です。

FindElementBy~

単体の要素(コントロール)を取得するための関数たちが
ChromeDiriverクラスに用意されています。
全て戻り値はWebElementです。

それが”FindElementBy~”関数、並べるとこんなにあります。

  • FindElementBy
  • FindElementByClass
  • FindElementByCss
  • FindElementById
  • FindElementByLinkText
  • FindElementByName
  • FindElementByPartialLinkText
  • FindElementByTag
  • FindElementByXPath

入力項目を取得したい場合は、IdかNameが設定されていることが多いので、これで要素を指定して値入力とか値取得します。

Dim driver as New ChromeDriver
・・・
‘Idで検索
driver.FindElementById(“id”)

‘Nameで検索
driver.FindElementByName(“name”)

Classだけ設定されていた場合は

‘classで検索
driver.FindElementById(“class”)

‘classで検索
driver.FindElementByCss(“input.class”)
‘id検索をcssセレクタで
driver.FindElementByCss(“input#id”)

ByCssだとcssセレクタが使えるので、idだろうとclassだろうと、階層で絞り込みだろうと使えます。

リンク要素を指定する場合は
こんなのも使えます。

‘リンク文字(完全一致)で検索
driver.FindElementByLinkText(“ホーム”)

‘リンク文字(部分一致)で検索
driver.FindElementByPartialLinkText(“ーム”)

タグ検索、XPath検索もあるけど、使わなかったのでパス。
タグでページ内に1つってh1タグぐらいではないかと思うけど?

FindElementsBy~

先ほどの関数が要素を1つだけ取得する関数でした。
該当する要素が複数存在するときや、
同じような要素を繰り返し処理したい時はこちらが良いかな。

FindElementBy~関数と同じだけ種類あります。
戻り値はWebElementsと複数形なので、要素に対して操作をする場合はforループで回すか、Itemプロパティのindex指定で使います。

引数は単体要素取得の関数と同じなので、割愛。

実際に使ってみるとこんな感じに

Dim elements as WebElements

‘表示している画面の<a>タグ要素を全取得
Set elements = driver.findElementsByTag(“a”)

‘ループで回して
For i=1 To elements.Count
‘リンクURLを収集する
elements.Item(i).Attribute(“href”)
Next

画面内にあるリンク要素を全部集めて、
リンク先URLを収集するコードだとこんな感じです。

Attribute(“”)関数で<a>タグに設定されているhref属性の設定値を取り出しています。
VBAなんでワークシートに書き出していくとか、
収集用の変数に格納するなどして使えますね。

 

今回はWeb要素をFindElementBy~やFindElementsBy~で指定してみました。
IdとかNameくらいは一意になっていて欲しいけど、
そうもいかないから、工夫は必要ですね。

コメント

  1. An outstanding share! I have just forwarded this onto a
    friend who was conducting a little homework on this. And he in fact
    bought me dinner due to the fact that I discovered it for him…
    lol. So let me reword this…. Thank YOU for the meal!!
    But yeah, thanx for spending time to talk about this issue here
    on your website.

  2. […] した。同じHP様です。XPathとClassのパスを使うためです。Excel-VBAとSeleniumでChrome操作 【コントロールを取得】(引用元:LogicalCreation様)書かれていない内容で追加したものは、driver.Startこれぐ […]