2011-03-10 9 views
0

IE DOMにプロセスにアクセスする方法はありますか?たとえば、現在表示されているページを読み込んでデータを取り込むWebページスクレーパーです。私は、ページをダウンロードして処理するいくつかの方法を見てきましたが、ウェブサイトが動的な結果を返してログインする必要がある場合、これは機能しません。IEにアクセスできないC#で処理中のDOMが処理中です。

私はデータにアクセスしてwcf経由で共有するためにbhoを書く必要はないと考えています。私は、C + +とmsaaサーバーを使用してデータを取得するいくつかの例を見てきましたが、実際にはC++ヘルパーを使用しないことを望んでいるので、

TIA。

答えて

2

あなたが何をする必要があるかによって、WatiNのような単純なものを使うことを検討してください。これは、ブラウザのインス​​タンスをインスタンス化し、ツリーを歩くための素晴らしいツールです。 DOMの操作は非常に簡単で、よく文書化されています(Web上の多くの例があります)。

+0

+1。これを考えるのを忘れてしまった。 WebRequest +パーサが提供できるものを超えて、彼のニーズのほとんどを満たすだろう。 – meklarian

1

スクレイピングとリクエストのみを実行する場合は、.NETに付属のWebRequestオブジェクトを使用して作業するのが最もよいでしょう。

WebRequest Class @ MSDN

あなたがIE DOMで表現されているものへの正確なアクセス権を持っている必要があります場合は、あなたがアクセス権を取得するには、Microsoft Active Accessibilityのを使用する必要があります。ターゲットIEウィンドウのウィンドウハンドルまたは信頼できる場所を特定でき、それがユーザーセッションで表示される場合は、Active AccessibilityがターゲットIEウィンドウにアクセスしてDOMを掘り下げる最善の方法です。 C++を使用することは絶対に必要なわけではありませんが、C++でこれを行う方が簡単かもしれません。

Active Accessibility User Interface Services @ MSDN

あなたが列挙プロセスから取得したDOMのウィンドウのいずれかからデスクトップまたはフレームウィンドウのハンドルを検索するためにEnumChildWindowsを使用したい(またはブルートフォースクエリ)でしょう。 .NETでは、プロセスの列挙はSystem.Processクラスから利用できます。

EnumChildWindows @ MSDN

EnumWindows signature @ pinvoke.net
EnumChildWindows signature @ pinvoke.net

Process.GetProcesses() @ MSDN
Process.MainWindowHandle @ MSDN

あなたはCOMを追加し、C#でDOMを歩くことができるようにし、MSAAに話をする必要がある型宣言を追加するにはプロジェクトへの 'Microsoft HTML Object Library'への参照、およびMSAAのP/Invokeシグネチャの追加が含まれます。

AccessibleObjectFromWindow Signature @ pinvoke.net

あなたはMSAAを呼び出すことができたら、ウィンドウハンドルからActive Accessibilityの経由のIDispatchを取得します。 OBJID_NATIVEOMでお送りしたい場合は、IDispatchで質問することができます。ここから

Retrieving an IAccessible Object @ MSDN
AccessibleObjectFromWindow() @ MSDN

IDispatchは、DOMスクリプトモデルのメソッドのすべておよび多くを持っている、IHTMLWindow2またはIHTMLDocument2(およびそれらの誘導体)にキャストすることができます。残念ながら、どのメソッドがこのメソッドで返されたかはわかりませんが、いずれの場合でもIHTMLWindow2にはdocumentというプロパティがあります(スクリプトにはwindow.documentと同じです)。どちらも、IHTMLDocument2で表されるDOMへのアクセスを提供し、派生したすべてのインターフェイスを解決することができます。

関連する問題