2015-07-06 89 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

它現在正在工作,我在最初的代碼中做了錯誤的事情,但我會將您的答案標記爲正確的,謝謝;) –

相關問題