エクセルVBAでIEを操作するクラスにログイン処理をするメソッドを追加する方法


login

photo credit: Got Credit Login via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方をお伝えしております。

前回の記事はこちら。

エクセルVBAでIEを操作するクラスに検索入力&ボタンクリックのメソッドを追加する方法
エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方をお伝えしております。今回は、エクセルVBAでIEを操作するクラスに検索窓の入力&ボタンクリックのメソッドを追加する方法をお伝えします。

検索入力&ボタンクリックのメソッドを追加しました。

さて、今回はその応用になりますが、ログイン処理をするクラスをつくります。

ログインが必要なサイトのスクレイピングをするならば、メソッド化しておくと便利ですものね。

ということで、エクセルVBAでIEを操作するクラスにログイン処理をするメソッドを追加する方法です。

では、行ってみましょう!

前回のおさらい

まずは、前回のおさらいからです。

IEを操作するクラスIEObjectは以下の通りです。

前回作成したのは、以下2つのメソッドでした。

  • InputTextByIdメソッド:input要素をidで取得してその値を入力する
  • ClickButtonByIdメソッド:input要素をidで取得してクリックする

ちなみに、上記IEObjectクラスのコードは、今回の内容で必要なメンバーだけ掲載しています。

それで、検証用の標準モジュールのプロシージャがこちらですね。

さて、今回はログイン処理をしたいわけですが、入力欄に入力して、ボタンをクリックする…という動作でいうと、前回の内容が大いに参考になりますね。

WordPressの管理画面にログインする

今回は、例としてWordPressの管理画面にログインしてみたいと思います。

ログインしていない状態で、管理画面のURL「https://example.com/wp-admin/」にアクセスすると以下の画面になります。

WordPressのログイン画面

ここで、ユーザー名とパスワードを入力し、ログインボタンをクリックすればログインできます。

それぞれの要素は、以下に示すとおりid属性で取得可能です。

  • ユーザー名の入力フォーム:id=”user_login”のinput要素
  • パスワードの入力フォーム:id=”user_pass”のinput要素
  • ログインボタン:id=”wp-submit”のinput要素

ただ、一度ログインをすると、一定のセッションの間はログイン済みと判定されますので、ログイン処理は不要です。

ログイン処理を行うメソッド

では、以上を踏まえて、クラスIEObjectにログイン処理を行うLogInメソッドを追加しました。

コードはコチラです。

ログインページへのリンクは、既に作成したNavigateメソッドの力を借ります。

検証用のプロシージャはこちらです。

いや~スッキリしますね~。

実行すると、未ログインの状態のときは、うまくログインできます。

しかし、一度ログインした後に、再度実行すると、以下のように実行時エラーとなってしまいます。

実行時エラー

前述の通り、WordPressの管理画面は一度ログインすると、しばらくのセッションの間はログイン済みになりますので、ログイン画面に飛ばされずに済みます。

ですから、id=”user_login”のinput要素が見つからずにエラーとなってしまうのです。

つまり、ログイン済みかそうでないかの判定が必要になるのです。

WordPressに限らず多くのサイトでは同様の仕組みが敷かれていますよね。

ログイン状態かどうかを判定する

ログイン状態かどうかを判定するには、どうしたらよいでしょうか。

ログイン状態であれば、Navigateメソッドでページ遷移したURLをそのまま開けます。

ただし、未ログイン状態であれば、いったんログイン画面のURLにリダイレクトされる、つまり、その際にIEで開いていれうドキュメントは、別のURLのものになっているわけですよね。

ですから、読み込みが完了したときの、IEのドキュメントのURLが、Constステートメントで定義したURLと等しいかどうかを判定すれば良いわけです。

ログイン状態の判定を踏まえたログインメソッド

ログイン状態の判定を踏まえて、前述のLogInメソッドを修正しました。

こちらです。

実行すると、ログイン時も未ログイン時もうまく動作してくれることを確認できるはずです。

まとめ

以上、エクセルVBAでIEを操作するクラスにログイン処理をするメソッドを追加する方法をお伝えしました。

今回のLogInメソッドは、対象となるサイトが異なれば、都度それに合わせてカスタマイズが必要ですね。

ただ、一度作っておくと標準モジュールが非常にスッキリすると思います。

次回は、読み込み待ち処理で、引数で渡した任意の秒数を待つように変更してみたいと思います。

エクセルVBAによるIEを操作するクラスに指定秒数の待ち時間を入れるメソッドを追加する
エクセルVBAでIEスクレイピングをするときに便利なクラスの作り方をお伝えしております。今回は、エクセルVBAによるIEを操作するクラスに指定秒数の待ち時間を入れるメソッドを追加する方法を紹介します。

どうぞお楽しみに!

連載目次:エクセルVBAでIEを操作するクラスを作る

エクセルVBAでInternetExplorerを操作してWebスクレイピング、まだまだ現役で必要となる現場もあるでしょう。このシリーズでは、IEを使ったスクレイピングをするときに便利なクラスの作り方をお伝えします。
  1. エクセルVBAでIEを操作するもっとも簡単なクラスを作成する方法
  2. エクセルVBAでIEを操作するクラスでWebページを開くメソッドを追加する
  3. エクセルVBAでIEを操作するクラスに読み込み待ちとドキュメント取得の機能を追加する方法
  4. エクセルVBAでIEを操作するクラスにname属性で取得した要素から内容を取り出すプロパティを作成
  5. エクセルVBAでIEを操作するクラスにリンクテキストでa要素を探してリンクする方法
  6. エクセルVBAでIEを操作するクラスにテーブルのデータを取得するメソッドを追加する方法
  7. エクセルVBAでIEを操作するクラスにWebページのテーブルデータをシートに書き出すメソッドを追加する
  8. エクセルVBAでIEを操作するクラスに検索入力&ボタンクリックのメソッドを追加する方法
  9. エクセルVBAでIEを操作するクラスにログイン処理をするメソッドを追加する方法
  10. エクセルVBAによるIEを操作するクラスに指定秒数の待ち時間を入れるメソッドを追加する

タイトルとURLをコピーしました