Безголовый javascript-браузер node.js с возможностью скриншота?

Существуют ли безголовые браузеры для node.js, которые поддерживают вывод отображаемой страницы в файл? Я знаю, что phantomjs поддерживает рендеринг в файл, но не работает на node.js. Я знаю, что zombie.js — это безголовый браузер node.js, но он не поддерживает рендеринг в файл.


person ryeguy    schedule 18.08.2011    source источник
comment
Вы искали проекты, использующие jsdom? Я знаю, что есть несколько для этого, просто забудь имена   -  person wesbos    schedule 18.08.2011
comment
Здесь есть новая оболочка фантомного узла, которая позволяет запускать фантомные файлы из узла.. не пробовал, но выглядит многообещающе: github.com/sgentle/phantomjs-node   -  person Zim    schedule 08.02.2012
comment
Уэс, jsdom создает и манипулирует объектными моделями документов, которые представляют собой полностью неграфические структуры данных в памяти. Этот вопрос касается полной визуализации графической веб-страницы, что совсем другое дело.   -  person Peter Lyons    schedule 27.08.2012
comment
Вы можете попробовать это: github.com/vbauer/manet Он основан на NodeJS и SlimerJS и работает как отдельный сервис через REST API.   -  person Vladislav Bauer    schedule 16.11.2014


Ответы (6)


Я сомневаюсь, что вы найдете что-нибудь, что будет работать так же хорошо, как фантомы. Я бы просто рассматривал рендеринг как асинхронный серверный процесс и выполнял фантом в подпроцессе вашего основного процесса node.js и заканчивал его. Рендеринг веб-страницы СЛОЖЕН, и, поскольку фантом основан на WebKit, он действительно может это сделать. Я не думаю, что когда-либо будет библиотека узлов, которая может отображать веб-страницу в графический файл, который не построен на существующем механизме рендеринга браузера. Но, возможно, однажды phantomjs будет более органично интегрироваться с узлом.

person Peter Lyons    schedule 20.08.2011
comment
Я очень ожидаю дополнительную ссылку, @David Murdoch. - person NateDSaint; 27.08.2012
comment
Сегодня я немного поработал над этим, но не так далеко, как я надеялся. Я планировал объединить jsdom, node-canvas и html2canvas. Я не понимал, что jsdom не реализует размеры. :-( - person David Murdoch; 28.08.2012
comment
Кто-то еще может проверить компиляцию Webkit в LLVM, а затем в JS с помощью emscriptent; У меня просто нет времени. - person David Murdoch; 28.08.2012
comment
В итоге я сделал две утилиты командной строки для Linux: wkhtmltopdf, а затем использовал imagemagick convert для преобразования pdf в jpg. Это соответствовало моим потребностям, потому что мне нужен был PDF-файл для другой части задачи, но мне все еще интересно узнать, как заставить node.js делать свое дело. - person NateDSaint; 03.10.2012

Попробуйте nightmare, он использует электрон, он намного быстрее, чем phantomjs, у него простой API и современный javascript ES6. .

person Rilke Petrosky    schedule 16.04.2016

Это может выглядеть как решение с небольшими накладными расходами...

Вы можете использовать Mozilla Firefox с плагином MozRepl. По сути, этот плагин дает вам telnet-порт для вашего Firefox, который позволяет вам управлять браузером извне. Вы можете открывать URL-адреса, делать снимки экрана и т. д. Запуск Firefox с сервером Xvfb запустит его в автономном режиме.

Теперь вам просто нужно управлять браузером извне с помощью node.js. Я видел несколько примеров, когда кто-то реализовал интерфейс, похожий на http, внутри chrome.js Firefox. Таким образом, вы можете запустить команду http, чтобы получить снимок экрана. Затем вы можете использовать http-вызовы из node.js. Это может показаться странным, на самом деле это так, но может сработать для вас.

Я запускаю слегка модифицированную версию Perl Mojolicious в асинхронном режиме, чтобы запускать скриншоты. Однако есть небольшая проблема. Когда требуются плагины, они работают, однако Flash обычно активируется, когда он находится в видимой области, этого не произойдет, поэтому фильмы/флэш-вещи могут не инициализироваться.

person Community    schedule 18.08.2011

Вы можете найти это полезным, хотя это не зависит от javascript.

Существует инструмент на основе веб-кита под названием «wkhtmltopdf", который, как я понимаю, включает поддержку javascript с использованием виджета веб-комплекта QT. Он выводит визуальное представление («скриншот», если хотите) страницы в формате PDF.

FWIW, здесь также есть привязки PHP: php-wkthmltox

person David    schedule 24.10.2011
comment
если рендеринг в файл означает снимок экрана, что, я думаю, и имел в виду автор, это достойный ответ. :) - person Steven Soroka; 13.12.2011

Есть проект под названием Node-Chimera. Хотя он не такой зрелый, как Phantomjs, у него есть все функции, которые вы упомянули: он работает на собственном Nodejs и позволяет отображать страницы в файл. Репозиторий находится здесь: https://github.com/deanmao/node-chimera. В нем есть примеры, чтобы сделать именно то, что вам нужно.

person krakatoa    schedule 01.07.2013
comment
Похоже, этот проект больше не поддерживается - person Aalex Gabi; 29.09.2014

Команда разработчиков Chrome выпустила Puppeteer, который можно использовать в node. Он использует Chrome с опцией headless.

person kev    schedule 30.10.2017