• ベストアンサー

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

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

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

  • ベストアンサー
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.1

とりあえず Set ie = GetObject("", "InternetExplorer.Application") Set ie = GetObject(, "InternetExplorer.Application") のどちらかで取得できると思います。 Set ie = CreateObject("Shell.Application").Windows(0) で取得する方法もあるらしいのですが、普通のフォルダもieとして認識してしまうため、純粋にieだけを取得する場合はチェックが必要だと思います。 取得したieでyahooで"おいしいラーメン"の検索結果の件数を表示します。 Sub sample() Const READYSTATE_COMPLETE = 4 Dim ie As Object Dim obj As Object For Each obj In CreateObject("Shell.Application").Windows If TypeName(obj.Document) = "HTMLDocument" Then Set ie = obj Exit For End If Next If ie Is Nothing Then MsgBox "ありません" Exit Sub End If MsgBox "取得したieの情報" & vbCrLf & ie.LocationName & vbCrLf & ie.LocationURL & vbCrLf & TypeName(ie.Document) ie.Navigate "www.yahoo.co.jp" 'yahooへ Do While (ie.ReadyState <> READYSTATE_COMPLETE) Or ie.Busy: Loop '表示待ち ie.Document.forms("sf1").elements("srchtxt").Value = "おいしいラーメン" '検索文字 ie.Document.forms("sf1").submit '検索 Do While (ie.ReadyState <> READYSTATE_COMPLETE) Or ie.Busy: Loop '表示待ち If InStr(ie.Document.body.innertext, "に一致するウェブページは見つかりませんでした") > 0 Then MsgBox "0件" Else MsgBox ie.Document.all("yschinfo").all(6).innertext & "件" End If Set ie = Nothing End Sub

akaginoyama
質問者

お礼

サンプル有難うございます!! これが、実現したかったので大変助かりました。

関連するQ&A

  • VBSでIE操作

    VBSでIEの操作を自動化するプログラムを作成しています。 ドロップダウンリストを選択する処理で、サイト側のソースが「name="birthday[Y]"」や「name="birthday[m]"」、「name="birthday[d]"」だった場合、単純な指定では動作しないのでしょうか? VBS上では「IEオブジェクト.Document.forms(0).("birthday[Y]").value = "1983"」という記述で試してみたところ、「オブジェクトがありません。:'Y'」とエラーになってしまいます。 birthday[?]は配列的なもので特別な指定の仕方があるのでしょうか? プログラムを組み始めて間もないため記述に不足等あるかと思いますが、アドバイスいただけると幸いです。

  • VBスクリプトでのIE操作

    ローカルPCでVBスクリプトを実行し、IEを操作しております。 ホームページなどを自動で進んでいく際、フォームのボタンを押す必要が ありますが、そのHPのHTMLソースを見てもボタン名(name)やフォーム名 が指定されていない場合はどのようにボタンを押したら良いのでしょうか? 下記の構文を使ってボタンをクリックしたりチェックボックスにチェックしたりしております。 「IEオブジェクト.Document.フォーム名.ボタン名.Click」 この「フォーム名」や「ボタン名」が不明な場合のクリックの仕方が 知りたいです。よろしくお願いします。

  • innerHTMLに追記した場合のjs動作

    WSHなどでIEオブジェクトを用いて、 documnet.innerHTML += などでHTMLを動的に生成した場合、 <script>内に記述したものが動作しません。 これはどの様にするべきでしょうか? ※別途HTMLを作成せずに動的なhtml生成での話になります。

  • VBSのIEオブジェクトでフォームデータ送信する

    ■質問 通常IEオブジェクトを使ってフォームにセットされたデータを サブミットするには、 IE.Document.forms("").elements("").value = "" IE.Document.forms("").submit() と行うと思うのですが。 例えば下記のようなフォームを送信する際、 フォームのある"http://test.com/login_form" ページにわざわざ移動せず 直接"http://test.com/action"の "hidden"のエリアに対してデータを送信 する方法を教えて頂けませんでしょうか? また、Form1に複数のエレメントが存在する場合 全てのエレメントの値を送らないと正しく処理 できないでしょうか? ■"http://test.com/login_form" のHTML <form name="Form1" method="post" action="/action"> <input type="hidden" name="ID" value="1234"> <input type="submit"> </form>

  • VBscriptからIE11起動

    windows7(x64) IE11 IEを起動するスクリプトを.vbs作成しました。 vbsファイルをダブルクリックすると、↓エラーが発生するときがあります。 「 WScript.CreateObject: "InternetExplorer.Application" というオブジェクトを作成 できませんでした。」 ↓SRCです。 Dim IE Set IE = WScript.CreateObject("InternetExplorer.Application", "Event_") IE.Visible = True IE.Navigate ("http://www.yahoo.co.jp") set IE = nothing 数秒待ったり、vbsを連打すると起動します。 プロパティ(vbs右クリック)のスクリプトタブで実行時間を10秒にしてみても起動できないことがあります。 オブジェクトを作成しない方法はありますか? また、失敗している原因はなんでしょう?

  • IE7のVB.NETでの操作

    Dim IE as Object Dim f As Object IE = CreateObject("InternetExplorer.Application") f = IE.document.forms(0) f.sentaku.click() このようにしてIEのボタンを押そうと考えているのですが、f = IE.document.forms(0)のところでエラーがでて止まってしまいます。 IE7はこのような操作はできなくなってしまったのでしょうか。 IEを終了して開き直して試しても同じ結果で困っています。 解決策を教えてください。 よろしくお願いします。

  • VBでブラウザを操作するには?

    ■利用環境 WinXP SP3 VB2008 ExpressEdition IE7 ■質問 VB始めたばかりで初心者です。 VBSで行っていたIEオブジェクトの自動操作をVBのフォーム デザインを使ってビジュアル的に作り変えたいのですが MSDNもろくに読めなくて前に進めません。 VBは、イベント駆動と言うのは、理解しているつもりですが、 CreateObject("InternetExplorer.Application") とブラウザコントロールの違いに戸惑っています。 IEオブジェクトとWebBrowserオブジェクトの使い方の違いの事です。 VBSのIEオブジェクトで行っていた操作は、 IE = CREATEOLEOBJ("InternetExplorer.Application") IE.visible = True IE.navigate(URL) IE.document.body.InnerHTML と言う操作をしたいのですが、 できれば、このように私が慣れているIEオブジェクトの操作で ページ表示だけ、VBのブラウザオブジェクトに反映させる事が できれば良いのですが、難しければ、 VBのコントロールのブラウザオブジェクトで これと同じ操作をするにはどうすればよいか 教えて頂けませんでしょうか?

  • 起動済のIEから.NET FrameworkのHtmlDocumentを取得できますか?

    【環境・言語】Windows XP + IE6 + Visual Basic 2008 既に起動しているInternet ExplorerのオブジェクトをShellWindowsから探して、SHDocVw.InternetExplorer型の変数(objIE)に代入してあります。   Dim objIE As SHDocVw.InternetExplorer   'ShellWindowsから目的のIEオブジェクトを探してobjIEに代入 ここから、mshtml.HTMLDocumentを取得するところまでは分かります。   Dim objDoc As mshtml.HTMLDocument = CType(objIE.Document, mshtml.HTMLDocument) これではなくて、.NET FrameworkのHtmlDocumentクラス(System.Windows.Forms名前空間)のオブジェクトを取得することはできるでしょうか? ↓のように無理やりやってみたら、   Dim objDoc2 As System.Windows.Forms.HtmlDocument = CType(objIE.Document, System.Windows.Forms.HtmlDocument) ↓のようなエラーが出ました。   System.InvalidCastException はハンドルされませんでした。   Message="型 'mshtml.HTMLDocumentClass' の COM オブジェクトをクラス型 'System.Windows.Forms.HtmlDocument' にキャストできません。COM コンポーネントを表す型のインターフェイスを COM コンポーネントを表さない型にキャストすることはできません。ただし、基になる COM コンポーネントがインターフェイスの IID の QueryInterface 呼び出しをサポートする場合は、インターフェイスにキャストすることができます。" mshtml.HTMLDocumentを使ってHTMLを解析していくと、COMオブジェクトの解放が大変そうなので、できれば.NET Frameworkの中で操作したいと思っています。逆(.NET Framework→COM)はHtmlDocument.DomDocumentで簡単に出来るようですが、COMから.NET Frameworkへの変換は出来ないんでしょうか?

  • vb スクリプトで IEを起動するには

    1. .vbs ファイル に記述するスクリプトで、IEを起動するにはどうしたらいいのでしょうか。 2. .vbs ファイルから、他の .vbs ファイルを実行させるにはどうしたら良いでしょうか。 どちらか1つでもけっこうですのでおわかりになる方よろしくお願いします。

  • FORM解析のための仕様確認

    VBSを利用してフォームから情報を取り出したり自動で入力したりするアプリケーションを組んでいます。ネットでパターンを幾つか勉強して大体は正しく動作するのですが一部の処理がうまくいきません。行き当たりばったりで理解が追い付いていない所があると感じています。 FORMの正式な詳細仕様について分かり易く書かれているサイト、オブジェクトとしてFORMを操作するためのVBSの各種メソッド、FORM解析について解説しているサイト(書籍でも構いません)があれば教えてください。 例: objIE.document.Forms(0).Submit objIE.document.Forms("").elements("").Value 等 よろしくお願いします。

専門家に質問してみよう