如何使用phantomjs截屏动态数据可视化

How to use phantomjs to take screen shot with dynamic data visualization

当我按照本教程(http://phantomjs.org/screen-capture.html)进行屏幕截图时,我遇到了一些关于动态数据可视化的问题。

在该教程中,它使用了一些代码,例如:

var page = require('webpage').create();
page.open('http://localhost:8080/index.html', function() {
  page.render('screenshot.png');
  phantom.exit();
});

但这似乎只适用于静态页面。我想知道我是否有一些用户交互并更改该页面(如鼠标单击更改颜色等),如何 我可以捕获 显示当前屏幕?

如果 phantomjs 可以不能以这种方式工作,谁能提出一些其他的解决方案

当然可以,只需在 page.open() 之后和 page.render() 之前添加您想要的功能即可。

page.open('http://localhost:8080/index.html', function() {

  /**
   * Add your events and actions here...
   * or call JS functions of the page itself...
   */

  page.evaluate(function() {

    /**
     * Inject a <style text/css> tag in the head,
     * which set the bgcolor
     */  

      var style = document.createElement('style'),
      text = document.createTextNode('body { background: red }');
      style.setAttribute('type', 'text/css');
      style.appendChild(text);
      document.head.insertBefore(style, document.head.firstChild);

  });

  page.render('screenshot.png');
  phantom.exit();
});

请记住,您在这里使用的是 Javascript,您可以注入任意辅助脚本,例如 CasperJS 或 jQuery,并在加载的页面上使用它们的功能。

灵感来源:

  • PhantomJS; click an element
  • How to retrieve the ajax data whose loading requires a mouse click with PhantomJS or other tools
    • 请特别查看此答案以了解点击、点击后的屏幕截图和 ajax 内容:
  • 浏览一下,然后截图: