2011-08-18 41 views
28

是否有任何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創建和操作文檔對象模型,它們完全是非圖形內存數據結構。這個問題是關於完全呈現一個圖形網頁,這完全是另一回事。 –

回答

3

這可能看起來像一點點開銷的解決方案......

您可以使用Mozilla Firefox瀏覽器與MozRepl插件。基本上這個插件爲您提供了一個到您的Firefox的telnet端口,它允許您從外部控制瀏覽器。您可以打開網址,截屏等。 使用Xvfb服務器運行Firefox將以無頭模式運行它。

現在,你只需要控制從node.js中的瀏覽器之外我見過一些例子,其中有人在Fi​​refox的chrome.js中實現了一個類似http的接口。所以你可以運行一個http命令來獲取屏幕截圖。然後您可以使用node.js中的http調用。這可能看起來很奇怪,但實際上卻可能適合你。

我在異步模式下運行在生產中稍作修改的版本使用Perl Mojolicious觸發截圖。但是,有一個小問題。當需要插件時,它們可以工作,但是Flash通常在可見區域時被激活,這不會發生,所以電影/閃光燈事件可能不會被初始化。

12

我懷疑你會發現什麼,是要工作以及phantomjs。我只會將渲染視爲異步後端進程,並在您的主要node.js進程的子進程中執行phantom並稱之爲一天。渲染一個網頁很難,因爲幻影是基於WebKit的,它實際上可以做到。我不認爲會有一個節點庫能夠將網頁渲染到不是基於現有瀏覽器渲染引擎構建的圖形文件。但是也許有一天,phantomjs將更加無縫地與節點集成。

+32

挑戰接受 –

+6

我完全期待後續鏈接@David Murdoch。 – NateDSaint

+0

今天我砍了一下,並沒有達到我所希望的那麼遠。我正在計劃將jsdom,node-canvas和html2canvas混合在一起。我沒有意識到jsdom沒有實現尺寸。 :-( –

3

您可能會發現這是很有幫助的,但它不是特定的JavaScript。

有一個稱爲「wkhtmltopdf」我理解包括使用QT webkit的部件JavaScript支持基於Webkit的工具。它以PDF格式輸出可視化表示(如果您願意,可以截圖)。

FWIW,也有在這裏討論PHP綁定:php-wkthmltox

+0

如果「渲染到文件」的意思是「截圖「,我認爲這是作者的意圖,這是一個體面的答案。:) –

1

有一個叫做節點奇美拉項目。雖然它不像Phantomjs那樣成熟,但它具有您提到的所有功能:它在本機Nodej上運行,並允許您將頁面呈現爲文件。存儲庫位於:https://github.com/deanmao/node-chimera。它有一些例子可以滿足你的需求。

+4

看起來這個項目不再被維護了 –

5

嘗試nightmare,它使用的電子,它比phantomjs方式速度更快,它的API方便,採用現代ES6的JavaScript。

1

的Chrome瀏覽器開發團隊已經發布了Puppeteer可以在節點使用。它使用Chrome與無頭選項。