前回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
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)が「次へ」ならボタンをクリックして、次ページへ遷移します。
※クリック後は、ページ読込の為、読み込み待ち処理が必要です。
コメント
コメント失礼します。
いつも非常に有益な情報をありがとうございます。
「class要素もない場合は、タグで検索」の項目を参考にさせていただいており、質問がございます。
もし同タグ内に”innerText(Value)が「次へ」”となっている要素が2つ以上存在する場合、その2番目の「次へ」ボタンをクリックするにはどのようにしたらいいのでしょうか?
ご教示いただけますと幸いです。
カウント変数を作成して、ifでカウント変数が2回目だったらクリックすると記載をすればよいかと思います。
※for eachは逆からループできればいいんですけどね。VBAでは行えません。
“次へ進む”などValueがあったとして”次へ”を含むなら実行させるにはどうしたらいいですか。
ifの条件を「含む」にすれば大丈夫です。