• ベストアンサー

vbsで開かれた別ウィンドウを制御したい。

いつもお世話になっております。 VBSで Dim oIE Set oIE = CreateObject("InternetExplorer.Application") oIE.Navigate("https://xxxx.jsp") 等でhpを自動的にクリックしたりして動かしています。 そのページ内にあるリンクをクリックすると、別ウィンドウで立ち上がるページがあるのですが、そのページを動かしたりする事は出来ますでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.3

[回答番号:No.1・2] の DOUGLAS_ です。  試しに、私のテストしたコーディングを掲載しておきます。  OKWave のトップページを開き、右上の宣伝をクリックして開いたページの最初のリンクをクリックするという作業です。 Option Explicit Dim myShell, SWC, oIE Set myShell = CreateObject("Shell.Application") SWC = myShell.Windows.Count Set oIE = CreateObject("InternetExplorer.Application") oIE.Visible = True oIE.Navigate ("http://okwave.jp/") Do While oIE.Busy Or oIE.ReadyState <> 4 'WScript.Sleep 100 Loop oIE.document.Links.Item(12).Click WScript.Sleep 5000 myShell.Windows.Item(SWC + 1).document.Links.Item(1).Click Set oIE = Nothing: Set myShell = Nothing

take_july
質問者

お礼

DOUGLAS_さん、サンプルまで用意して頂き、有難うございます。 お陰様で、解決する事ができました。 ほんと感謝です。 ありがとうございました。

その他の回答 (2)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

[回答番号:No.1] の DOUGLAS_ です。 >まだ新しいページが開ききっていないのかと思い、 >sleepを入れたりして待機させてみましたが、 >新しいページのdocumentが取得できませんでした。  VBA でしたら While oIE.Busy Or oIE.ReadyState <> 4: DoEvents: Wend と書くところなのですが、WSH の場合 Do While oIE.busy Or oIE.Document.readyState <> "complete" Loop でしょうか?  ご参考までに、下記の [質問者からのコメント] の >妥協作ということで、下記のコードになりました。 以下をご覧ください。 ●Navigate2 メソッドで開いた新しいタブをVBAで操作するには http://www.kotaete-net.net/Default.aspx?pgid=14&qid=6028449630

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

 予め、Shell.Application で Window の数を数えて(SWC)おいてから、 >別ウィンドウで立ち上がるページ を Item(SWC + 1) とすれば、 oIE.document.~~~ と同様に、 myShell.Windows.Item(SWC + 1).document.~~~ というような記述で >そのページを動かしたりする事は出来ます '------------------------------------------------------------------- Dim myShell, SWC, oIE Set myShell = CreateObject("Shell.Application") SWC = myShell.Windows.Count Set oIE = CreateObject("InternetExplorer.Application") oIE.Navigate("https://xxxx.jsp") 'そのページ内にあるリンクをクリックする oIE.document.~~~.Click 'そのページを動かしたりする myShell.Windows.Item(SWC + 1).document.~~~

take_july
質問者

補足

ご回答ありがとうございます。 このような方法があるのだなと勉強になります。 上記で出来そうでしたので、早速おこなってみたのですが、 myShell.Windows.Item(SWC + 1).document でdocumentを取得しようとすると "オブジェクトがありません。": 'myShell.Windows.Item(..)' というエラーが出てしまいます。 まだ新しいページが開ききっていないのかと思い、sleepを入れたりして待機させてみましたが、新しいページのdocumentが取得できませんでした。 ただ、myShell.Windows.Count をリンクを開く前に取得し、 新しいページのリンクを開いた後に、myShell.Windows.Countを取得するときちんと +1されておりました。 また、+1 せずに myShell.Windows.Item(SWC).document とすると、リンクを開く前の元のdocumentは取得する事が出来ましたので、方法はあっていると思うのですが。 なぜか新しいページが取得できないみたいです。 そのページが特殊だからでしょうか。社内サイトのページなのですが。。 上記のような情報で何か分かる事ありますでしょうか。 よろしくお願いします。

関連するQ&A