VBA

【VBAでIE操作】Webサイトへログイン後に別のページに遷移する

ねぇもりさん、VBAのIE操作でログイン処理できるよね
もり
もり
うん、ユーザ名・パスワードを入力して、ログインボタンをクリックする処理だね
ログインだけじゃなくてさ、そこから他のページに飛びたいんだよね
もり
もり
なるほど、ログイン後に他のページに遷移する処理を作りたいんだね

VBAでIEを操作し、指定のWebサイトへのログイン処理後、さらに別ページに遷移する処理を作成します。

※この記事ではSBI証券のマイページを用いて紹介していきますが、SBI証券のアカウントをお持ちでなくても大丈夫です。

 

【処理のイメージ】

VBAでIE操作して別ページに遷移する

Webサイトにログイン後、他のページに遷移する

この解説記事では、下記の2ステップの処理を作成します。

  1. SBI証券のマイページにログインする
  2. ログイン後のトップページから「ポートフォリオ」画面に遷移する

※SBI証券のアカウントをお持ちでなくても大丈夫なように紹介していきます!

(事前準備)参照設定

VBAでIEを操作するためには下記2つのライブラリを参照します。

  • Microsoft HTML Object Library
  • Microsoft Internet Controls

VBE(エディタ)で「メニュー」→「ツール」→「参照設定」を選択します。

VBAでIE操作するための参照設定

 

IEを起動して目的のWebサイトにアクセスする

まずはお決まりの処理です。ここではSBI証券のログインページにアクセスします。

SBI証券|株・FX・投資信託・確定拠出年金・NISA

 

SBI証券のマイページにログインする処理

SBI証券に限らず、たいていのWebサイトはこのような作りになっていますね。

  1. 「ユーザーネーム」を入力
  2. 「パスワード」を入力
  3. 「ログインボタン」をクリック
SBI証券のログインページ

ユーザーネームとパスワードを入力し、ログインボタンをクリックする処理を作成するために、HTMLを確認しましょう。

ユーザーネーム・パスワード入力欄のHTMLです。

ログインボタンのHTMLです。

 

これらのHTMLで注目するのは、inputタグのname属性の値です。

  • ユーザーネーム = user_id
  • パスワード = user_password
  • ログインボタン = ACT_login

 

これらの値をもとにログイン処理を作ります。HTMLドキュメントオブジェクトのgetElementByIdメソッドでname属性の値を指定します。

ログイン処理完了の待機とHTMLの再読み込み

もり
もり
ポイントはHTMLドキュメントの再読み込みだよ!

この時点で変数htmlDocは「ログインページ」のHTMLオブジェクトを参照しています。ログインボタンをクリックしたら、ログインページのHTMLはもう不要なので、参照を破棄します。

そして、ログイン処理には通常、数秒程度かかるので、処理完了まで待機します。

ログイン処理が完了して、ログイン後のページ(=トップページ)が表示されたら、トップページのHTMLドキュメントを再度読み込みます。

name属性のないimgタグをクリックする方法

つづいて、トップページ上部にある「ポートフォリオ」をクリックする処理を作成します。

もり
もり
これがログイン後に別ページに遷移する処理だよ

目的のボタン「ポートフォリオ」のHTMLを確認します。

 

この「ポートフォリオ」ボタンはimgタグで作られています(ボタンのように見える画像)

 

name属性がないね
もり
もり
そうだね、こういう場合はalt属性に注目するよ!

 

name属性がない場合はalt属性の値を利用します。

imgタグを順番に取得して、alt属性の値が “ポートフォリオ” の場合クリックする処理を作ります。

コードまとめ

目的のWebサイトにログインし、さらに別ページに遷移する処理のまとめです!

(おまけ)目的の画面のHTMLを直接取得する

ねぇもりさん、とあるページをスクレイピングしたいんだけどね。

そのページにたどり着くまで大変なんだよね

もり
もり
そんな時は、この記事も読んでみて!

起動済みの画面のHTMLを取得する方法だよ

【VBAでIE操作】起動済み画面のHTMLを取得する(Webスクレイピング)VBAでスクレイピングをしたい・・・でも目的の画面へのアクセス経路が複雑でたどりつけない・・・ そんなときは、先に目的の画面を開いておきHTMLを取得しましょう!...