• ベストアンサー

IEの読み込み完了の取得

初めて質問します。 ActiveXを使ってIEを操作する時に、IEの読み込み完了を皆さんはどのように判断していますか?私は、Busyプロパティを使っているのですが、どうも完全ではないようで、ウェイトを入れて対応しています。もっとスマートな方法ってないのでしょうか?DocumetCompleteイベントも複数のHTMLドキュメントから構成されていると判断が必要になるし・・!! おもに、Excelから利用しているので、Excelを例に取ってもらえれば嬉しいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • masa_019
  • ベストアンサー率61% (121/197)
回答No.1

こんにちは。 Busyプロパティに加えて、 ReadyStateプロパティを使ってみてはどうでしょう? Sub Sample() Dim objIE As Object Const READYSTATE_COMPLETE As Long = 4 Set objIE = CreateObject("InternetExplorer.Application") With objIE .Visible = True .Navigate "http://oshiete.goo.ne.jp/" Do While .Busy = True Or .ReadyState < 4 DoEvents Loop End With Set objIE = Nothing End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 複数画像の読み込みが完了したら、処理をすすめるには?

    javascriptにおいて質問です。 いま、imgタグが40個あり、その画像すべての読み込みが 完了したときにメッセージを出したいです。 調べてみると、document.images[i].completeなるもので その画像の読み込みが完了したらtrueを返すものがあるようですので、 それを使って bodyのonLoadイベントにおいてimgタグ分まわして すべて.completeがtrueになるまで次の処理にいかないように したいのですが、どうすればいいのでしょうか? 画像の中には重いものもあって、forでまわしてもダメのようでした。 再帰処理とか使うのだろうと思うのですがうまくいきません。 すべての読み込みをチェックし、すべて読み込んだらメッセージを 出すロジックを教えてください。

  • VBAによるIE操作について

    VBAによるIE操作について WEBブラウザの表示が完了しているかを確認する方法で以下を利用しています。 While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Wend Set objDoc = objIE.Document Do Until objDoc.ReadyState = "complete": DoEvents: Loop これで完了するまで処理を待つのですが、たまにブラウザが読み込み状態で固まってしまうことがあります。 F5で更新すると再度読み込みを行い、処理が正常に戻るのですが、固まってしまった場合のプログラムでの対処法はないでしょうか? 10秒間ループし続けたらsendkeysでF5を押下するなど色々考えたんですが、うまく表現できません>< どなたか分かる方ご教授お願いします!

  • VBAでのIE操作で、ENTERキーが押せません

    VBAでIEの操作を勉強中です。 HTMLを整形するホームページ(https://lab.syncer.jp/Tool/HTML-PrettyPrint/)です。 左側のエリアにHTMLを入力すると右側に整形されたHTMLが表示されるものです。 手動ではなんら問題ありません。 作成したVBAから操作すると、左側のエリアにHTMLは入力されますが、右側に表示されません。 入力後にENTERキーが押されれば表示されるというところまでは解っています。 解っているんですが、VBAから押せません。 どなたかご教示願います。 以下作成したVBAです。 ----------------------------------------------------------------------- Sub testIE() Dim IE As Object Dim target As String Dim wText As String target = "https://lab.syncer.jp/Tool/HTML-PrettyPrint/" wText = "<html><head><title>test</title></head><body><h1>test</h1></body></html>" Set IE = CreateObject("InternetExplorer.Application") With IE .Visible = True .Navigate target Do While .Busy = True Or .ReadyState <> 4 DoEvents Loop Do While .Document.ReadyState <> "complete" DoEvents Loop .Document.getElementsByTagName("textarea")(0).Value = wText SendKeys "{ENTER}" MsgBox .Document.getElementsByTagName("textarea")(1).Value End With End Sub

  • ExcelのVBAでHTMLのソースのタグの部分を小文字で取得したい

    HTMLのソースコードを取得する下記のVBAを実行すると タグの部分が大文字(<H1>等)になってしまいます。 どうすれば小文字のタグのまま取得することが出来るのでしょうか? 使用OS:Windows XP 使用ソフト:Microsoft Excel 2003 ご存知の方がおられましたらご回答をよろしくお願いします。 Sub sample() Set IE = CreateObject("InternetExplorer.Application") IE.Navigate ("http://www.yahoo.co.jp/") While IE.busy: Wend While IE.Document.readyState <> "complete": Wend HTML = IE.Document.body.innerHTML MsgBox HTML IE.Quit End Sub

  • HTMLドキュメントの操作が出来ません

    Windows XP搭載のPCで作成され、FDに保存されたHTMLドキュメントが、 Windows 7で操作できません。 また、Windows 7で開き、作成・FDに保存されたHTMLドキュメントを、Windows XPで開いた後、Windows 7で操作できなくなりました。 具体的な内容を申し上げますと、勤務先から配布されたFDなのですが、 FD内のフォルダーを開くと 「system」(css, cvs, images js のファイルフォルダーがあり、複数のHTMLドキュメントがあります。)  「outputdata」(メモ帳) 「HTMLドキュメント」の3つがあり、 3つ目のHTMLドキュメントを開き、作業保存後、再度開くときは、 (3つ目の)HTMLドキュメントにある、データ読み込みという項目があるのですが、 そこから、上述の「outputdata」内のファイルを選択し、反映させて作成・保存等を、 行う仕組みになっております。 Windows 7で操作できなくなった、HTMLドキュメントは、XPでは操作可能ですが、 Win7で操作するためには、どうしたらよいのでしょうか? 解決方法がありましたら、教えてください。 初心者すぎて、質問の内容もまとまらず、すみません。

  • IE8でURLを非表示にするには

    <script type="text/javascript"> <!-- function hihyouzi(){ window.status = ''; return true; } if (document.layers) document.captureevents(event.mouseover | event.mouseout); document.onmouseover = hihyouzi; document.onmouseout = hihyouzi; // --> </script> このスプリクトを設置しているのですが、 マウスの左ボタンを押すとステータスバーにURLが出てしまいます。 また、画像リンクのURLはカーソルを合わせるだけで表示されてしまいます。 以前設置していたものは、ボタンを押しても表示されなかったのですが、ブラウザがIE8だと非表示にすらならず上記のものに変更しました。 そこでお聞きしたいのですが、IE8でマウスの左ボタンを押しても表示されないようにするにはどうしたらよいでしょうか? なお、当方プログラムの知識はありませんので、HTML内に加えるだけでよいものでお願いします。

  • IE8 アクティブタブの取得

    ------------------------------------------------------ WIN8.1の IE11で、IE8をエミュレートして開発しています。 ------------------------------------------------------ 現在IEウィンドウタブのアクティブ/非アクティブ状態を取得したいと思い、以下のようにイベントに関数を仕込んでいます。 ----------------------------- window.onfocus = function () { focusChg(true); } window.onblur = function () { focusChg(false); } function focusChg(flg) { document.title = (flg) ? "あ" : "い"; document.title += formatDate(new Date(), 'hh:mm:ss.SSS'); } ※補足 function formatDate() は日時の書式を整える関数 ----------------------------- ※タブブラウザですので、タブで複数のページを表示した場合(パターン1) 「タブページA ⇔ タブページB」と切り替えた場合 ※または(パターン2) 「タブページA ⇔ エクスプローラ等の別アプリケーション」へ切り替えた場合 に、仕込みのイベントが発生する予定でした。 ところが ページ内には「input/a/div」等が存在していいるのですが、 そのページ内のinput等にフォーカスを当てると、その親windowのonblurが発生しています。 同一WIndowのhtml→body→form→input へのフォーカス移動では、onblurが発生しない想定で考えていたので、困ってしまいました。 どなたかアクティブタブの取得方法や、またその切替を行ったタイミングのイベントの取得方法を教えてください。 最終目標は、、、 5分おきにDBへの問い合わせを行う非同期リクエストを、タブがカレントの時だけ行いたい。 またアクティブではない時に5分のタイミングがやってきた場合は、内部フラグだけを立てておき、アクティブになった瞬間に問い合わせを行う非同期リクエストの処理を呼び出したい。 という事をしようとしております。 非同期リクエストは出来ておりますが、これらの呼び出すタイミングがうまくいかないような状態です。 よろしくお願いいたします。

  • IEを要するアプリなどについて

    問題点を述べます。 (1)ホームページを閲覧、保存した後、それを見る際に、IEを同時に起動しないと、保存したHTMLドキュメントが開かない。 (2)ノートンのインターネットセキュリティで侵入検知し、侵入者のログから追跡しようとして、青文字(リンク)をクリックするが、IEを起動していないと、スクリプトエラーになる。IE起動時は追跡が可能となる。 (3)CD-ROMを起動する際に、「iexplore.exe」が見つからないために開けないと出る。デスクトップにある IEを起動してからだとCD-ROMを見ることができる。 (HTMLで構成されたものと思われる。) OSはXPを使用、IEのヴァージョンは6.0.2800以下略です。IEを起動してればいいのですが、一々起動するのも面倒です。起動して使えという回答はなさらないでください。どこが問題で、どうすると直る可能性が 高いかお教え下さい。よろしくお願いします。

  • 起動済みのIEをハンドルから操作するには

    既に起動済みのIEブラウザをWSH(VBS)などから、ハンドルを取得して HTMLソース内のフォームに値をセット(Document forms elementなどで) する事はできますでしょうか? 出来るとすれば、IEを捕まえて操作するには、どのようにすれば良い でしょうか? ■補足 起動したIEは、自身のスクリプトからオブジェクトを生成したもの では無く、ウインドウタイトルくらいしか解りません。

  • VBA IE操作 ログイン後URLを取得したい

    yahooにログインするVBAコードはわかるのですが、 ログインが失敗なのか正常にログインできたのかをVBAで知りたいです。 結果を知るには、ログインボタン押下後のURLを取得できればいいと思うのですが その方法がわかりません。 ログイン自体は、 --------------------------------------------------------- Sub ie_test() Dim objIE As Object 'IEオブジェクト参照用 'インターネットエクスプローラーのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '見えるようにする(お約束) '文字列で指定したURLに飛ぶ objIE.Navigate "https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.yahoo.co.jp" '表示終了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop '項目名を指定して、データをセットする objIE.document.all.UserName.Value = "UserName" objIE.document.all.passwd.Value = "****" objIE.document.Forms(0).submit End Sub --------------------------------------------------------- で、できました。 objIE.document.Forms(0).submitの後には、 ログインが出来ていたら http://www.yahoo.co.jp/ のページへ行き、 ログイン失敗なら https://login.yahoo.co.jp/config/login? のURLが表示され、図のように 「Yahoo! JAPAN IDまたはパスワードが正しくありません。」 と表示されます。 objIE.document.Forms(0).submitの後に MsgBox objIE.URL を入れると 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)」 になり、 MsgBox objIE.Navigate を入れると 「引数の数が一致していません。または不正なプロパティを指定しています。(Error 450)」 になります。 ログイン後のソースをエクセルに書き出す方法も考えましたが、書き出しに時間がかかるのでやめました。 ご教授よろしくお願いします。

専門家に質問してみよう