31

console.logで使用すると、なぜevaluate機能するのですか:

casper.then(function() {
  this.evaluate( function() {
    console.log('hello'); 
  });
});

しかし、これはうまくいきません:

casper.then(function() {
  this.evaluate( function() {
    setTimeout( function() {console.log('hello');}, 1000);
  });
});
4

4 に答える 4

72

casperjsとリモートページ環境を混同しているためです。このevaluate関数はリモートページenv内でコードを実行するため、console.log呼び出しは何も出力しません。

リモート console.logコールをキャッチしたい場合は、remote.messageイベントを聞いてください。

casper.on('remote.message', function(msg) {
    this.echo('remote message caught: ' + msg);
})

ところで、イベントのドキュメントは、評価用のドキュメントと同様に、かなり網羅的です。

于 2012-08-14T16:55:39.883 に答える
19

@NiKoの答えは重要です。

また、エラーが発生した場合、console.log() メッセージを出力するのに十分でなく、無音で終わる可能性があるため、次を追加することをお勧めします。

casper.on( 'page.error', function (msg, trace) {
    this.echo( 'Error: ' + msg, 'ERROR' );
});
于 2013-08-22T18:17:32.243 に答える
11

CasperJS にはClientUtilsが含まれており、これをリモート ページから使用して、casper スクリプトのコンソールに簡単にログインできます。

__utils__.echo('This message is logged from the remote page to the CasperJS console');
于 2015-03-25T15:35:32.323 に答える