2012-07-09 7 views
10

私は次のように動作する特定のWebページを削り取ろうとしています。HtmlAgilityPackでスクリプトを実行しています

最初にページが読み込まれた後、ページを生成するために必要なデータを取得するためにJavaScriptが実行されます。私はそのデータに興味があります。

HtmlAgilityPackでページを取得すると、スクリプトが実行されないため、基本的には空白のページが表示されます。

強制的にスクリプトを実行する方法があるので、データを取得できますか?

+0

を見てください。 –

答えて

9

あなたはサーバーが返ってきたものを手に入れています - ウェブブラウザと同じです。 Webブラウザはもちろん、スクリプトを実行します。 Html Agility Packは、HTMLパーサーのみです.JavaScriptを解釈したり、ドキュメントの内部表現にバインドする方法はありません。スクリプトを実行するには、Webブラウザが必要です。あなたの問題に対する完璧な答えは、完全な "ヘッドレス" Webブラウザです。これは、HTMLパーサ、javascriptインタプリタ、ブラウザDOMをシミュレートするモデルを組み込んだものです。基本的には、それはレンダリングの部分がない限り、Webブラウザです。現時点では、.NET環境内で完全に機能するものはありません。

WebBrowserコントロールを使用し、実際にはプログラムでInternet Explorerでページを読み込んで実行するのが最善の方法です。これは速くてもかわいいものではありませんが、あなたがする必要があることをします。

同様の質問への私の答えを参照してください。Load a DOM and Execute javascript, server side, with .Netこれは.NETで利用可能なテクノロジについて説明しています。ほとんどの作品は現在存在していますが、あまりにもまだそこにはないか、残念ながら正しい方法で統合されていません。

+0

WebBrowserコントロールによって引き起こされるGDI +ハンドル/メモリリークは、私に選択肢を求めているのです。この問題に対する適切な解決策がないことは残念です。 – Aabela

+0

Bummer。うん、これはまだ少なくともそこにはない場所のひとつです。ハイブリッドアプリで暮らすことができれば、これを行う方法は間違いありませんが、もっと複雑になります。私は誰かが.NETで完全に統合されたヘッドレスブラウザで作成する作業を行うことを望んでいます。しかし、それは間違いなく小さな仕事です。私が言ったように、多くの作品はそこにあるが、誰かが一緒に置く必要がある。 –

3

これには、Awesomiumを使用することができます。http://www.awesomium.com/それはかなりうまく動作しますが、x64のサポートはなく、スレッドセーフではありません。私はいくつかのウェブサイトを24時間365日スキャンするためにそれを使用しており、少なくとも2日連続して正常に動作していますが、通常はクラッシュします。