今回は、VBAでIEを操作することをスクレイピング等と言いますが。
- VBAを活用してIEを操作したい!
- web上の検索ボタンを自動でクリックしたい!
そんな悩みにお答えして、IE上のボタンを自動クリックする方法について解説していきましょう。
クリックしたボタンの名称を見つけよう!
クリックしたボタンの名称を取得するために、下記2つの点に注力しましょう!
Internet Explorer(IE)でサイトを開く
・Internet Explorer(IE)でサイト開きましょう。
注意するポイントとして、必ずブラウザは、Internet Explorerで開いて下さい。Chrome等ではなく、IEの方がソースコードを確認しやすいです。
IE画面ソースからプログラムを確認
Internet Explorerで開いたら、「ツールバー」➡「表示」➡「ソース」を選択しましょう。
「ツールバー」⇒「表示」⇒「ソース」
ここで、サイトのソースの一覧を見ることができますので、ここから自動クリックしたいボタン名を探しましょう!
参照設定を設定しよう!
続いて、VBAでIEを操作するためには、IEを操作するための参照設定の設定が必要です。
Excelを開いて参照設定の設定の仕方についてみていきましょう。
IEを操作する際には、そのプログラムを動作する環境が必要です。
その設定がこの「参照設定」で行うことができます。
マクロ ➡ ツール ➡ 参照設定
から変更しましょう。
<IE操作に必要な参照設定について>
- IE control 6.0
- Microsoft Internet Controls
このどちらか、もしくは両方にチェックを入れて、エクセルを保存して、再度立ち上げましょう。
これで、IEのプログラミング環境が整いました。
逆に言うと、この設定をしておかないと、プログラミングを記述してもエラーになりますので必ず設定を忘れないように!
ボタンを自動クリックする2つの方法とは
ボタンを自動クリックする方法には、2つの方法があります。
<ボタンを自動クリックする2つの方法>
- 「.Doucument.All.項目名.click」でボタンに名称がある場合
- ボタンに名称がない場合、Inputタグから探しだす方法
1.ボタンに名称がある場合
こちらをご参照下さい。
1 | objIE.Document.All.ボタン名.Click 'クリック |
このように、ボタンに名称が登録されている場合には、
「.Doucument.All.項目名.click」でボタンをクリックすることが可能です。
この際ボタンの名称がついているのであれば、項目名を取得できるのです。しかし、ボタン名が登録されていない、表示されていない場合があります。
2.ボタンに名称がない場合
※但し、この場合は項目名がきちんと登録されていた場合です。項目名がない場合には、これは使えませんので、もう一つの方法があります。
それは、「Inputタグ」から一つ一つのボタンを探していき、ボタンの名称から取得する方法です。
スクレイピングをしたいサイトのソースコードから探してみましょう。
プログラムソースコードの書き方
それでは、実際に、プログラムソースコードの書き方についてみていきましょう。
ボタンをクリックするイベントの書き方には、多数ありますが、まずこの2つの方法が試してみましょう。
下記をご参照下さい。
1.ボタン名がある場合のソースコードの書き方
【プログラムソースコードの書き方①】
<strong>objIE.Document.All.ボタン名.Click 'クリック</strong>
まずは、ソースコードを確認してみましょう。もしソースコードに、ボタン名が、submitの記載近くにある場合には、それがボタンの名称です。
この場合には、上記のメソッドが利用可能です。
2.ボタン名がない場合ソースコードの書き方
【プログラムソースコードの書き方②】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Public Sub ButtonClick() Dim objINPUT As Object Dim objIE As Object Dim n As Integer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate "URL名" 'ログイン画面 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True Set objINPUT = objIE.Document.getElementsByTagName("INPUT") For n = 0 To objINPUT.Length - 1 '※ type="submitボタンなので、.InnerTextじゃなくて、.Valueです ※注意 If InStr(objINPUT(n).Value, "ログイン") > 0 Then '文字列の中から見つけたら objINPUT(n).Click '見つけたINPUTタグのオブジェクトをクリック Exit For End If Next End Sub |
まずは、IEの起動をObject変数にセットしましょう。そして、実際にNavigateで画面を表示します。
ここまでは、IEの起動と同じです。
そして、その画面を開いた後で、「.Doucument.All.項目名.click」で、そのボタンを取得し、選択することが可能です。
しかし、ボタン名がある場合には、この処理は可能ですが、
ボタン名の記載がない場合には、①の処理ではエラーが起こる可能性があります。その場合には、②の処理で記述してみましょう。
※但し、ここのソースコードの記述は、あくまで自動でクリックするための処理を記述しております。ブラウザ待機時間等について別にて記載しておりますので、ご承知おきくださいね。
あくまで上記記述での動作環境は、
<動作環境>
OS:windows7
Office:Office2007
で動作確認済みです。
※異なる環境で動作する保証はございません。あらかじめご了承下さい。状況に応じてお問い合わせ下さい。
まとめ
このように、自動でボタンをクリックする方法は、「objIE.Document.All.ボタン名.click」でボタンを押下することが可能です。
但し、ソースコードの記載によっても取得が難しい場合がありますので、上記の処理を参考にしながら挑戦してみくてださいね。^^
IE操作であれば、テキストボックスにデータを入力する方法も必要ですので、こちらも必要に応じて確認しておきましょう。
<楽天Web検索の自動クリックツール>
「楽天Web検索」を自動でクリックしてポイントを根こそぎ取得する機能を開発しました。これにより、何度も手動で検索しなくても自動で検索してくれるので、手軽にポイントをゲットできる仕組みとなっています。noteのページにて期間限定価格で100部ご紹介しております。ご興味のある方は下記ページより詳細をご確認下さい。^^
ご不明点などございましたら、いつでもご連絡下さい。