在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
似乎在.eevaluate块内不起作用。
如何将内部的内容记录到控制台。评估?
所以我早些时候使用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实现。
希望能有所帮助。
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提供的所有其他事件,但这只适用于2.x之前的噩梦版本,因为从2.x版本开始,Electron被用作底层浏览器,而不是PhantomJS。
相关文章:
- 当浏览器控制台未打开时,为什么要求会导致Internet Explorer 9超时
- 如何从浏览器控制台重新加载修改后的.js文件
- 谷歌浏览器控制台,打印图像
- 如何检测浏览器控制台/检查器是否已打开
- JS脚本在浏览器控制台或FireBug控制台上运行有时间限制吗
- 将Protractor配置为忽略浏览器控制台错误
- 如果从浏览器控制台提交,Knockoutjs不会保存数据
- 浏览器控制台错误
- 将数据从 Web 浏览器控制台导出到剪贴板或文本文件
- 谷歌浏览器控制台保留后页面刷新
- 使用浏览器控制台发送 ajax 数据
- 如何使用 Web 浏览器控制台访问网站资源文件
- 如何从浏览器控制台禁用 JavaScript 函数调用
- 如何阻止用户从浏览器控制台更改脚本
- 从谷歌浏览器控制台内部调用主干视图方法
- 如何从浏览器控制台访问存储在函数闭包中的 javascript 变量
- 禁用浏览器控制台
- 使用浏览器控制台使用Javascript在Facebook中发送聊天消息
- 在Nightmare中将DOM元素写入浏览器控制台
- AnugularJS浏览器控制台调试