如何在 Phantomjs (javascript) 中获取完整 html 页面的高度?

How to get the height of a full html page in Phantomjs (javascript)?

您好,这些都试过了:

document.body.scrollHeight
document.body.offsetHeight
document.documentElement.clientHeight
document.documentElement.scrollHeight
document.documentElement.offsetHeight

这些在普通浏览器中工作,但在 Phantomjs 中,我得到了 CMD(命令行 window)高度。我想得到高度,以便稍后在代码中裁剪屏幕截图。并且页面的高度必须与在普通浏览器上查看的一样

我得到 300 像素,我想获得完整的 html 页面高度(取决于 URL)..

这些值提供与其他浏览器一样的预期值。完整示例:

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

var url = 'http://www.whosebug.com/';

page.open(url, function(){
    console.log(page.evaluate(function(){
        return JSON.stringify({
            "document.body.scrollHeight": document.body.scrollHeight,
            "document.body.offsetHeight": document.body.offsetHeight,
            "document.documentElement.clientHeight": document.documentElement.clientHeight,
            "document.documentElement.scrollHeight": document.documentElement.scrollHeight
        }, undefined, 4);
    }));
    phantom.exit();
});

输出:

{
    "document.body.scrollHeight": 8777,
    "document.body.offsetHeight": 8777,
    "document.documentElement.clientHeight": 300,
    "document.documentElement.scrollHeight": 8777
}

您的情况可能并非如此的原因:

  • DOM 只能通过 page.evaluate() 访问。在 page.evaluate() 之外存在一个 document 对象,但它只是一个虚拟对象。
  • PhantomJS 的默认视口为 400x300 像素。如果网页是响应式的,那么它只会使用这个尺寸。
  • 连同上述几点,<body> 可能无法滚动,但只有一些具有所有(可滚动)内容的子元素。在这种情况下,每个值都等于视口高度。