2015-07-06 66 views
1

嗨已经尝试了所有的这些:如何在Phantomjs(javascript)中获得完整html页面的高度?

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

在一个正常的浏览器,但在Phantomjs这些工作,我得到了CMD(命令行窗口)的高度。我想要得到的高度,这样我可以裁剪稍后在代码中截图..和页面的高度必须是因为它正在浏览器上正在浏览

我越来越300像素,我想获得完整的HTML页面高度(这取决于URL)..

+0

如果没有真正的浏览器,你期望得到什么?为什么CMD线窗口高度不能用于测试目的?考虑一下你的帖子的[编辑]来澄清。 – jmort253

+0

为什么CMD窗口的高度不能替代,因为Phantom没有实际的物理浏览器? – jmort253

+0

CMD高度是什么意思?你有什么样的价值观,你期望什么样的价值观?请显示完整的示例脚本。 –

回答

6

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

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

var url = 'http://www.stackoverflow.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>可能不可滚动,但只有一些具有所有(可滚动)内容的子元素。在这种情况下,每个值都等于视口高度。
+0

我在控制台日志中没有任何内容:s –

+0

此脚本适用于PhantomJS 2.0.0和PhantomJS 1.9.7。请注册['onConsoleMessage'](http://phantomjs.org/api/webpage/handler/on-console-message.html)和['onError'](http://phantomjs.org/api/webpage /handler/on-error.html)事件。也许有错误。如果绑定是一个问题,你需要[shim](https://github.com/ariya/phantomjs/issues/10522#issuecomment-39248521)。 –

+0

它现在正在工作,我在最初的代码中做了错误的事情,但我会将您的答案标记为正确的,谢谢;) –

相关问题