javascript - node - puppeteer scraping
Headless node.js navegador de JavaScript con capacidad de captura de pantalla? (6)
¿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 la representación en un archivo.
Dudo que encuentres algo 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.
El equipo de desarrollo de Chrome ha lanzado Puppeteer que se puede usar en el nodo. Utiliza Chrome con la opción sin cabeza .
Esto podría parecer una solución con un poco por encima ...
Puede usar Mozilla Firefox con el complemento 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. Ejecutar Firefox con el servidor Xvfb lo ejecutará en modo sin cabeza.
Ahora solo tienes 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 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.
Hay un proyecto llamado Node-Chimera. 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.
Prueba la nightmare , utiliza el electrón, es mucho más rápido que phantomjs, y es API fácil y usa javascript ES6 moderno.
Puede encontrar esto útil, aunque no es específico de JavaScript.
Existe una herramienta basada en webkit llamada " wkhtmltopdf " que entiendo que incluye soporte de Javascript usando el widget de 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 PHP para esto aquí: php-wkthmltox