Phantomjs呈现错误的快照大小

时间:2016-01-06 01:09:57

标签: javascript html phantomjs

我们尝试使用phantomjs(可调整页面和固定页面)从不同的网页制作快照。 当我们尝试在维基百科上执行此操作(页面可调整大小)时,将忽略来自客户端的视口尺寸。 问题在于渲染,因为我们定义了视口宽度和高度。 似乎Phantomjs首先略微拉伸页面(快照的文本比原始的维基百科略大),然后它会缩小右边距,并在底部添加大的边距。

以下是代码:

var oWebpage = Webpage.create();

oWebpage.viewportSize = {
    width  : nViewportWidth,
    height : nViewportHeight
};

oWebpage.onLoadFinished = function() {
    if (oWebpage.injectJs('inject.js')) {
        // nothing is being done to affect page size in inject.js
        try {
            oWebpage.evaluate(function() {
                // nothing is being done to affect page size here either
            });
            oWebpage.render(sImagePath, {format: 'png', quality: '100'});
            phantom.exit();
        } catch (oError) {
            phantom.exit(1);
        }
    } else {
        phantom.exit(1);
    }
};

oWebpage.open(sMyUrl, function(sStatus) {
    if (sStatus != 'success') {
        phantom.exit(1);
    }
});

我们尝试在evaluate()代码中获取文档大小和窗口大小,它们都等于来自客户端的视口大小。

我们尝试使用page.zoomFactor,它没有帮助。 Cliprect也没有帮助,它只是剪切页面,但它已经在快照上调整大小。

在我们尝试过的所有其他页面上,它完美无缺,只有维基百科上的行为才是如此奇怪。太奇怪了。 有没有人有这样的问题?

1 个答案:

答案 0 :(得分:1)

发现维基百科页面上的问题在于其css。 它包含了' vw'由Phantom错误处理的值。它不是像素值,而是来自Viewport的百分比。 唯一的解决方法是解析CSS并摆脱' vw'属性。

虽然毕竟完成幻影突然停止工作。切换到NightmareJs - 至少它是稳定的。