在 Nightmare 中将 DOM 元素写入浏览器控制台
Writing DOM elements to the browser console in Nightmare
我正在使用 NightmareJS 进行无头浏览。我的代码如下所示:
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
似乎在 .evaluate 块内不起作用。
如何将 .evaluate 中的内容记录到控制台?
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。
所以我能够更早地使用 Promises 解决这个问题。这是更新后的代码:
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 Promises 实现。
希望对您有所帮助。
我正在使用 NightmareJS 进行无头浏览。我的代码如下所示:
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
似乎在 .evaluate 块内不起作用。
如何将 .evaluate 中的内容记录到控制台?
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。
所以我能够更早地使用 Promises 解决这个问题。这是更新后的代码:
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 Promises 实现。
希望对您有所帮助。