2011-08-18 18 views
28

¿Hay navegadores sin cabeza para node.js que soporten tirar una página renderizada a un archivo? Sé que phantomjs admite la representación en un archivo, pero no se ejecuta en node.js. Sé que zombie.js es un navegador sin cabeza node.js, pero no admite el procesamiento de un archivo.Navegador de JavaScript sin cabeza node.js con capacidad de captura de pantalla?

+0

¿Has buscado proyectos que usen jsdom? Sé que hay algunos para hacer esto, simplemente olvida los nombres – wesbos

+2

Aquí hay un nuevo contenedor de nodo fantasma que te permite ejecutar phantomjs desde el nodo.no lo he probado, pero parece prometedor: https://github.com/sgentle/phantomjs-node – ZimSystem

+2

Wes, jsdom crea y manipula modelos de objetos de documento que son estructuras de datos en memoria totalmente no gráficas. Esta pregunta se trata de renderizar completamente una página web gráfica, que es otra cosa completamente distinta. –

Respuesta

3

Esto podría parecer una solución con una pequeña sobrecarga poco ...

Puede utilizar el Mozilla Firefox con el plugin MozRepl. Básicamente, este complemento le brinda un puerto telnet a su Firefox que le permite controlar el navegador desde el exterior. Puede abrir URL, tomar capturas de pantalla, etc. Al ejecutar Firefox con el servidor Xvfb se ejecutará en modo sin cabeza.

Ahora solo tiene que controlar el navegador desde el exterior con node.js. He visto algunos ejemplos en los que alguien ha implementado una interfaz http similar dentro de chrome.js de Firefox. Entonces puede ejecutar un comando http para obtener una captura de pantalla. A continuación, puede usar las llamadas http de node.js. Esto puede parecer extraño, en realidad lo es, pero podría funcionar bien para usted.

estoy ejecutando una versión ligeramente modificada en la producción con Perl Mojolicious en modo asíncrono para activar las capturas de pantalla. Sin embargo, hay un pequeño problema. Cuando se requieren complementos, funcionan, pero Flash generalmente se activa cuando está en el área visible, esto no sucederá, por lo que las películas/flash podrían no inicializarse.

12

Dudo que encuentre nada que funcione tan bien como phantomjs. Simplemente trataría el renderizado como un proceso de back-end asincrónico y ejecutaría el comando fantasma en un subproceso del proceso node.js principal y lo llamaría un día. Renderizar una página web es DIFÍCIL, y como fantasma se basa en WebKit, en realidad puede hacerlo. No creo que nunca haya una biblioteca de nodos que pueda representar una página web en un archivo gráfico que no se basa en un motor de representación de navegador existente. Pero quizás algún día phantomjs se integre más a la perfección con el nodo.

+32

DESAFÍO ACEPTADO –

+6

Espero un enlace de seguimiento, @David Murdoch. – NateDSaint

+0

Lo pirateé un poco hoy y no llegué tan lejos como esperaba. Estaba planeando mezclar jsdom, node-canvas y html2canvas. No me di cuenta de que jsdom no implementó las dimensiones. :-( –

3

Puede que le resulte útil, aunque no es específico de javascript.

Hay una herramienta basada en webkit llamada "wkhtmltopdf" que entiendo incluye soporte de Javascript usando el widget del kit web de QT. Muestra una representación visual ("captura de pantalla", si se quiere) de la página en formato PDF.

Fwiw, también hay enlaces de PHP para aquí: php-wkthmltox

+0

si "renderizar en un archivo" significa "captura de pantalla" ", que creo que es lo que el autor pretendió, esta es una respuesta decente. :) –

1

hay un proyecto llamado Nodo-quimera. Aunque no es tan maduro como Phantomjs, tiene todas las características que ha mencionado: se ejecuta en Nodejs nativos y le permite representar páginas en un archivo. El repositorio está aquí: https://github.com/deanmao/node-chimera. Tiene ejemplos para hacer exactamente lo que necesita.

+4

Parece que este proyecto ya no se mantiene. –

5

Pruebe nightmare, utiliza el electrón, es mucho más rápido que phantomjs, y es API fácil y utiliza JavaScript moderno ES6.

1

El equipo de desarrollo de Chrome ha lanzado Puppeteer que se puede usar en el nodo. Utiliza Chrome con la opción sin cabeza.

Cuestiones relacionadas