前回id要素やname要素があれば、VBAでWebページをクリックする動作は簡単とお伝えしました。
それでは、Webページにid要素やName要素がない場合はどうすればよいでしょうか。
id要素がない?for eachで要素チェック
id要素やname要素がない場合は以下の形でfor Eachでクリックをします。
VBAコードサンプル
Dim ClassButton As Object '■指定のクラス属性(今回は★★★)をチェック For Each ClassButton In driver.FindElementsByClass("★★★") '指定クラスの値が「検索」なら、ボタンをクリックする 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
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でのネット記事は少なく困っている方も多いと思います。
弊社で代行開発も可能ですので、お気軽にご用命ください。
コメント
コピペで動かないなと考えていましたら、ミスタイプありました。
FindElemenst > FindElements
ありがとうございます。修正しました。
VBAにて
ボタンを特定するところまではいけましたが
ClassButton.Click
にて
実行時エラー 11
0で除算しました。
のエラーがでてしまいます。
サイトによるとしか言えません。解決必要であれば有償でお受けしますのでお問い合わせページよりご連絡ください。