【VBS】IEのページ読み込み中待機について

このQ&Aのポイント
  • VBSを使用してIE8(WinXPSP3)で複数のサイトを開く際のページ読み込み中待機の方法について質問です。
  • 現在の状態ではサイト2を開いた後の待機が機能していないため、一気にサイト2~5が開いてしまいます。
  • サイト1を開いて表示されるまで待機し、その後サイト2以降を順次開く際にもアクティブタブが変わらないようにする方法について教えてください。
回答を見る
  • ベストアンサー

【VBS】IEのページ読み込み中待機について

IE8(WinXPSP3)で決まったサイトを複数開いていくVBSを作成しています。 開きたいサイトや数は時々変わるので、最初の方でサイトURLと数を設定しています。 普通にサイト1をIEで開いて、ページが表示されるまで待機し、 その後、サイト2以降を順次新しいタブで開く→表示されるまで待機→開く→待機と 処理させますが、最終的にはサイト1が表示されたタブがアクティブになっていてほしいので サイト2以降が表示される際はアクティブタブが変わらないように 「objIE.Navigate2 URL(i), 4096,」としています。 ここから質問ですが、今の状態だとサイト2を開いたあとの「待機」が機能していません。 サイト1が開く→表示まで待機する→サイト2~5が一気に開いてしまう、という 具合です。 サイト1開く→表示完了まで待機→サイト2開く→表示完了まで待機→サイト3開く→ 表示完了まで待機→としていくにはどのようにしてやればよいでしょうか? プライベートで作っているものなので、特に急いではおりません。 よろしくお願いします。 Dim objIE Dim i, cnt Dim URL(20) URL(1) = "http://www.yahoo.co.jp/" URL(2) = "http://www.google.co.jp/" URL(3) = "http://www.goo.ne.jp/" URL(4) = "http://www.excite.co.jp/" URL(5) = "http://jp.msn.com/" cnt = 5 Const navOpenInNewTab = &H800 Const navOpenInBackgroundTab = &H1000 Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate2 URL(1) Do Until objIE.Busy = False WScript.sleep(1000) Loop ↓↓↓↓↓ここからが質問したいところです↓↓↓↓↓ For i = 2 to cnt step 1 objIE.Navigate2 URL(i), 4096, navOpenInNewTab Do Until objIE.Busy = False WScript.sleep(1000) Loop Next Set objIE = Nothing

  • kagtt
  • お礼率40% (2/5)

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>最終的にはサイト1が表示されたタブがアクティブになっていてほしい こんばんは >objIE.Navigate2 URL(i), 4096, navOpenInNewTab objIE.Navigate2 URL(i), navOpenInBackgroundTab では

kagtt
質問者

お礼

ほんとですね、新しいタブはバックグラウンドで開けばいいので、そのとおりでした。 ご指摘ありがとうございます。 え~、なお、この問題は解決しました。 質問を取り消そうと方法を探していたのですが、回答をいただきましたので、問題解決とは直接関係ないのですがBAとしてクローズします。

関連するQ&A

  • VBSでフォームに値を繰り返し入れる方法で悩んでいます

    VBScriptでフォームに値を入れることを繰り返したいのですがどうもうまくいかずに悩んでいます。いい方法を教えて下さい。 指定ページを開いた後に If objIE.Document.URL = strURL Then Set objIN = objIE.Document.getElementByTagName("INPUT") objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop If objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop Else objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop End If 以下省略 といったように1回でログインできなかった場合何度か入力するプログラムなのですが最初のElseIfの後のところで「オブジェクトがありません」となってしまいます。 ページも遷移してないのですが何故かオブジェクトがなくなってしまいます。 そういった対策をすればよいのでしょうか? お願いします。

  • ie操作 ローカルパスだとエラーになる

    ヤフーなら問題なくコードが動くのに、URLがローカルのパスだと、エラーになってしまいます。 具体的には、 *********************************************************** Sub Sample1() Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.yahoo.co.jp/" objIE.Visible = True Do Until objIE.ReadyState = 4 Loop Do While objIE.Busy = True DoEvents Loop End Sub *********************************************************** だと、問題なく実行されるのに、 *********************************************************** Sub Sample2() strFName = MyDesktop & "\index.html" Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate strFName objIE.Visible = True Do Until objIE.ReadyState = 4 Loop Do While objIE.Busy = True DoEvents Loop End Sub ------------------------- Function MyDesktop() Dim WSH As Variant Set WSH = CreateObject("Wscript.Shell") MyDesktop = WSH.SpecialFolders("Desktop") Set WSH = Nothing End Function *********************************************************** だと、 Do Until objIE.ReadyState = 4 で オートメーションエラー 起動されたオブジェクトはクライアントから切断されました。 となります。 なぜローカルだと、エラーになるのでしょうか? 何が違うのでしょうか?

  • VBS(WSH)で開いたIEのウィンドウがアクティブにならない

    VBSでタイトルバーのみのIEウィンドウを開き、 SendKeyでtestと入力するスクリプトを作成しています。 ですが、開いたIEのウィンドウがアクティブにならず、 SendKeyがIEに送信されません。 VBSについては全くの初心者でして、ウィンドウがアクティブにならないのが 環境の問題なのか、プログラムの問題なのか判断できません。 どなたかご教授をお願いします。 IEのバージョンは8、OSはWinXPです。 以下、ソースです。 -------------------------------------------------- 'タイトルバーのみのIEを起動する Set WshShell = WScript.CreateObject("WScript.Shell") Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate("http://www.google.co.jp/") objIE.MenuBar = False objIE.StatusBar = False objIE.ToolBar = False objIE.AddressBar = False objIE.Visible = True '表示待ちループ Do While objIE.Busy WScript.Sleep 100 Loop '[test]で検索 WshShell.SendKeys("test") WScript.Sleep(100) WshShell.SendKeys("{TAB}") WScript.Sleep(100) WshShell.SendKeys("{ENTER}") --------------------------------------------------

  • If~ElseIfが冗長なので修正したいが・・・

    If~ElseIf~Else~EndIfの文でかなり冗長な気がするのですがもっと見栄え良く書く方法はないでしょうか? 個人的にはForなんとかで出来るような気がしますがうまくいきません。 If objIE.Document.URL = strURL Then Set objIN = objIE.Document.getElementByTagName("INPUT") objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop If objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop ElseIf objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop Else objIE.Document.URL <> strAfterLoginPage Then objIN(0).value = ID objIN(1).value = PASSWORD objIN(2).Click Do Until objIE.Busy = False WScript.sleep(250) Loop End If

  • DoEvents

    VBSでDoEventsは使えないのでしょうか? *************************** Dim ObjIE dim i Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Navigate "http://oshiete.goo.ne.jp/" ObjIE.Visible = True Do While ObjIE.Busy = True DoEvents Loop Do While ObjIE.Document.ReadyState <> "complete" DoEvents Loop Set ObjIE = Nothing *************************** だと、エラーになりました。 Wscript.sleep 3000 ならエラーにならずにコードは動きました。 VBAならDoEventsは使えるのに VBSで使えない理由を教えてください。

  • 無限ループ objIE.Navigate

    win8.1でvbaでブラウザを操作しています。 XPからWIN7までは、 Sub Sample() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop objIE.Navigate "http://shopping.yahoo.co.jp/" ・・・ このように、 objIE.Navigate に、URLを入れ替えても、問題なく表示できたのですが win8からは objIE.Navigateで、1つ目のURLを表示させ、2つ目のURLを表示させると、 見た目は、 二つ目の"http://shopping.yahoo.co.jp/"が表示されるのですが、 objIEの中身は、1つ目の "http://www.yahoo.co.jp/"のままです。 なので、 objIE.Navigate "http://shopping.yahoo.co.jp/" のあとに、 Do While objIE.Busy = True DoEvents Loop をしても、 objIEに格納されている値は、 "http://www.yahoo.co.jp/"だから 無限ループしてしまいます。 この現象を回避するにはどうすればいいでしょうか? エクセル2010です。 よろしくお願いします。

  • SubとEnd Subについて

    VBScriptのSubとEnd Subについて教えて下さい。 Dim LogonID Dim Password Dim URL Dim objIE Dim objINPUT Dim BodyText Dim AriNashi LogonID = "XXXXXXXX" Password = "XXXXXXXXX" URL = "https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.ya..." 下記のようなプログラムはうまくいくのですがSubで囲むと何故か動作しなくなってしまいます。 使い方が間違っているのでしょうか? Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate URL objIE.Visible = True Do Until objIE.Busy = False WScript.sleep(250) Loop If objIE.document.URL = URL Then BodyText = objIE.document.body.innerTEXT AriNashi = InStr(1, BodyText, "Yahoo") If AriNashi > 0 Then Set objINPUT = objIE.document.getElementsByTagName("input") objINPUT(0).value = LoginID objINPUT(1).value = Password objINPUT(2).Click Else msgbox "NO" End If Else WScript.Echo " ダ メ" & Err.Description End If Set objIE = Nothing

  • vbsよりIEをアクティブに開きたい

    お世話になります。 Windows7Pro サーバー上にあるhtmlファイルをvbsより開いてます。 また、5秒で閉じるようにしてます。 現状、vbsを実行するとhtmlファイルが開くことは開くの ですが、他ウィンドウの後ろになってしまいます。 どこをどうすれば開いたhtmlファイル(IE)を最前面で起動 することができますでしょうか。 【vbsの内容】 Option Explicit On Error Resume Next Dim strUrl ' 表示するページ Dim objIE ' IE オブジェクト strUrl = "サーバー上にあるhtmlファイルのパス" Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.ToolBar = False If Err.Number = 0 Then objIE.Navigate strUrl objIE.Visible = True objIE.Width = 800 objIE.Height = 400 objIE.Top = 0 objIE.Left = 480 WScript.Sleep 5 * 1000 objIE.Quit Else WScript.Echo "エラー:" & Err.Description End If 【htmlの内容】 <html> <head> <title>テスト</title> </head> <BODY> <IMG src="画像のパス"> <font size="7">TEST</font> </div> </body> </html> ご教示の程、宜しくお願い致します。

  • VBSのNavigateコマンドについて

    VBSのNavigate の URL指定の中に inputboxで 変数を代入したいのですがうまくいきません お分かりの方 教えていただければ幸いです。 Dim Input Input = InputBox("~~~~") Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate "https://xxx Input xx" ← この中のURLに挿入したい。 末筆ですみませんがよろしくお願いします。

  • 「ページが表示されました」まで取得したい

    IEを立ち上げてステータスバーのテキストを取得して、 「ページが表示されました」を取得出来たら、次のコードへ進みたいのですが、 下のコードでStatusTexttを書き出しても「ページが表示されました」まで取得できません。 Sub test() Dim objIE As InternetExplorer Dim i As Long Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.goo.ne.jp/" objIE.Visible = True Workbooks.Add Cells(1, 1) = objIE.StatusText i = 2 Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Cells(i, 1) = objIE.StatusText i = i + 1 Loop Cells(i, 1) = objIE.StatusText Set objIE = Nothing End Sub Do While objIE.Busy = True Or objIE.ReadyState <> 4 ここら辺のコードを弄ればいいような気がしますが、うまくいきません。 ご回答よろしくお願いします。