CasperJS运行异常:控制台无echo输出,需按回车才显示
解决CasperJS echo内容需按回车才显示的问题
我太懂这种憋屈感了——脚本跑着没问题,但echo的内容非要等按回车才蹦出来,完全看不到实时输出对吧?别着急,这其实是Windows CMD环境下PhantomJS(CasperJS基于它)的标准输出缓冲机制在搞鬼,给你几个靠谱的解决办法:
方法1:启动时加--direct参数
直接在CMD里用这个命令运行你的脚本:
casperjs --direct your_script.js
--direct参数会让CasperJS跳过内部的日志缓冲,直接把所有输出打印到控制台,这样echo的内容就能实时显示了。
方法2:配置Casper实例的日志选项
修改你的脚本,在创建Casper实例时开启verbose模式并设置合适的日志级别:
var casper = require('casper').create({ verbose: true, logLevel: 'info' }); casper.start('http://casperjs.org/'); casper.then(function() { this.echo('First Page: ' + this.getTitle()); }); casper.thenOpen('http://phantomjs.org', function() { this.echo('Second Page: ' + this.getTitle()); }); casper.run();
this.echo()默认输出的是info级别的日志,开启verbose并把logLevel设为info,就能确保这些内容直接输出到控制台,不会被缓冲起来。
方法3:手动强制刷新输出流
如果上面两种方法都没搞定,可以试试调用PhantomJS的系统模块来强制刷新输出缓冲区:
var casper = require('casper').create(); var system = require('system'); // 引入系统模块 casper.start('http://casperjs.org/'); casper.then(function() { this.echo('First Page: ' + this.getTitle()); system.stdout.flush(); // 强制刷新输出 }); casper.thenOpen('http://phantomjs.org', function() { this.echo('Second Page: ' + this.getTitle()); system.stdout.flush(); }); casper.run();
这个操作会直接告诉PhantomJS把缓冲区里的内容立刻输出到CMD,彻底解决缓冲延迟的问题。
你可以先试试方法1,最简单快捷;如果不行再依次尝试后面的方法,基本都能解决这个问题。
内容的提问来源于stack exchange,提问作者Nir Tzezana
相关产品推荐
相关产品推荐

