4

Web サイト内のすべてのリンクをクロールする Web クローラー (Web スパイダー) を作成しています。私のアプリケーションは、.Net Framework 3.5 を使用して C# で記述された Win32 アプリです。現在、HttpWebRequest と HttpWebResponse を使用して Web サーバーと通信しています。また、必要なものをすべて解析できる独自の Http パーサーも作成しました。「href」、「src」、「action」などのすべてのリンクが解析で見つかりました。しかし、私は 1 つの問題を解決できません: ページ内のクライアント スクリプトをシミュレートする (JS や VBS など) たとえば、次のようなリンクがある場合:

a href = "javascript:buildLink(1)"

... with buildLink(parameter) は、パラメータによるカスタム リンクを作成する Javascript 関数です。

この問題を解決するのを手伝ってください。このアプリで JavaScript をシミュレートする方法は? HTML ソース コードを解析し、すべての JavaScript コードを別のファイルに取り込むことはできますが、その機能をシミュレートするにはどうすればよいでしょうか? ありがとう。

4

4 に答える 4

3

HttpWebRequest がネットワーク機能のみを実行することを除いて、基本的にはブラウザーのふりをしています。

ie Web ブラウザー コントロールを使用し、C# アプリケーションから相互運用することをお勧めします。これにより、JavaScript の実行、変数の設定、投稿などを行うことができます。

「ie web browser control」を検索した後に見つけた基本的なリンクを次に示します。

http://www.c-sharpcorner.com/UploadFile/mahesh/WebBrowserInCSMDB12022005001524AM/WebBrowserInCSMDB.aspx http://support.microsoft.com/kb/313068

于 2009-05-27T04:53:58.103 に答える
3

唯一の現実的なオプションは、ブラウザーを自動化することです。他の回答が言っているように、完全な DOM がなければ、ブラウザの JavaScript を確実にシミュレートすることはできません。

幸いなことに、ブラウザーを自動化する方法があります。 Seleniumを確認してください。

C# APIを備えているため、C# からブラウザーを制御できます。

.NET Web クローラー コードを使用して、サイトをクロールします。リンクに遭遇するたびにhref="javascript:...、Selenium でリンクを含むページを処理します。

  1. Selenium API を使用して、ブラウザーにページを読み込むように指示します。
  2. Selenium API を使用して、ページ上のすべてのリンクを検索します。

このようにして、スパイダーは必要な場合にのみ Selenium を使用します (JavaScript リンクのないページは、既に取得しているブラウザーなしのスパイダー コードで処理できます)。これは途方もない並列ワークロードであるため、複数の Selenium プロセスを (1 台のコンピューターまたは他のコンピューターで) 同時に実行することは簡単です。

href="javascriptしかし、それがページに動的リンクを設定できる唯一の方法ではないことを覚えておいてください。より一般的なケースは、おそらくonloador$(document).ready()スクリプトが DOM を操作し、そのようにリンクを追加することです。

<script>そのケース (およびその他のケース) をキャッチするために、スパイダーはおそらく、タグを持つすべてのページに Selenium を使用する必要があります。

于 2009-05-27T05:12:28.953 に答える
2

これは簡単には解決できない問題です。既存の JavaScript 実装の 1 つを採用し、何らかの方法でそれを移植またはインターフェースすることを検討できます。

もし私がこの問題に取り組んでいるとしたら、Rhinoの上に Java で小さなサイド アプリケーションを構築し、その上にある種の RPC フレームワークを重ねて、プライマリ アプリケーションから通信できるようにするでしょう。

残念ながら、その上に完全な DOM 実装がなければ、非常に単純な JavaScript しか使用できなくなります。

于 2009-05-27T04:49:23.003 に答える
1

MS JScript エンジンなどを使用して JavaScript を実行できます。

これは、特に javascript がDOMなどにアクセスしようとする場合に、動作が保証されているわけではありません...しかし、単純なスクリプトの場合は、それで十分かもしれません。

于 2009-05-27T05:07:48.597 に答える