web-dev-qa-db-ja.com

スクリーンショット機能を備えたヘッドレスnode.jsjavascriptブラウザ?

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

31
ryeguy

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

12
Peter Lyons

nightmare を試してください。電子を使用し、phantomjsよりもはるかに高速で、APIが簡単で、最新のES6javascriptを使用しています。

5
Rilke Petrosky

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

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

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

スクリーンショットをトリガーするために、非同期モードでPerl Mojoliciousを使用して、本番環境でわずかに変更されたバージョンを実行しています。ただし、小さな問題があります。プラグインが必要な場合、プラグインは機能しますが、Flashは通常、表示領域にあるときにアクティブになります。これは発生しないため、ムービー/フラッシュが初期化されない場合があります。

3
Rhaen

これはJavaScript固有ではありませんが、役立つ場合があります。

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

FWIW、ここにもPHPバインディングがあります: php-wkthmltox

3
David

Node-Chimeraというプロジェクトがあります。 Phantomjsほど成熟していませんが、前述のすべての機能を備えています。ネイティブNodejsで実行され、ページをファイルにレンダリングできます。リポジトリはここにあります: https://github.com/deanmao/node-chimera 。必要なことを正確に実行するための例があります。

1
krakatoa

Chrome開発チームがリリースしました Puppeteer これはノードで使用できます。Chrome withヘッドレスオプション。

1
kev