Существуют ли безголовые браузеры для node.js, которые поддерживают вывод отображаемой страницы в файл? Я знаю, что phantomjs поддерживает рендеринг в файл, но не работает на node.js. Я знаю, что zombie.js — это безголовый браузер node.js, но он не поддерживает рендеринг в файл.
Безголовый javascript-браузер node.js с возможностью скриншота?
Ответы (6)
Я сомневаюсь, что вы найдете что-нибудь, что будет работать так же хорошо, как фантомы. Я бы просто рассматривал рендеринг как асинхронный серверный процесс и выполнял фантом в подпроцессе вашего основного процесса node.js и заканчивал его. Рендеринг веб-страницы СЛОЖЕН, и, поскольку фантом основан на WebKit, он действительно может это сделать. Я не думаю, что когда-либо будет библиотека узлов, которая может отображать веб-страницу в графический файл, который не построен на существующем механизме рендеринга браузера. Но, возможно, однажды phantomjs будет более органично интегрироваться с узлом.
Попробуйте nightmare, он использует электрон, он намного быстрее, чем phantomjs, у него простой API и современный javascript ES6. .
Это может выглядеть как решение с небольшими накладными расходами...
Вы можете использовать Mozilla Firefox с плагином MozRepl. По сути, этот плагин дает вам telnet-порт для вашего Firefox, который позволяет вам управлять браузером извне. Вы можете открывать URL-адреса, делать снимки экрана и т. д. Запуск Firefox с сервером Xvfb запустит его в автономном режиме.
Теперь вам просто нужно управлять браузером извне с помощью node.js. Я видел несколько примеров, когда кто-то реализовал интерфейс, похожий на http, внутри chrome.js Firefox. Таким образом, вы можете запустить команду http, чтобы получить снимок экрана. Затем вы можете использовать http-вызовы из node.js. Это может показаться странным, на самом деле это так, но может сработать для вас.
Я запускаю слегка модифицированную версию Perl Mojolicious в асинхронном режиме, чтобы запускать скриншоты. Однако есть небольшая проблема. Когда требуются плагины, они работают, однако Flash обычно активируется, когда он находится в видимой области, этого не произойдет, поэтому фильмы/флэш-вещи могут не инициализироваться.
Вы можете найти это полезным, хотя это не зависит от javascript.
Существует инструмент на основе веб-кита под названием «wkhtmltopdf", который, как я понимаю, включает поддержку javascript с использованием виджета веб-комплекта QT. Он выводит визуальное представление («скриншот», если хотите) страницы в формате PDF.
FWIW, здесь также есть привязки PHP: php-wkthmltox
Есть проект под названием Node-Chimera. Хотя он не такой зрелый, как Phantomjs, у него есть все функции, которые вы упомянули: он работает на собственном Nodejs и позволяет отображать страницы в файл. Репозиторий находится здесь: https://github.com/deanmao/node-chimera. В нем есть примеры, чтобы сделать именно то, что вам нужно.
Команда разработчиков Chrome выпустила Puppeteer, который можно использовать в node. Он использует Chrome с опцией headless.