2009-05-27 14 views
4

私はウェブサイトのすべてのリンクをクロールするWebクローラ(Web Spider)を作成しています。 私のアプリケーションはWin32アプリケーションで、.NETフレームワーク3.5を使用してC#で書かれています。 私はHttpWebRequestを使ってHttpWebResponseを使ってWebサーバーと通信しています。 私は自分が望むものを解析できる独自のHttp Parserも構築しました。 解析に「href」、「src」、「action」...のようなリンクがすべて見つかりました。 しかし、私は一つの問題解決することはできません。クライアントでJavaScriptをシミュレートする方法C#アプリケーション

のhref = "javascriptを:buildLink(1)"

リンクのような場合には、例えば、(JSとVBSのような)ページに をシミュレートするクライアントスクリプトを。 .. with buildLink(parameter)は、パラメータのためにカスタムリンクを作成するJavascript関数です。

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

+0

c0mm3nt解決策を見つけましたか? – senzacionale

答えて

2

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

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

残念ながら、完全なDOM実装がなくても、非常に単純なjavascriptに限定されます。

1

あなたができます:それはここで私は、「つまり、Webブラウザコントロール」の検索後に発見されたいくつかの基本的なリンクがあります

を、あなたはJavaScriptを実行できるように変数を設定し、ポスト、などなどでしょうusing the MS JScript engineまたは類似のものによってjavascriptを実行します。

part 2)(part 3)...しかし、単純なスクリプトのためのそれで十分かもしれない。

3

実際の唯一の選択肢は、ブラウザを自動化することです。他の答えが言ったように、完全なDOMを持たずにブラウザのJavaScriptを確実にシミュレートすることはできません。

幸いにもブラウザを自動化する方法があります。Seleniumをチェックしてください。

C# APIがあるので、C#からブラウザを制御できます。

.NET Webクローラーコードを使用してサイトをクロールします。あなたがhref="javascript:...リンクに遭遇するたびに、セレンのリンクを含むページを扱う:

  1. ページをロードするようにブラウザに指示するセレンのAPIを使用してください。
  2. Selenium APIを使用して、ページ上のすべてのリンクを検索します。

このようにして、スパイダーは必要なときにのみSeleniumを使用します(javascriptリンクを持たないページは、既に入手したブラウザレススパイダーコードで処理できます)。これはembarrassingly parallelのワークロードなので、複数のSeleniumプロセスを同時に(1台のコンピュータまたは他のコンピュータ上で)実行できます。

しかし、href="javascriptは、ページにダイナミックリンクを設定する唯一の方法ではありません。より一般的なケースはおそらく、onloadまたは$(document).ready()スクリプトがDOMを操作し、そのようにリンクを追加することでしょう。

このケース(と他のもの)をキャッチするには、恐らく蜘蛛は<script>タグを持つすべてのページにSeleniumを使用する必要があります。

関連する問題