2010-12-08 72 views
1

我想从给定的URL创建网页的屏幕截图。虽然可以使用像Selenium RC这样的工具,但需要一个图形环境。我正在运行一个无头的Gentoo服务器。在无头服务器上渲染HTML以生成屏幕截图

这将是一个工具链,工程等的一部分:

  • 获取URL
  • 渲染HTML
  • 出口呈现为图像文件
  • 存储图像文件
+0

我敢肯定,没有连接显示器并不会阻止您运行X实例。 – 2010-12-08 21:59:56

+0

这实际上是一个好点。你应该考虑加入这个答案。 – 2010-12-09 01:44:10

回答

2

你可以使用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(); 
}