Internet Explorer自動操作

VBAでIE操作「IEでid要素やName要素がなくてもボタンクリックをする」【エクセルマクロ】

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

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

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

VBAコードサンプル

Dim ClassButton As Object
 
'■指定のクラス属性(今回は★★★)をチェック
For Each ClassButton In objIE.document.getElementsByClassName("★★★")
    '指定クラスの値が「検索」なら、ボタンをクリックする
    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ログインサンプルの場合、IEで表示されている文言が「ログイン」(Valueがログイン)であれば、該当のclass要素をVBAがクリックします。

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

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

 

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

 

 

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

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

VBAコードサンプル

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

使い方はClassの場合、同様です。上記例であれば、htmlの上から「aタグ」を全て参照します。
aタグのinnerText(Value)が「次へ」ならボタンをクリックして、次ページへ遷移します。
※クリック後は、ページ読込の為、読み込み待ち処理が必要です。

コメント

  1. コメント失礼します。
    いつも非常に有益な情報をありがとうございます。
    「class要素もない場合は、タグで検索」の項目を参考にさせていただいており、質問がございます。
    もし同タグ内に”innerText(Value)が「次へ」”となっている要素が2つ以上存在する場合、その2番目の「次へ」ボタンをクリックするにはどのようにしたらいいのでしょうか?
    ご教示いただけますと幸いです。

  2. カウント変数を作成して、ifでカウント変数が2回目だったらクリックすると記載をすればよいかと思います。

    ※for eachは逆からループできればいいんですけどね。VBAでは行えません。

  3. “次へ進む”などValueがあったとして”次へ”を含むなら実行させるにはどうしたらいいですか。

    • ifの条件を「含む」にすれば大丈夫です。

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