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

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

という記事書きました。

今回は、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くらいは一意になっていて欲しいけど、
そうもいかないから、工夫は必要ですね。

Related post

  1. 色々なサービスを連携してくれるIFTTT(イフト)知ってますか?

  2. Webページを自動操作してみた

  3. SeleniumとVBAでChromeを操作する

  4. Excel-VBAとSeleniumでChrome操作 【キー操作】

  5. 質問の答えが返ってきません

  6. SeleniumとVBAでググってみる

  7. ウェブサイトのSSL化進んでいますか?

  8. ZOOMでクロマキー合成使って差別化を狙う

Comment

  1. No comments yet.

  1. No trackbacks yet.