9

ドキュメント (文字列形式) または URL を使用して DOM をロードし、それに対して JavaScript 関数 (jquery セレクターを含む) を実行したいと考えています。これは完全にサーバー側であり、進行中です。クライアント/ブラウザーはありません。

基本的に、DOM をロードしてから、jquery セレクターと text() & type val() 関数を使用してそこから文字列を抽出する必要があります。私は本当にdomを操作する必要はありません。

I have looked at .Net javascript engines such as Jurassic and Jint, but neither support loading a DOM, and so therefore can't do what I need.

I would be willing to consider non .Net solutions (node.js, ruby, etc) if they exist, but would really prefer .Net.

edit The below is a good answer, but currently I'm trying a different route, I'm attempting to port envjs to jurassic. If I can get that working I think it will do what I want, stay tuned....

4

1 に答える 1

15

答えは、何をしようとしているのかによって異なります。目標が基本的に完全な Web ブラウザー シミュレーション、または「ヘッドレス ブラウザー」である場合、解決策は多数ありますが、(私が知っている限り) .NET に完全に存在するものはありません。ブラウザを模倣するには、JavaScript エンジンと DOM が必要です。いくつかのエンジンを特定しました。Jurassic が最も堅牢で高速であることがわかりました。Google Chrome V8 エンジンも非常に人気があります。Neosis Javascript.NETプロジェクトは、そのための .NET ラッパーを提供します。.NET 以外の依存関係があるため、完全に純粋な .NET ではありませんが、きれいに統合されており、使用するのにそれほど問題はありません。

しかし、お気づきのように、DOM はまだ必要です。純粋な C# にはXBrowserがありますが、少し古く見えます。jsdomのようなブラウザ DOM 全体の JavaScript ベースの表現もあります。おそらく、Jurasic で jsdom を実行して、ブラウザーなしですべて C# で DOM シミュレーションを行うことができます (ただし、非常に遅い可能性があります!) V8 でも問題なく動作することは間違いありません。.NET 領域の外に出る場合は、他のより適切にサポートされているソリューションがあります。この質問では、HtmlUnit について説明します。次に、実際の Web ブラウザーを自動化するためのSeleniumがあります。

また、これらのツールに関して行われた作業の多くはテスト用であることを覚えておいてください。これは、それらを他の用途に使用できないという意味ではありませんが、インライン プロダクション コードで安定して使用するには、パフォーマンスや統合がうまくいかない可能性があります。基本的にリアルタイムの HTML 操作を行おうとしている場合、テスト以外では広く使用されていない多くのテクノロジを組み合わせたソリューションは、適切な選択ではない可能性があります。

あなたのニーズが実際には HTML 操作であり、Javascript を実際に使用する必要はないが、JS で利用可能なそのようなツールの豊富さについてもっと考えている場合は、この目的のために設計された C# ツールを検討します。たとえば、HTML Agility Pack 、またはC# jQuery ポートである私自身のプロジェクトCsQueryです。

基本的に、クライアント用に書かれたコードをサーバー上で実行しようとしている場合 (たとえば、洗練された/高速化された Web スクレイピング用)、それらの用語を使用して検索します。たとえば、この質問ではこれについて説明し、ヘッドレス Webkit ブラウザー スタックであるPhantomJSや、既に述べたいくつかのテスト ツールを含む回答を示しています。Web スクレイピングについては、すべてが .NET になくても生きていけると思いますが、とにかくそれが唯一の合理的な答えかもしれません。

于 2012-06-04T19:00:58.767 に答える