从Jersey休息服务启动时,PhantomJS返回黑色屏幕截图

时间:2014-08-01 21:35:59

标签: java jersey tomcat7 phantomjs jersey-2.0

当我从Jersey Resource启动service.snapshot(msg);时,它可以正常工作。但是对于下面的代码,它会生成空白的png / pdf文件。

@GET
@Path("/snapshot")
@Produces(MediaType.APPLICATION_JSON)
public RequestResponse snapshot( @QueryParam("url") String url,  // snapshot(...)
                                 @QueryParam("format") String format,
                                 @QueryParam("quality") int quality) throws InterruptedException {

    final PageSnapshotMsg msg = new PageSnapshotMsg.Builder().url(url).
                                                              format(format).
                                                              quality(quality).
                                                              build();

    return service.snapshot(msg);
}

生成的PhatomJS js脚本是相同的: 我想知道它会是什么?

更新 我试图使我的PhantomJS脚本看起来像这样(添加延迟 2000 ),但它没有帮助:

var page = require('webpage').create();
page.viewportSize = { width: 800, height: 600 };
page.open('bl.ocks.org/mbostock/4063550', function(status) {just_wait(); });

    function just_wait() {
     setTimeout(function() page.render('c:/snapshots_db/1406931931354_bl_ocks_org_mbostock_4063550.png', {format: 'png', quality: '10'});
phantom.exit();}, 2000);}

2 个答案:

答案 0 :(得分:1)

尝试添加延迟,之后将截取屏幕截图。就在page.render()之前,这有助于页面在呈现之前实际加载。帮了我一次。如果那里有任何希望,请发帖。

否则,尝试检查保存图像的目录(对于应用程序)的写权限以及页面URL是否可用..

可能相关.. Phantomjs creating black output from SVG using page.render

还请检查其他相关主题..

答案 1 :(得分:1)

open需要成为正确网址的网址。它必须以http://https://开头。否则没有任何反应。

您应该检查status参数以获取提示。

var page = require('webpage').create();

page.open('http://example.com/', function(status){    
    console.log(1, status); // success
    page.open('example.com/', function(status){    
        console.log(2, status); // fail
        phantom.exit();
    });
});