web-dev-qa-db-ja.com

HtmlAgilityPackでのスクリプトの実行

次のように機能する特定のWebページをスクレイプしようとしています。

最初にページが読み込まれ、次に何らかのjavascriptが実行されて、ページに入力するために必要なデータがフェッチされます。そのデータに興味があります。

HtmlAgilityPackを使用してページを取得すると、スクリプトが実行されないため、基本的にほとんど空白のページが取得されます。

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

15
Aabela

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

最善の策は、WebBrowserコントロールを使用し、プログラムによる制御の下でInternetExplorerで実際にページを読み込んで実行することです。これは速くもきれいでもありませんが、あなたがする必要があることをします。

同様の質問に対する私の回答も参照してください。 DOMをロードし、サーバー側で.Netを使用してjavascriptを実行します これを行うために.NETで利用可能なテクノロジについて説明します。ほとんどの部分は現在存在しますが、残念ながら、まだ完全に存在していないか、正しい方法で統合されていません。

13
Jamie Treworgy

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

3
Måns Tånneryd