Рендеринг HTML на безголовом сервере для создания скриншотов - PullRequest
1 голос
/ 09 декабря 2010

Я хотел бы создать скриншоты веб-страниц по заданному URL.Хотя можно использовать такие инструменты, как Selenium RC, для этого требуется графическое окружение.Я использую безголовый сервер Gentoo.

Это будет часть цепочки инструментов, которая работает следующим образом:

  • Fetch URL
  • Визуализация HTML
  • Экспорт рендера в виде файла изображения
  • Сохранение файла изображения

1 Ответ

2 голосов
/ 09 декабря 2010

Вы можете запустить приложение с X-сервером кадрового буфера, например xvfb - один простой подход - приложение на основе Qt для отображения страницы в виджете webkit и сохранения в виде изображения. Вот сообщение в блоге , в котором рассказывается, как это можно сделать с помощью Python .

Вот быстрый инструмент командной строки, который я использовал с Qt. Я давно его использовал, но все равно должно работать!

#include <QtCore/QCoreApplication>
#include <QtGui>
#include <QtWebKit>
#include <QTextStream>
#include <QSize>

QWebView *view;
QString outfile;

void QWebView::loadFinished(bool ok)
{
        QTextStream out(stdout);
        if (!ok) {
                out << "Page loading failed\n";
                return;
        }
        view->page()->setViewportSize(view->page()->currentFrame()->contentsSize());
        QImage *img = new QImage(view->page()->viewportSize(), QImage::Format_ARGB32);
        QPainter *paint = new QPainter(img);
        view->page()->currentFrame()->render(paint);
        paint->end();
        if(!img->save(outfile, "png"))
                out << "Save failure\n";
        QApplication::quit();
        return;
}

int main(int argc, char *argv[])
{
        QTextStream out(stdout);
        if(argc < 3) {
                out << "USAGE: " << argv[0] << " <url> <outfile>\n";
                return -1;
        }
        outfile = argv[2];
        QApplication app(argc, argv);
        view = new QWebView();
        view->load(QUrl(argv[1]));

        return app.exec();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...