【SleniumVBA】要素のクラス名をみつけた!あれっ!ClassNameで操作できない?それならCssSelectorを使ってみよう
■FindElementClassNameで操作できない?
SeleniumVBAを使っていると、IDやXpathだと操作できないことがありますよね。
本当はIDやXpathで操作する方法が楽ですが、IDがランダムに変わってしまったり、Xpathが無駄に長く、可読性が悪くなってしまう場合がある。
そんなときはClassNameで操作しよう。
ClassNameは複数存在することがあるので「For each」などを使って目的の要素を探す必要がある。
ただし!
【aaa】や【aaa-bbb-ccc】のように繋がっている場合はFindElementClassNameが使えるが
【aaa bbb ccc】のように半角スペースが入っている場合はFindElementClassNameが使えない!
そういうときはFindElement(s)CssSelectorを使おう。
通常のClassNameとCssSelectorの使い方は同じだ!
以下で実際に見ていこう
■使い方
■通常のClassNameでのFindElement(s)使用例
■FindElement(ClassName:"aaa")
driver.FindElementByClassName("aaa").Click
■FindElements(className:"aaa")
For Each classObj In driver.FindElementsByClassName("aaa")
If classObj.GetText = "あいうえお" Then
Call act_DBC(actions,classObj)
call act_ShiftClick(Keys,actions,classObj)
Call act_SendKey_Enter(Keys,actions)
Exit For
End If
Next
■CssSelectorの使用例
ClassName("aaa bbb ccc")
■FindElement("aaa bbb ccc")
Dim classObj As seleniumVBA.WebElement
Set classObj = driver.FindElementByCssSelector(".aaa.bbb.ccc")
If classObj.GetText = "あいうえお" Then
~~処理~~
End If
■FindElements("aaa bbb ccc")
Dim classObj As seleniumVBA.WebElement
Dim actions As seleniumVBA.WebActionChain
Dim Keys As seleniumVBA.WebKeyboard
For Each classObj In driver.FindElementsByCssSelector(".aaa.bbb.ccc")
If classObj.GetText = "あいうえお" Then
Call act_DBC(actions,classObj)
call act_ShiftClick(Keys,actions,classObj)
Call act_SendKey_Enter(Keys,actions)
Exit For
End If
Next
’添え字を指定して特定のエレメントを操作することも可能
driver.FindElementsByCssSelector(".aaa.bbb.ccc")(添え字)
driver.FindElementsByCssSelector(".aaa.bbb.ccc")(0)
driver.FindElementsByCssSelector(".aaa.bbb.ccc")(1)
driver.FindElementsByCssSelector(".aaa.bbb.ccc")(2)
・
・
・
必要に応じてFor eachと添え字を使い分けよう
以上!
何か質問があればどうぞ~