FC2ブログ

VBAでWebスクレイピング AlertボックスやShowModalウインドウをやっつけろ その1

通知バーもやっつけてます

さて、前回は
VBAやVBSでWebスクレイピング(結構本気のVBS版)
http://hymandr1200st.blog.fc2.com/blog-entry-1229.html
にて、VBAに制御を残しつつAlertボックスに対応するためのVBSについて書きました

今回はこれを実際に利用したサンプルについて書いてみたいと思います

なお、一度にすべてを書ききれない気がするので、まずは準備編ということでヨロ

〇やっつけるHTML等の準備
1.デスクトップにPopUpというフォルダを作ってください
2.前回書いたIECtrlSub.VBSをここに保存
3.後述するHTMLファイル2つをここに保存
4.次回記載予定のVBAを格納するxlsmファイル(名前は適当でかまいません)をここに保存

〇HTMLの動作確認
showModalDialog.htmlをIEで起動してください
あっ、お約束ですが、これIEでしか動作しません
window.showModalDialogはIE意外では廃止されています

そのPCのセキュリティー設定にもよりますが
showModalDialog.htmlを開くとJavaScriptを含むページを処理するかの「通知バー」が表示されると思います
今回は「ブロックされているコンテンツを許可」してください

つづいて、IEに表示されている「モーダルダイアログを開く」ボタンをクリック
すると、今回のテーマであるモーダルダイアログが表示されました
この状態で親ウインドウをクリックしてもモーダルダイアログに邪魔されて前面にならないことを確認してください

では表示されているモーダルダイアログの「自分自身のウインドウを閉じる」ボタンをクリック
WEBページからのメッセージというAlertボックスにhogeと表示されたはずです
ちなみにこのhogeはモーダルダイアログからの戻り値です

動作確認のポイントをまとめますと
Webスクレイピングでの課題とされてきた次の3要素をやっつけることを目的としています
1.UI通知バーへの応答
2.window.showModalDialogによるモーダルダイアログへの応答
3.Alertボックスへの応答

ちなみに、window.showModalDialogからAlertボックスへの応答が完了するまでは一連のJavaScriptで実行されているので、VBAで「モーダルダイアログを開く」をクリックしてはいけません
今回用意するVBAでは、「モーダルダイアログを開く」を先のIECtrlSub.VBSでクリックさせ、モーダルダイアログが表示されるのを待ち構えて処理するものです
なお、今回のサンプルではモーダルダイアログへの応答後に「必ずAlertボックスが表示される」前提で作っていますが、動作が不定の場合は何等か別の対策が必要となります

〇おまけ
UIオートメーション(通知バー)については日本語の資料が少なく
また、資料があっても難解です
今回はネットに転がっていた情報をつなぎ合わせたら動いた程度なので動作不良等もありうるところはご勘弁ください
また、以下に掲載するテスト用のHTMLもネットから拾ってきたものをそのまま掲載しました
作成者のページ(URL)を失念してしまいましたので記載できていません
情報がありましたらコメント願います

※以下のリンクをダウンロードまたはコピペしてください
親HTML
showModalDialog.html
親HTML
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>モーダルダイアログを開くサンプル</title>
<script type="text/javascript" charset="UTF-8">
  onload = function() {
    var btn = document.getElementById("btnOpen");
    btn.onclick = function() {
      var url = "ModalDialog.html";
      var winWidth = "400px";
      var winHeight = "300px";
      var options = "dialogWidth=" + winWidth + ";dialogHeight=\
  " + winHeight + ";center=1;status=1;scroll=1;resizable=1;\
  minimize=0;maximize=0;";
     
      // ボタンをグレーアウトする
      btn.disabled = true;
      var returnValue = showModalDialog(url, window, options);
      // 戻り値をアラート
      alert(returnValue);
    }
  }
</script>
</head>
<body>
<h1>モーダルダイアログを開くサンプル</h1>
<input type="button" id="btnOpen" value="モーダルダイアログを開く">
</body>
</html>


子HTML
ModalDialog.html
子HTML


<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>モーダルダイアログ</title>
<script type="text/javascript" charset="UTF-8">
  onload = function() {
    // 自分自身のウインドウを閉じる
    document.getElementById("btnClose").onclick = CloseDialog;
    onunload = CloseDialog;
   
    function CloseDialog() {
      // 親ウインドウを取得する(IE用)
      if(!opener) {
        opener = dialogArguments;
      }
     
      // 親ウインドウのボタンのグレーアウトを解除する
      opener.document.getElementById("btnOpen").disabled = false;
      returnValue = "hoge";
      close();
    }
  }
</script>
</head>
<body>
<h1>モーダルダイアログ</h1>
<input type="button" id="btnClose" value="自分自身のウインドウを閉じる">
</body>
</html>
続きはまた次回に
( ̄ー ̄)/~~ジャ
関連記事
スポンサーサイト



コメントの投稿

非公開コメント

おもちゃ箱
Count from 2010/01/14

にほんブログ村 バイクブログ ドゥカティへ


カレンダー
09 | 2019/10 | 11
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
最新記事
最新コメント
カテゴリ
月別アーカイブ
リンク
検索フォーム
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

全記事表示リンク

全ての記事を表示する