Selenium(Edge/Chrome)

Selenium「Edge/Chromeでid要素やName要素がなくてもボタンクリックをする」【エクセルマクロ】

前回id要素やname要素があれば、VBAでWebページをクリックする動作は簡単とお伝えしました。
それでは、Webページにid要素やName要素がない場合はどうすればよいでしょうか。

id要素がない?for eachで要素チェック

id要素やname要素がない場合は以下の形でfor Eachでクリックをします。

VBAコードサンプル

Dim ClassButton As Object
 
'■指定のクラス属性(今回は★★★)をチェック
For Each ClassButton In driver.FindElemenstByClass("★★★")
    '指定クラスの値が「検索」なら、ボタンをクリックする
    If ClassButton.Value = "ログイン" Then
        ClassButton.Click
        Exit For
    End If
Next

Twitterログインサンプル

★★★部分はTwitterのログイン画面の場合は以下です。

<span class="css-901oao css-16my406 r-1tl8opc r-ad9z0x r-bcqeeo r-qvutc0">
ログイン
</span>

上記の場合、「css-901oao css-16my406 r-1tl8opc r-ad9z0x r-bcqeeo r-qvutc0」を含んだclass要素を全てチェックします。Twitterログインサンプルの場合、Webページで表示されている文言が「ログイン」(Valueがログイン)であれば、該当のclass要素をVBAがクリックします。

Twitterログイン画面での「css-901oao css-16my406 r-1tl8opc r-ad9z0x r-bcqeeo r-qvutc0」のclass要素は
上から4番目の為、下記の形でも問題ありません。

'■要素の4番目なので添え字は(4)
driver.FindElemenstByClass(“css-901oao css-16my406 r-1tl8opc r-ad9z0x r-bcqeeo r-qvutc0”)(4).Click

 

htmlの表記が、可変の場合は添え字での処理ができません。
For Eachで一つづつチェックしましょう。

 

class要素もない場合は、タグで検索

aタグなどのURLリンクがある場合は、class要素はありません。
その場合、FindElementByTagで、指定タグを全てチェックしましょう。

VBAコードサンプル

Dim ClassButton As Object
 
'■指定の属性(今回はaタグ)をチェック
For Each ClassButton In driver.FindElementByTag("a")
    '指定タグ(aタグ)のiValueが「次へ」なら、ボタンをクリックする
    If ClassButton.Value = "次へ" Then
        ClassButton.Click
        Exit For
    End If
Next

使い方はClassの場合、同様です。上記例であれば、htmlの上から「aタグ」を全て参照します。
aタグのValueが「次へ」ならボタンをクリックして、次ページへ遷移します。

注意点

上記はIE自動操作をされていた方であれば、なじみの書き方でしょう。
SeleniumBasicの場合は、xPathやCssなどからも特定できるので、上記は一例と考えてください。

 

SeleniumBasicについて

Internet Explorer11 のサポート期限が2022年6月までと、スクレイピング自体入れ替えていく必要があります。
今一番スムーズなのはSeleniumBasicを使用したスクレイピングと考えます。

但し、VBAでのネット記事は少なく困っている方も多いと思います。
弊社で代行開発も可能ですので、お気軽にご用命ください。

コメント

タイトルとURLをコピーしました