VBAでWebページを自在に操るときにハマる罠
であれほど注意しいたにもかかわらず、再び、出てもいないページを覗いて、思うように制御できない事態に陥ってしまった。Webページが複数のフレーム(frame)で構成されていると、最後のフレームが表示されないことがあるのだ。そして、そこに次のページを出す重要なボタンがあるにもかかわらずにだ。その原因はIEのバグと思われるのだが、マイクロソフトが相手の場合、自分が修正するしかない。その対応策としては、IEのフレームのページ(frame)出力を待つのに
For Each objWindow In objShell.Windows If TypeName(objWindow.document) = 'HTMLDocument' then Set objIE = objWindow End If Next Do While objIE.Busy = True Or objIE.document.frames("frameA").document.ReadyState<>4 DoEvents Loop
ReadyStateではダメだということだ。
では、どうするのかというとInStr関数を使うのである。
具体的には、そのページ(frame)に存在するユニークな文字列、例えばワタシのページ(frame)ではFukakyonが出ているかをInStr関数で判定し、出ていないならIE.refreshで、無理矢理出してやるのだ。出てくるまで、IE.resfreshしてあげるのである。つまり、マイクロソフトのバグをInStr関数とIE.refreshの組み合わせで乗り切るのだ。
WaitFukakyon: For Each objWindow In objShell.Windows If TypeName(objWindow.document) = 'HTMLDocument' then Set objIE = objWindow End If Next Do While objIE.Busy = True Or objIE.document.frames("frameA").document.ReadyState<>4 DoEvents Loop If InStr(objIE.document.frames("frame-name-A").document.body.innerHTML,"Fukakyon") = 0 then objIE.refresh GoTo WaitFukakyon End If
0 件のコメント:
コメントを投稿