0

こんにちは皆さん、私は過去数週間、私を悩ませている問題を抱えています。

私が達成しようとしていること: ユーザー エージェント (開始時に 1 回) とリファラーを変更できる Web ブラウザー コントロールが必要です。しかし、最も重要なのは、URL の応答を確認できることです。つまり、たとえば、Web サイトに移動すると、応答として画像/Javascript ファイル/動的 URL が返されます。動的変数を持つ URL にアクセスする必要があります (通常の Web ブラウザー コントロールでは表示されません。フィドラーコアを使用する以外にアクセスしないでください)。

私は webbrowser + fiddlercore でそれを行うことができました。これらの URL アドレスを使用して、これまでに見たり実行したりできることです。問題は、このプログラムのいくつかのインスタンスを実行した場合 (または、プログラムに URL 応答を処理するための自動化が含まれている場合は 1 回実行した場合)、スタックするか、動作しないことでした。私はそれを修正して機能させようとしましたが、正しく機能しないハックなソリューションです。httpwebrequest を Web ブラウザーとして使用したかのように、これらの URL にアクセスする簡単な方法が必要です。なぜウェブブラウザとして必要なのですか? 私の仕事のやり方では、すべてのトラッキング ピクセル、スクリプト、画像などを実行する必要があります。

4

1 に答える 1

1

WinForms アプリで System.Windows.Forms.WebBrowser コントロールを使用して、webBrowser.URL プロパティを目的のページの URL に設定します。

Web ブラウザーの DocumentCompleted イベントは、ページが読み込まれた後に発生します。動的に読み込まれる JavaScript は、それまでに完了する必要があります。DocumentCompleted イベントをフックし、webbrowser.Document.Images を使用して、ページ上のすべての画像要素のリストを取得します。これらの画像から、最後にぶら下がっているクエリ パラメータを含む URL を含む SRC 属性を取得できます。webbrowser.Document.Links を使用して、ページ上のすべてのハイパーリンクのリストを取得できます。その他の関心のある HTML 要素については、GetElementsByTagName("foo") を使用して、そのタグ名を持つすべての要素をページから取得し、それらの属性を掘り下げて URL プロパティを引き出すことができます。

webbrowser.Document を使用すると、静的に作成されたか動的に作成されたかにかかわらず、任意の HTML 要素にアクセスできます。

webbrower.Document を介して取得できないのは、XMLHttpRequest() を使用して非同期的にロードされるデータです。このデータはブラウザーのドキュメント オブジェクト モデルの一部ではないためです。スクリプト化された偽のボタンを含む Web ページは、傍受するのが困難になります。

ただし、ページで実行されている JavaScript によってデータが保存されている場所がわかっている場合は、webbrowser.Document.InvokeScript() を使用してアクセスできる場合があります。たとえば、ページ上の JavaScript が wi​​ndow オブジェクトの mydata プロパティに URL を格納する場合、webbrowser.Document.InvokeScript("window.mydata") またはいくつかのバリエーションを試して、mydata の値を C# アプリに取得できます。

于 2012-11-08T20:14:12.263 に答える