こんにちは!ITライターのもり(@moripro3)です!
エクセルVBAでIEを操作するシリーズをお届けしています。
前回の記事では、name属性を利用して画像ボタンをクリックする方法をお伝えしました。
今回の記事では、inputタグのalt属性またはsrc属性を利用して画像ボタンをクリックする方法を紹介していきます。
(おさらい)name属性を利用して画像ボタンをクリックする方法
「画像ボタン」の題材は、前回に続きSMBC日興証券オンライントレードのログインページです。
このログインボタンは画像ファイルで作成されています。
ログインボタンのHTMLがこちら。
そして、name属性を利用したクリック処理のコードがこちらです。
getElementsByNameメソッドでオブジェクト(ボタン)を取得しています。
Dim loginBtns As IHTMLElementCollection
Set loginBtns = htmlDoc.getElementsByName("logIn")
Dim loginBtn As IHTMLElement
Set loginBtn = loginBtns(0) 'コレクションの1番目の要素を取得
loginBtn.Click
name=”logIn”の要素タグをコレクションに格納し、目的のオブジェクト(ボタン)を取り出して、Clickメソッドでクリックするという流れです。
inputタグのコレクションを取得する
それではここからが本題です!
まずは、alt属性を利用する方法・src属性を利用する方法の「共通処理」から紹介します。
getElementsByTagNameメソッドで、HTML全体からinputタグを取得します。
IHTMLElementCollection型のコレクション変数を用意し、getElementsByTagNameメソッドの返り値を格納します。
今回はinputタグを取得するので、getElementsByTagNameメソッドの引数に“input”と文字列型で指定します。
Dim inputTags As IHTMLElementCollection
Set inputTags = htmlDoc.getElementsByTagName("input")
For Each~Next文でinputタグを順番に取得する
コレクション変数(inputTags)に格納されているinputタグを、順番にオブジェクト変数にセットしていきます。
オブジェクト変数にはIHTMLElement型の変数を用意します。
‘処理
Next オブジェクト変数
コードがこちらです。
Dim inputTag As IHTMLElement
For Each inputTag In inputTags
'処理
Next
これで、inputタグを一つずつチェックしていくための準備ができました。
この先、alt属性を利用するか、src属性を利用するかで処理が分かれます。
それぞれの方法を紹介していきますね。
alt属性の値を利用してクリックする方法
alt属性とは、画像の代替となるテキストを指定する属性です。
何らかの理由で画像ファイルが表示されない場合に、代わりに表示される文言です。
HTMLでinputタグのalt属性の値を確認します。
<alt="ログイン">
Ifステートメントでinputタグのalt属性の値をチェックします。
もし、目的のボタン(alt=”ログイン”)であれば、Clickメソッドを実行します。
Dim inputTags As IHTMLElementCollection
Set inputTags = htmlDoc.getElementsByTagName("input")
Dim inputTag As IHTMLElement
For Each inputTag In inputTags
If inputTag.alt = "ログイン" Then
inputTag.Click
Exit For
End If
Next
目的のボタンをクリックできたら、それ以上For文を繰り返す必要はないので、Exit Forステートメントでループを抜けます。
src属性の値を利用してクリックする方法
src属性とは、表示する画像ファイルを指定する属性です。
画像ボタンには、必ずsrc属性で画像ファイルが設定されています。
画像ボタンをクリックしたいけれど、name属性もalt属性も設定されてない・・・そんな時にこの方法を使いましょう。(少し処理が長くなるので、最終手段としてご利用ください!)
HTMLでinputタグのsrc属性の値を確認します。
<src="/common_2015/img/login_help_btn_001.gif">
画像ファイル(.gif)のパスが指定されていますね。
ここで注意するのがパスの指定です。
この画像ファイルのパスは相対パスであるため、alt属性のように完全一致検索では取得できません。
そこで、Instr関数を使用して部分一致検索します。
- 引数1:inputタグのsrc属性
- 引数2:画像ファイルの相対パス
返り値はこちらです。
- 検索文字列が見つかった場合→1以上の数値
- 検索文字列が見つからなかった場合→0
Instr関数の返り値を利用して、目的のオブジェクトを取得できたか判定し、クリックします。
Dim inputTags As IHTMLElementCollection
Set inputTags = htmlDoc.getElementsByTagName("input")
Dim inputTag As IHTMLElement
For Each inputTag In inputTags
If InStr(inputTag.src, "/common_2015/img/login_help_btn_001.gif") > 0 Then
inputTag.Click
Exit For
End If
Next
こちらも同じく、目的のボタンをクリックしたらExit Forステートメントでループを抜けます。
まとめ
エクセルVBAでIEを操作するシリーズ、2回にわたって画像ボタンのクリック方法をお届けしました。
- name属性の値を利用してクリックする方法
- alt属性の値を利用してクリックする方法
- src属性の値を利用してクリックする方法
ボタンをクリックする処理をマスターすると、ページ遷移などができてIE操作の幅が広がりますよ!
Webサイトによってボタンの作りは様々なので、色々なパターンに対応できるよう、知識の引き出しを広げていきましょう。
お読みいただきありがとうございました。
連載目次:エクセルVBAでIEを操作してWEBスクレイピング
IEを操作してWEBページのデータを取得して、エクセルのデータとして取り込む、つまりWEBスクレイピングをエクセルVBAで実現します。各種WEBページを課題として様々なデータの取得の仕方を解説していきたいと思います。
- 【エクセルVBAでIE操作】10分で終わるセッティングとWEBページの閲覧確認
- 【エクセルVBAでIE操作】HTMLタグと要素そしてドキュメントの取得
- 【エクセルVBAでIE操作】ブラウザの読み込み待ちをしないとダメなのです
- 【エクセルVBAでIE操作】ページ内のリンク先URLを全部取得する
- 【エクセルVBAでIE操作】ディスクリプションなどの要素をname属性でGetする
- 【エクセルVBAでIE操作】hタグなどの要素をタグ名でGetする
- 【エクセルVBAでIE操作】WEBページのテーブル要素を自動で取得する方法
- 【エクセルVBAでIE操作】WEBページのテーブル要素からセルのデータを取り出す方法
- 【エクセルVBAでIE操作】IEで検索窓にキーワードを入力して送信する方法
- 【エクセルVBAでIE操作】検索結果一覧から記事タイトルを取得する方法
- 【エクセルVBAでIE操作】ブログの記事一覧ページから公開日とカテゴリを取得する
- 【エクセルVBAでIE操作】ページャーをめくって複数ページからデータを取得する
- 【エクセルVBAでIE操作】ユーザー名とパスワードを入力してログインをする
- 【エクセルVBAでIE操作】name属性を利用して画像ボタンをクリックする
- 【エクセルVBAでIE操作】alt属性・src属性を利用して画像ボタンをクリックする