1
我想从给定的URL创建网页的屏幕截图。虽然可以使用像Selenium RC这样的工具,但需要一个图形环境。我正在运行一个无头的Gentoo服务器。在无头服务器上渲染HTML以生成屏幕截图
这将是一个工具链,工程等的一部分:
- 获取URL
- 渲染HTML
- 出口呈现为图像文件
- 存储图像文件
我想从给定的URL创建网页的屏幕截图。虽然可以使用像Selenium RC这样的工具,但需要一个图形环境。我正在运行一个无头的Gentoo服务器。在无头服务器上渲染HTML以生成屏幕截图
这将是一个工具链,工程等的一部分:
你可以使用framebuffer X-Server运行应用程序,如xvfb - 一种简单的方法是基于Qt的应用程序来渲染页面一个webkit小部件并保存为图像。这是一个blog post outlining how this can be done with 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();
}
我敢肯定,没有连接显示器并不会阻止您运行X实例。 – 2010-12-08 21:59:56
这实际上是一个好点。你应该考虑加入这个答案。 – 2010-12-09 01:44:10