見出し画像

【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と添え字を使い分けよう

以上!

何か質問があればどうぞ~

いいなと思ったら応援しよう!