• ベストアンサー

WSHでタブ移動は可能ですか

WSHでブラウザーのある指定URLを開くまで実現できました(下記の例)が、タブキーで移動する操作を実現させ、移動した部分の文字がある特定の文字の時、またそこのURLに移動させたいのですが、可能でしょうか。 Set objIE = CreateObject ("InternetExplorer.Application") objIE.Navigate("about:blank") strURL = "http://・・・/" Set objShell = CreateObject("Wscript.Shell") objShell.Run(strURL)

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

#5>実際のプログラムです なるほど、 objIE とobjShell が別のプロセスなのが原因じゃないかと思います。 これだとobjIE を使う理由は無いような気がします。 画面の表示が完了しているなら SendKeys を使って BACKSPACE を送るか ALT+← で戻るが実現できると思います。

tach_ei
質問者

お礼

BLUEPIXY様へ できました。{BS}でOKでした。ありがとうございます。

その他の回答 (5)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

>どうもタブキーでリンク先に移動してENTERを送っても履歴が残らずgobackが有効にならないようです。 ENTER を送ったときに画面は変移しているのですよね? 画面が表示されて IEの←戻るのボタンが使えるようになっていれば GoBack( ) は使えます。 #3でもやっているように、 While IE.Document.readyState <> "complete": Wend '読込待ち とかして読込が完了してからでないと、GoBack( ) も使えません。 おそらくそういうことだと思いますが・

tach_ei
質問者

補足

while ・・・を追加して読み込みを完了していても(この前にwsh.sleep(6000)を挿入しております。) エラーメッセージ(エラーを特定できません)は同じでした。 以下実際のプログラムです Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate("about:blank") strURL = "http://・・・" Set objShell = CreateObject("Wscript.Shell") objShell.Run(strURL) WScript.Sleep(3000) for i= 1 to 16 objShell.SendKeys("{TAB}") WScript.Sleep(100) next objShell.SendKeys("{ENTER}") WScript.Sleep(6000) While objIE.Document.readyState <> "complete": Wend objIE.GoBack()

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#3>どうもタブキーでリンク先に移動しても履歴が残らずgobackが有効にならないようです。 ?? #3の話ですか? そうじゃないんですよね。 タブで移動した場合、クリックに相当するものとしてENTERを送ってやる必要がありますが、そういうことじゃないですか?

tach_ei
質問者

補足

説明が不正確で失礼しました。 どうもタブキーでリンク先に移動してENTERを送っても履歴が残らずgobackが有効にならないようです。 上記の意味です

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>「戻る」をWSHで実現する方法 勘違いしているかもしれませんが、簡単なサンプルを作ってみました。 動作としては、このQNo.2046770を開き、その他のプログラムをクリックしてカテゴリページを開き「戻る」を実行するというものです。 ---------------------------------------------------------------- Dim IE Dim Links, aLink Set IE = WScript.CreateObject("InternetExplorer.Application") 'このページ IE.Navigate ("http://okwave.jp/kotaeru.php3?qid=2046770") IE.Visible=true '表示する While IE.busy: Wend While IE.Document.readyState <> "complete": Wend Set Links =IE.Document.links '全てのリンクを調べる for each aLink in Links if aLink.innerText = "その他(プログラミング)" then 'リンクの文字列を調べる exit for '探していたリンクが見つかったらループを抜ける end if next aLink.click 'このリンクをクリックする While IE.Document.readyState <> "complete": Wend '読込待ち IE.GoBack() '戻る 'IE.quit '終了

tach_ei
質問者

補足

BLUEPIXYさん、回答ありがとうございます。ただ、GOBACKでエラーになります。調べましたが、どうもタブキーでリンク先に移動しても履歴が残らずgobackが有効にならないようです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>移動した先の文字の取り出しがわかりません。 実現可能かどうか試してないのですが、一応いくつかアイデアはあるのですが、とても面倒です。 タブ移動とは直接関係なく DOMを使って文字を取り出すのが良いと思います。 その場合は、WEBページの構造がわかっていないといけませんが。 ところで タブキーによる移動とかをWSHから行おうとする目的はなんですか? 目で見て行う必要があるなら、直接キーボードから操作をすればいいし、 自動で行うなら、タブキーを使う必要がない(DOMで内容を読み出し特定の文字のリンクを取り出すことはできます)と思うのですが。

tach_ei
質問者

補足

BLUEPIXYさん、また回答いただきありがとうございます。DOMを利用する方法を調べてみます。タブキーを利用するのはIEの「戻る」と合わせてダウンロードするサイトを移動するためです。今、この「戻る」をWSHで実現する方法で困っているのですが、ご存じありませんか。よろしくお願いします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

SendKeys を使ってタブやエンターを送ることでできるような気がします。 最初に開いたURLのページの構造が判っているのだったら、 IEからDOM的手法で表示されているページの部分を切り出すことも可能と思います。

tach_ei
質問者

補足

sendkeysがあるのを知りませんでした。これで一歩進めます。あとTABで移動したとき、移動した文字の取り出しがわかりません。

関連するQ&A

  • IEを探すプログラムがうまくいきません。

    VBScriptで指定するサイトが開いていなかった場合とある処理を行い、とあるサイトが開いていれば別の処理をし終了させることをやっていますがうまくいきません。 自分の考えとしては 1・開いているIEをくるくるループ回して探す 2・その中にヤフーがあればフラグをTrue処理   それ以外はFalse処理 これだけで終わりにしたいのですが・・・ Dim objIE Dim objShell Dim objWindow Dim WinExist Dim strURL Dim Flug Dim strURL2 strURL = "http://www.yahoo.co.jp/" strURL2 = "http://www.google.co.jp/" 'IEが起動して無い場合プログラムが起動しないのでダミー立ち上げ Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate "about:blank" objIE.Visible = True Set objIE = Nothing WinExist = False Set objShell = CreateObject("Shell.Application") For Each objWindow In objShell.Windows If TypeName(objWindow.Document) = "HTMLDocument" Then WinExist = True Set objIE = objWindow End If Next If objIE.LocationURL = strURL Then Flug = True Else If objIE.LocationURL <> strURL Then Flug = False Else WScript.sleep(1) End If If Flug = False Then Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate strURL2 objIE.Visible = True Set objIE = Nothing End If ' 'いろいろな処理があるが省く ' If Flug = True Then msgbox "ヤフー存在" End If End If 絶対にフラグがTrueになることがありません。 Excelでデバッグしてみましたがなぜうまくいかないのかが理解できておりません。 自分としては開いているIEをぐるぐるとまず回ってヤフーが開いていればTrue時の処理を行い終了、 なければFalse時の処理を行うという風にしたいです(無限ループではありませんでした) For eachを使っているので途中でIf Flug以降の処理を行ってしまうのも無駄な繰り返しで困ってしまいます。 そこでフラグを立てることを考えたのですがどうも思うようにいきません。 ボキャブラリが足りませんが、いい知恵を貸していただけないでょうか?

  • WSH動作しない!!(WScript.SleepとSendKeys?)

    WSHが動作しなくて困っています。 動作するコードとしないコードは次のとおりです。 いずれも@ITに掲載されているサンプルコードをそのままです。 動作しないコードについても,notepadの起動まではできます。 どうやら,sleepとsendkeysが動いてくれないようです。 <正常に動作するコード> Set objShell = WScript.CreateObject("WScript.Shell") WScript.Echo "メモ帳を起動します。" objShell.Run "notepad.exe" http://www.atmarkit.co.jp/fwin2k/operation/wsh03/wsh03_02.html <動作しないコード> Set objShell = WScript.CreateObject("WScript.Shell") objShell.Run "notepad.exe" WScript.Sleep 1000 objShell.SendKeys "hello" http://www.atmarkit.co.jp/fwin2k/operation/wsh05/wsh05_04.html ■動作環境 Win XP Pro IE 6.0 ちなみに,WSHファイルに対する実行権限はあります(フルコントロールです)。 以上なのですが,何か点検するべき事項などありましたらご教示ください。

  • VBでのContinueが間違っているとき

    http://oshiete1.goo.ne.jp/qa4564345.htmlではありがとうございました。 教わったことを参考にやってみたのですがうまくいきません。 Continueの部分がうまくいくPCといかないPCがあるのでどうしたらいいか分からなくなってしまいました・・・ Option Explicit Dim objIE Dim objShell Dim objWindow Dim WinExist Dim strURL Dim strURL2 Dim Flug strURL = "http://www.yahoo.co.jp/" strURL2 = "http://www.google.co.jp/" WinExist = False Set objShell = CreateObject("Shell.Application") For Each objWindow In objShell.Windows If TypeName(objWindow.Document) <> "HTMLDocument" Then Continue End If WinExist = True Set objIE = objWindow If objIE.LocationURL = strURL Then Flug = True Exit For End If Next If Flug = True Then msgbox "ヤフー存在" Else msgbox "別の処理を行なう" If WinExist = False Then 'IEが無い場合 起動する Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate strURL2 objIE.Visible = True Set objIE = Nothing End If End If

  • objIE  2個目のサイズが適用されません。

    VBAです。 Dim objShell As Object Dim objIE As New InternetExplorer Const READYSTATE_COMPLETE As Long = 4 Sub test1() Set objShell = CreateObject("Shell.Application") objIE.Visible = True objIE.Top = 0 objIE.Left = 0 objIE.Width = 100 objIE.Height = 100 objIE.navigate "http://www.goo.ne.jp/" objIE.Navigate2 "http://www.goo.ne.jp/", 2048 Set objIE = Nothing Set objShell = Nothing Set objShell = CreateObject("Shell.Application") objIE.Visible = True objIE.navigate "http://www.goo.ne.jp/" objIE.Navigate2 "http://www.goo.ne.jp/", 2048 'できない objIE.Top = 20 objIE.Left = 20 objIE.Width = 100 objIE.Height = 100 Set objIE = Nothing Set objShell = Nothing End Sub のように二つのブラウザを立ち上げて サイズを変えたいのですが 2個目のサイズが適用されません。 エラーにもなりません。 なぜでしょうか?

  • WSHでのIE制御について

    現在、WSHにて、メニューバー、ステータスバー、ツールバー、アドレスバーの 無いIEのウインドウを開いています。ソースは以下の通りです。  Set objIE = WScript.CreateObject("InternetExplorer.Application")  objIE.Navigate("http://www.goo.ne.jp")  objIE.MenuBar = False  objIE.StatusBar = False  objIE.ToolBar = False  objIE.AddressBar = False  objIE.Visible = True  Set objIE = nothing  WScript.Quit これで、やりたい事は出来ているのですが、アドレスバーを非表示にした場合、 ウインドウタイトルが、 http://www.goo.ne.jp - goo Microsfot Internet ... と、ページのアドレスが表示されます。 アドレスバーを表示した場合には、 goo Microsfot Internet ... と、アドレスは表示されません。 ここで、質問なのですが、アドレスバーを非表示にしたままで、後者の様に、 タイトルバーにアドレスが表示されない様にする事は可能なのでしょうか?。 以上、よろしくお願いします。

  • 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}") --------------------------------------------------

  • インターネットで調べてVBSで下のようなものを作ってみました。

    インターネットで調べてVBSで下のようなものを作ってみました。 やりたいことは、IEを起動して複数のサイトを複数のタブで表示 したいのですが、サイトの種類分IEも起動してしまいます。 考えているようなことはできないのでしょうか。 ========ここから下です======== Option Explicit Dim objIE Dim objShell 'Shell.Application Set objShell = CreateObject("Shell.Application") Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True 'IEウィンドウを表示 objIE.Navigate2 "http://www.okwave.jp/" Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True 'IEウィンドウを表示 objIE.Navigate2 "http://www.google.co.jp/" Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True 'IEウィンドウを表示 objIE.Navigate2 "http://www.yahoo.co.jp/" ======================= よろしくお願いいたします。

  • 複数のタブを開きたい IE

    IE9を使っています。 画像のようにタブを二つ開くにはどうすればいいでしょうか? Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub だと一つのタブしか開けません。 Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" objIE.Navigate "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub にしても Sub test() Dim objIE As InternetExplorer Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp/" objIE.Navigate2 "http://www.yahoo.co.jp/" Set objIE = Nothing End Sub にしても1つのタブしか開けないです。 ご回答よろしくお願いします。

  • 【VBA】IEのリンクを新しいタブで開く

    VBAでIEを制御しリンク(アンカー)<a href="***">を新しいタブで開くようにしたいのですが可能でしょうか? 仮にグーグルのトップページ(http://www.google.co.jp/)の『検索オプション』(http://www.google.co.jp/advanced_search?hl=ja)を新しいタブで開くとします 実際に開きたいリンクのURLは固定ではないためURLの指定では開けませんが、飛びたいリンクの文言(『検索オプション』)は固定です リンクに飛ぶ前に飛ぶ先のURLを取得する仕方か、Shift+Ctrl+クリックのようにリンクを新しいタブで開く方法を教えてください 一度普通にリンクに飛んでからURLを取得し、戻ってから新しいタブで開くぐらいしかできないのでしょうか? Sub 新しいタブで開く() Dim objIE As Object Dim objShell Dim URL As String Set objShell = CreateObject("Shell.Application") For n = objShell.Windows.Count To 1 Step -1 Set objIE = objShell.Windows(n - 1) If Right(UCase(objIE.FullName), 12) = "IEXPLORE.EXE" Then objIE.Navigate "http://www.google.co.jp/" Exit For End If Next Set objShell = Nothing objIE.Visible = True Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop For Each Obj In objIE.Document.getElementsByTagName("a") If Obj.innerText = "検索オプション" Then Obj.Click Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop URL = objIE.Document.URL objIE.GoBack Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Navigate URL, CLng(&H800) Exit For End If Next End Sub よろしくお願いいたします

専門家に質問してみよう