• 締切済み

VBから操作中のIEが行っているhttp通信内容

自動売買のシステムを開発しようと考えています。 VBからIEを操作しているとき、開いているページがリアルタイムで変化するレートや株価を含むような動的なホームページの場合、やり取りしているhttp通信の内容逐一を取得する方法はないでしょうか? 例えばこのページ(http://www.virtualfx.jp/)ではF12開発者ツールで調べるとflash内でhttp通信を行っているようでレスポンスの本文も読むことができます。 開発者ツールで見れるので、VBからIEオブジェクトを操作している場合でもできると思うのですが、調べてもよくわからなかったので、教えていただけないでしょうか? よろしくお願いします!

みんなの回答

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.3

(古いIEのみだけど)APIフックによるMSのツールはありますね。 STRACE http://www.microsoft.com/en-us/download/details.aspx?id=7643 Detours http://research.microsoft.com/en-us/projects/detours/

HNxxxxx
質問者

お礼

ありがとうございます。 参考になりました。

  • __hide__
  • ベストアンサー率66% (2/3)
回答No.2

ちょうどIE用のライブラリを書いていたところですので、ひとつのアプローチを紹介します。まず、最初におことわりしますが、誰も見たことに無いようなマジックを実現するには、それなりの種が必要です。また、必然的にその種は通常では実現できないような事を可能にしますので、コンピューターに対してある程度の知識が必要です。具体的にはC++でプログラミングできることが条件となります。 IInternetSessionは動作プロセス毎にカスタマイズされたプロトコルを登録するために存在し、登録したIInternetProtocolインターフェースを通じてブラウザが解釈する前のサーバーレスポンスを得ることができます。また、ブラウザ側が送信するデータを補足するためには、そこで使用される低水準APIの関数アドレスを偽装するAPIフックが必要になるかも知れません。 上記手法で重要なのはIEが実行しているプロセス内にプログラムが存在しなければならないことす。IEはWebBrowserコントロールとは異なり、独自のプロセス(しかも分散プロセス)を生成して動作しますから、その捕捉、及び侵入には高度なテクニックが必要です。 その手間を省く可能性があるのは、HTML中にOBJECT生成できるCOMDLLを用意することですが、この場合、自身が生成される前の通信については知りえないことになりますし、他のURLへナビゲートされた以降も無力化してしまいます。 「VBからIE」という表現からは「手軽に」という事を重要視されているのかも知れませんが、世の常として「手軽に可能な事」は誰しもが実現済みですから「目新しいことではない」になりますし、「誰も見たことが無い」を実現するにはそれなりの覚悟が必要になります。 現在開発中のIE用ライブラリは「IEのボット動作」を目的としていますので、ご質問者の「自動売買」という目的に合致する部分があるかも知れません。私事になりますが、そういったニーズがあるんだという事に気づかされた有意義な質問だと感じております。

HNxxxxx
質問者

お礼

ありがとうございます! 少し調べましたがやはり一筋縄ではいかないようですね。 APIフックによる方法とローカルプロキシを挟む方法も検討しつつ、もう少しいろいろと勉強します。 取り急ぎお礼申し上げます。

  • pa_cotta
  • ベストアンサー率43% (25/58)
回答No.1

いや、無理なんじゃないですかね…。 開発者ツールはあくまでもIE側のツールであって、VBはIEを起動してるだけでVB側のプログラムでhttpリクエストを 投げてるわけじゃないですよね。 ブラウザを使わずに直接リクエストを投げているのであれば、APIがあるのでそれを使えばいけると思います。

HNxxxxx
質問者

お礼

回答ありがとうございます。 flash内なのでソースが読めずに、そう簡単にもいかず、、 とりあえず回答ありがとうございます。

関連するQ&A

  • 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のコントロールのブラウザオブジェクトで これと同じ操作をするにはどうすればよいか 教えて頂けませんでしょうか?

  • VBでのIE操作

    VBでのIE操作をしようとして色々調べています。 色んなサイトを見ながら途中までは何とかできましたが、どうしてもリンク先を表示できません。 お分かりになる方いましたら、お力添えいただければ幸いです。 状況: Excel2007使用  IE7  VB初心者です。 やりたい内容: VBでIEを立ち上げる ↓ ページからリンクをクリックする (ページ上に画像が貼り付けてあって、そこにURLくっついててハイパーリンクになっている。) (セキュリティの関係でハイパーリンク先を初期で表示することはできない。) ↓ 表示されたページに検索したい項目を入力 ↓ 結果をエクセルに反映する。 以上の作業をVBで組もうと思ってます。 よろしくお願いします。 Option Explicit Sub IE_Test() 'IEの起動 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True '処理したいページを表示します。 objIE.Navigate "(表示したいページ)" 'ページの表示待ち   While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True DoEvents Wend '開かれたIEを探す。 Dim objSHELL As Object Dim objWINDOW As Object Dim newIE As InternetExplorer '調べる項目に対して、、、 For yCNT = 3 To 102 ' If Trim(Cells(yCNT, 1)) = "" Then Exit For 'A列が空白になったらループを抜ける ここがわからない。。。 (画像になっているハイパーリンクをクリックしたい、、、) 'シェルのオブジェクトを作成する Set objSHELL = CreateObject("Shell.Application") Set newIE = objSHELL.Windows(objSHELL.Windows.Count - 1) Set objSHELL = Nothing '念のため、新しいウインドウの表示を待つ While newIE.readyState <> READYSTATE_COMPLETE Or newIE.Busy = True DoEvents Wend 'ページが表示されたので、表示された文章に対して、処理を行います。 newIE.document.all("phone_no").Value = Cells(yCNT, 1) 'A列の文字を参照する newIE.document.all("exec").Click '表示されたウインドウ(newIE)からデータをセットする Cells(yCNT, 2) = newIE.document.body.innerText '検索の結果をエクセルに反映 '新しいIE(子IE)を閉じる newIE.Quit Set newIE = Nothing '前のIE(親IE)を閉じる   objIE.Quit set objIE = Nothing Next yCNT End Sub 上記が現在までのできているコードです。 ここにも色々間違いがある可能性もあります。 ご指摘頂けましたら幸いです。 よろしくお願いします。

  • VBでのIE操作

    VBでのIE操作をしようとして色々調べています。 色んなサイトを見ながら途中までは何とかできましたが、どうしてもリンク先を表示できません。 お分かりになる方いましたら、お力添えいただければ幸いです。 状況: Excel2007使用  IE7  VB初心者です。 やりたい内容: VBでIEを立ち上げる ↓ ページからリンクをクリックする (ページ上に画像が貼り付けてあって、そこにURLくっついててハイパーリンクになっている。) (セキュリティの関係でハイパーリンク先を初期で表示することはできない。) ↓ 表示されたページに検索したい項目を入力 ↓ 結果をエクセルに反映する。 以上の作業をVBで組もうと思ってます。 よろしくお願いします。 Option Explicit Sub ie_test() 'IEの起動 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True '処理したいページを表示します。 objIE.navigate "処理したいページ" 'ページの表示待ち While objIE.readyState <> READYSTATE_COMPLETE Or objIE.Busy = True DoEvents Wend '開かれたIEを探す。 Dim objSHELL As Object Dim objWINDOW As Object Dim newIE As InternetExplorer Dim wait_time As Date Dim yCNT As Long Dim i As Integer '表示待ち wait_time = DateAdd("s", 2, Now()) Do While Now() < wait_time DoEvents Loop 'リンクの貼ってある画像をクリック For i = 0 To objIE.document.images.Length - 1 If InStr(objIE.document.images.Item(i).outerHTML, "image/btn131b1.gif") > 0 Then objIE.document.images.Item(i).Click End If Next '表示待ち wait_time = DateAdd("s", 2, Now()) Do While Now() < wait_time DoEvents Loop 'シェルのオブジェクトを作成する Set objSHELL = CreateObject("Shell.Application") Set newIE = objSHELL.Windows(objSHELL.Windows.Count - 1) Set objSHELL = Nothing '新しいウィンドウのログインボタンを押す Dim objINPUT As Object 'Inputタグ格納用 For Each objINPUT In newIE.document.all.tags("INPUT") If objINPUT.Value = "ログイン" Then objINPUT.Click Exit For End If Next '調べる項目 For yCNT = 3 To 1002 ' If Trim(Cells(yCNT, 1)) = "" Then Exit For 'A列が空白になったらループを抜ける 'ページが表示されたので処理を行います。 newIE.document.all("phone_no").Value = Cells(yCNT, 1) 'A列の文字を参照する newIE.document.all("exec").Click ※ここでオブジェクト変数。。。のエラーが発生する※ '表示待ち wait_time = DateAdd("s", 2, Now()) Do While Now() < wait_time DoEvents Loop '表示されたウインドウからデータをセットする Cells(yCNT, 2) = newIE.document.body.innerText '検索の結果をエクセルに反映 '新しいIEを閉じる newIE.Quit Set newIE = Nothing '前のIEを閉じる objIE.Quit Set objIE = Nothing Next yCNT End Sub 初心者なので色々調べたのですがわかりませんでした。。。

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

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

  • VBによるIE操作におけるFRAMEのソースは?

    VBでIEを操作していますが、フレームで構成されたページがあります。そのFRAMEタグは、JavaScriptのdocument.writeで既述されています。このためか、そのページのフレーム数は0となっています。 このようなFRAMEに対応するソースを処理するには、どのようにすれば良いのでしょうか?

  • VB6で、WindowsXPのタスクマネージャの操作方法

    普段のファイルのセットアップやUSB通信などのファイルの通信を速くするソフトを作りたいです。 タスクマネージャのプロセスの(それぞれのアプリケーションの)優先度の設定を「リアルタイム~低まで」自由にVB6で変更できればよいと思うのですが、 VB6で、タスクマネージャを操作する方法はありますか?出来たらタスクマネージャを開かないでやりたいです。(優先度の設定同等の操作が出来ればよい) 何か良い方法があれば教えてください。

  • VBで、IEオブジェクトでダイアログが出たとき操作する。

    Dim wbrowser as object Set wBrowser = CreateObject("InternetExplorer.Application") ’item(11)はボタン wBrowser.all.Item(3).Click ここで、 通常なら問題なく次ページに移動するのですが、 メッセージボックス(javaのalertかconfirmなど)が表示され 「はい・キャンセル」や「OK」 を選択する、メッセージボックスが表示されるような場合、その前 にIEオブジェクトに制御が移動するようで、最後のクリックした段階で VB側から制御不能ととなります。 VBのみでメッセージボックスを閉じる方法等 何方か解決策がありましたらお教え下さい。 ちなみにぐぐりまくっていたら、 こんな人力検索に行き当たりました。 http://q.hatena.ne.jp/1174026115 解決はしているようですが、 ソースがないので私にはわかりませんでした・・・

  • 【続・IEを操作したい】

    C++で、 System.Windows.Forms.WebBrowser を使って、 既に開かれているIEを操作したいです。 Shdocvw.dll を間接的に使うのはアリで、 Shdocvw.dll を直接は使わずに行いたいです。 (.NETのラッパーを使っても良いですし、COMインタフェースを使っても良いです。 実質、やっていることは同じなのにナゼ?と感じると思うのですが、色々事情があるのです。) 調べて、結構分かってきているつもりなのですが、(2)の部分で困っています。 (1)IEのウィンドウを羅列する。  IShellWindows::FindWindowSW  で取っています。 (2)そのIEの各タブで、任意のページ(例えばhttps://www.google.co.jp)があったら、それをIEオブジェクトに代入。 (備考:試したこと) IDispatch* の  QueryInterface を使って、 IWebBrowser2* IHTMLDocument2* などと、段々掘り下げていって、HTMLElementを操作しようとしていたのですが、、 (要件) システムのメンテナンス性というか、  誰でもプログラムを修正できるようにするために、  System.Windows.Forms の配下のHTML操作系のクラスで取り扱いたいのです。  何卒宜しくお願いします。 ***********************************************************  これは想像ですが、  Shell.Applicationのインスタンスを作っておいて、  現在のウィンドウのリストから、Windows のアイテムを取って、  そのアイテム(ウィンドウ?)の名前?クラス?を取って、  path == "iexplore.exe" で実行されているものであるなら、  IEオブジェクトに代入というようなことができたりするのかなぁ、、  と捉えています。

  • VBとC#の違いって何?

    Visual Basic 2008 Express EditionとVisual C# 2008の違いって、 何ですか? MS社の記述では、 [VB] Windows アプリケーションの楽しく簡単な作成方法に興味を持つ、 趣味で開発を行うユーザー、プログラミング初心者、および学生に 最適な開発ツールです。 [C#] ダイナミックなアプリケーションを開発するための、 シンプルで楽しく、学びやすい開発ツールです。 .NET Framework 上で Windows 用アプリケーションを開発するときや、 オブジェクト指向を学ぶときに最適です。 と書かれているのですが、 機能数、不具合数はどっちが多いのでしょうか? VB,C#も同じ様なダイナミックアプリケーションを開発でき、 シンプルなのですが・・・。未だ区別が付きません。 C#の場合、フォーム等の詳細設定は出来ますが、 VBでは簡易設定のみ。 ソフトウェア開発をする場合、どっちが得をするのか? ↑の回答をお待ちしてます。

  • IE操作の際表示ページのキャシュを保存させたくない。

    VBやVBSなど、 InternetExplorer.Applicationオブジェクトを 使ってIEを操作して、WEBページを巡回する際。 ページのキャシュが貯まって処理が重くなるようなのですが。 処理中のキャシュを無効にする方法はありませんでしょうか? ■参考 CPUの使用率やメモリは充分空きがあるのに ハードディスクの空き容量を用意していないため。 処理が重くなるようです。