2011-08-18 13 views
28

レンダリングされたページをファイルにダンプすることをサポートするheadlessブラウザがnode.jsにありますか? phantomjsはファイルへのレンダリングをサポートしていますが、node.jsでは実行されません。私はzombie.jsがnode.jsヘッドレスブラウザだが、ファイルへのレンダリングをサポートしていないことを知っている。ヘッドレスnode.jsスクリーンショット機能を備えたjavascriptブラウザ?

+0

jsdomを使用するプロジェクトを探しましたか?私はこれを行うためのいくつかがあることを知っています、名前を忘れてください – wesbos

+2

ノードからphantomjsを実行できる新しいファントムノードラッパーがあります。それを試していませんが有望です:https://github.com/sgentle/phantomjs-node – ZimSystem

+2

Wes、jsdomは、完全に非グラフィカルなインメモリデータ構造であるドキュメントオブジェクトモデルを作成し、操作します。この質問は完全に別の問題であるグラフィカルなWebページを完全にレンダリングすることに関するものです。 –

答えて

3

これは少しオーバーヘッドでソリューションのように見えるかもしれません...

あなたはMozReplプラグインでMozilla Firefoxを使用することができます。基本的には、このプラグインはFirefoxに外部からブラウザを制御するためのTelnetポートを提供します。 URLを開いたり、スクリーンショットを撮ったりすることができます。 XvfbサーバーでFirefoxを実行すると、ヘッドレスモードで実行されます。

これで、ブラウザを外部からnode.jsで制御するだけで済みます。いくつかの例を見てきましたが、誰かがFirefoxのchrome.js内にhttpなどのインターフェースを実装しています。したがって、httpコマンドを実行してスクリーンショットを取得することができます。その後、node.jsからhttpコールを使用できます。これは奇妙に見えるかもしれませんが、実際にはあなたのためにうまくいくかもしれません。

私はスクリーンショットをトリガするために非同期モードでPerlのMojoliciousの持つ生産に少し変更したバージョンを実行していますよ。しかし、小さな問題があります。プラグインが必要な場合は動作しますが、Flashは通常、可視領域にあるときにアクティブになりますが、これは起こりませんので、ムービー/フラッシュのものは初期化されない可能性があります。

12

私は、ファントムと同様に動作するものを見つけることはできません。レンダリングを非同期のバックエンドプロセスとして扱い、メインのnode.jsプロセスのサブプロセスでファントムを実行し、それを1日と呼びます。 Webページをレンダリングするのは難しいですし、ファントムはWebKitに基づいているので、実際にそれを行うことができます。私は既存のブラウザレンダリングエンジンに組み込まれていないグラフィックファイルにWebページをレンダリングできるノードライブラリが存在するとは思わない。しかし、ある日、ファントムはノードとよりシームレスに統合されるでしょう。

+32

チャレンジが受け入れられました –

+6

私はフォローアップのリンク@David Murdochを徹底的に期待しています。 – NateDSaint

+0

今日はちょっとハックしてしまいましたが、私が望んでいた限りでは得られませんでした。 jsdom、node-canvas、およびhtml2canvasを一緒にマッシュすることを計画していました。私はjsdomがディメンションを実装していなかったことを認識しませんでした。 :-( –

3

これはjavascript固有ではありませんが、役に立つと思うかもしれません。

wkhtmltopdf」というWebkitベースのツールがあります。これは、QT Web-Kitウィジェットを使用したJavaScriptサポートが含まれていることを理解しています。 PDF形式のページの視覚的表現(必要に応じて「スクリーンショット」)を出力します。

FWIWは、それのためのPHPバインディングがここにもありますphp-wkthmltox

+0

"ファイルへのレンダリング" "これは著者が意図したものだと思いますが、これはまともな答えです:) –

1

ノードキメラと呼ばれるプロジェクトがあります。 Phantomjsほど成熟していませんが、あなたが言及したすべての機能を備えています。ネイティブNodejで動作し、ページをファイルにレンダリングすることができます。リポジトリは、https://github.com/deanmao/node-chimeraです。それはあなたが必要とするものを正確に行うための例を持っています。

+4

このプロジェクトの外観はもう管理されていないようです –

5

nightmareを試してみてください。それは電子を使います、それはファントムズよりも速く、APIは簡単で、最新のES6 javascriptを使用しています。

1

Chrome開発チームは、ノードで使用できるPuppeteerをリリースしました。 ヘッドレスオプションのChromeを使用しています。

関連する問題