2011-08-18 12 views
28

Esistono browser headless per node.js che supportano il dumping di una pagina sottoposta a rendering in un file? So che phantomjs supporta il rendering in un file, ma non viene eseguito su node.js. So che zombie.js è un browser headless node.js, ma non supporta il rendering in un file.Browser javascript headless node.js con funzionalità di screenshot?

+0

Hai cercato progetti che utilizzano jsdom? So che ce ne sono alcuni per farlo, basta dimenticare i nomi – wesbos

+2

Qui c'è un nuovo wrapper con nodo fantasma che ti permette di eseguire phantomjs dal nodo ..non l'ho provato, ma sembra promettente: https://github.com/sgentle/phantomjs-node – ZimSystem

+2

Wes, jsdom crea e manipola i modelli di oggetti documento che sono strutture dati in-memory interamente non grafiche. Questa domanda riguarda il rendering completo di una pagina Web grafica, che è completamente diversa. –

risposta

3

Questo potrebbe apparire come una soluzione con un po 'in testa ...

È possibile utilizzare il Mozilla Firefox con il plugin MozRepl. Fondamentalmente questo plugin ti offre una porta telnet per Firefox che ti permette di controllare il browser dall'esterno. È possibile aprire URL, fare screenshot, ecc. L'esecuzione di Firefox con il server Xvfb lo eseguirà in modalità senza testa.

Ora basta controllare il browser dall'esterno con node.js. Ho visto alcuni esempi in cui qualcuno ha implementato un'interfaccia simile allo http all'interno del chrome.js di Firefox. Quindi puoi eseguire un comando http per ottenere uno screenshot. È quindi possibile utilizzare le chiamate http da node.js. Questo potrebbe sembrare strano, in realtà è, ma potrebbe funzionare bene per te.

Sto lavorando con una versione leggermente modificata in produzione con Perl Mojolicious in modalità asincrona per innescare gli screenshot. Tuttavia, c'è un piccolo problema. Quando i plug-in sono obbligatori, funzionano, tuttavia Flash di solito si attiva quando si trova nell'area visibile, ciò non accadrà in modo che i film/le cose in flash potrebbero non essere inizializzati.

12

Dubito che troverai tutto ciò che funziona così come i phantomjs. Tratterei semplicemente il rendering come un processo di back-end asincrono ed eseguirò il fantasma in un sottoprocesso dal processo main node.js e lo chiamerò un giorno. Il rendering di una pagina Web è HARD, e poiché il fantasma è basato su WebKit, può effettivamente farlo. Non penso che ci sarà mai una libreria di nodi che può rendere una pagina web a un file grafico che non è costruito su un motore di rendering del browser esistente. Ma forse un giorno i phantomjs si integreranno più facilmente con il nodo.

+32

CHALLENGE ACCETTATO –

+6

Mi aspetto davvero un collegamento successivo, @ David Murdoch. – NateDSaint

+0

Oggi l'ho smantellato per un po 'e non sono arrivato a quello che speravo. Stavo pianificando di mischiare insieme jsdom, node-canvas e html2canvas. Non mi ero reso conto che jsdom non implementava le dimensioni. :-( –

3

Potrebbe risultare utile, sebbene non sia specifico per javascript.

C'è uno strumento basato sul webkit chiamato "wkhtmltopdf" che capisco include il supporto javascript utilizzando il widget del kit web QT. Emette una rappresentazione visiva ("screenshot" se vuoi) della pagina in formato PDF.

FWIW, ci sono anche i binding per PHP qui: php-wkthmltox

+0

se "renderizzare in un file" significa "screenshot ", che penso sia ciò che l'autore intendeva, questa è una risposta decente :) :) –

1

C'è un progetto chiamato Node-Chimera. Sebbene non sia maturo come Phantomjs, ha tutte le funzionalità che hai menzionato: funziona su Nodejs nativi e ti permette di eseguire il rendering di pagine su un file. Il repository è qui: https://github.com/deanmao/node-chimera. Ha esempi per fare esattamente quello che ti serve.

+4

Sembra che questo progetto non venga più mantenuto –

5

Prova nightmare, utilizza l'elettrone, è molto più veloce di phantomjs, ed è facile da usare API e utilizza il moderno ES6 javascript.

1

Il team di sviluppo di Chrome ha rilasciato Puppeteer che può essere utilizzato nel nodo. Utilizza Chrome con l'opzione senza testa.

Problemi correlati