「そんなことググれば出てくるだろ?」
と言われたら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くらいは一意になっていて欲しいけど、
そうもいかないから、工夫は必要ですね。
コメント
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.
[…] した。同じHP様です。XPathとClassのパスを使うためです。Excel-VBAとSeleniumでChrome操作 【コントロールを取得】(引用元:LogicalCreation様)書かれていない内容で追加したものは、driver.Startこれぐ […]