2015-12-18 69 views
0

我使用NightmareJS進行無頭瀏覽。我的代碼如下所示:在噩夢中編寫DOM元素到瀏覽器控制檯

var Nightmare = require('nightmare'); 
var google = new Nightmare() 
    .goto('http://www.google.com') 
    .wait(3000) 
    .inject('js', 'jquery.min.js') 
    .screenshot('screenshot.png') 
    .evaluate(function(){ 
     return $('#footer').html(); 
    }, function(value){ 
     console.log(value); 
    }) 
    .run(function(err){ 
     console.log('All done!'); 
    }); 

我需要經常使用console.log調試DOM元素。但是,console.log似乎不適用於。評估塊。

我該如何登錄。評估到控制檯?

+0

你使用的是什麼版本的夢魘? – Ross

+0

2.1.0。我雖然能夠解決這個問題,我忘了添加我的答案,但我現在已經完成了。 –

回答

1

所以我能夠使用Promise早些時候解決這個問題。以下是更新代碼:

var Nightmare = require('nightmare'); 
var Promise = require('es6-promise').Promise; 

var nightmare = new Nightmare(); 
Promise.resolve(nightmare 
    .goto('http://www.google.com') 
    .wait(3000) 
    .inject('js', 'jquery.min.js') 
    .screenshot('screenshot.png') 
    .evaluate(function(){ 
     return $('#footer').html(); 
    })) 
    .then(function(value){ 
     console.log(value); 
     console.log('All Done!'); 
     return nightmare.end(); 
    }) 
    .then(function(result){ 
    }, function(err){ 
     console.error(err); 
    }); 

請記住npm install es6-promise。除了我在這裏使用的其他Javascript實現外,您還可以使用其他Javascript Promises實現。

希望它有幫助。

+0

不要打死馬,如果你打算使用'es6-promises',你可能想使用'.polyfill()'方法。 _編輯:_得到了Node節點版本上的問題流,抱歉。 – Ross

0

console.log()作品(裏面的evaluate())的頁面內容的精細裏面,但你必須聽吧:

new Nightmare() 
    .on("consoleMessage", function(msg){ 
     console.log("remote> " + msg); 
    }) 
    .goto('http://www.google.com') 
    .evaluate(function(){ 
     console.log($('#footer').html()); 
    }, function(){}) 
    ... 

請記住,你不能只是完全輸出DOM節點像控制檯你會在你最喜歡的瀏覽器的開發工具。這太多了。您必須打印您必須自己構建的DOM節點的表示

您也可以使用所有其他事件PhantomJS provides以相同的方式,但這僅適用於2.x之前的Nightmare版本,因爲從版本2.x開始,Electron被用作基礎瀏覽器而不是PhantomJS。

+0

謝謝。這雖然沒有奏效。我嘗試了一個簡單的'console.log('page_scope')',我沒有在控制檯中看到它;我得到的只是'全部完成'。 –