我剛開始使用CasperJs,並且我很難調試它,因爲如此多的編碼錯誤似乎會導致腳本退出而不提供錯誤消息。當你使用詳細模式時,你會得到你應該得到的消息,直到有問題的代碼行,並且在那一刻它就會退出。CasperJS中的靜默錯誤
例如,如果我執行代碼:
var casper = require('casper').create({
verbose: true,
logLevel: "debug"
});
casper.start('https://www.google.com/#q=stackoverflow', function(){
});
casper.wait(2000, function(){
});
casper.then(function() {
hrefAr = this.evaluate(getLinks);
this.log(hrefAr.length + ' links found', 'info');
this.exit();
});
casper.run(function() {
this.exit();
});
function getLinks() {
var links = document.querySelectorAll('a');
return Array.prototype.map.call(links, function(e) {
return e.getAttribute('href');
});
}
我得到如下結果:
...a bunch of info & debug messages, followed by...
[info] [phantom] Step 4/4 https://www.google.com/search?q=stackoverflow&cad=h (HTTP 200)
[info] [phantom] 89 links found
[debug] [phantom] Navigation requested: url=about:blank, type=Other, lock=true, isMainFrame=true
[debug] [phantom] url changed to "about:blank"
如果我添加日誌語句的功能getLinks ...
...code as shown above...
function getLinks() {
this.log('getLinks ran', 'info');
var links = document.querySelectorAll('a');
...code as shown above...
...這會導致腳本失敗,如下所示:
...the same info & debug messages...
[info] [phantom] Step 4/4 https://www.google.com/search?q=stackoverflow&cad=h (HTTP 200)
...NO LOGS, ECHOS, OR RESULTS PAST THIS POINT, JUST THESE TWO CLOSING STATEMENTS...
[debug] [phantom] Navigation requested: url=about:blank, type=Other, lock=true, isMainFrame=true
[debug] [phantom] url changed to "about:blank"
它不會告訴你任何事情都出錯了,它只是把你送回空白處並結束執行。
有沒有辦法獲得更好的錯誤報告?或者任何錯誤報告?
當我嘗試實施以下使用下面的代碼解決方法:
var casper = require('casper').create({
verbose: true,
logLevel: "debug"
});
casper.start('https://www.google.com/#q=stackoverflow', function(){
});
casper.wait(2000, function(){
});
casper.then(function() {
reportErrors(function() {
hrefAr = this.evaluate(getLinks);
this.log(hrefAr.length + ' links found', 'info');
this.exit();
});
});
casper.run(function() {
this.exit();
});
function getLinks() {
//this.log('getLinks ran', 'info');
var links = document.querySelectorAll('a');
return Array.prototype.map.call(links, function(e) {
return e.getAttribute('href');
});
}
function reportErrors(f) {
var ret = null;
try {
ret = f();
} catch (e) {
casper.echo("ERROR: " + e);
casper.exit();
}
return ret;
}
我得到...
...info & debug messages shown above...
[info] [phantom] Step 4/4 https://www.google.com/search?q=stackoverflow&cad=h (HTTP 200)
ERROR: TypeError: undefined is not a constructor (evaluating 'this.evaluate(getLinks)')
--THIS IS WHERE MY LINK COUNT WOULD BE REPORTED
[debug] [phantom] Navigation requested: url=about:blank, type=Other, lock=true, isMainFrame=true
[debug] [phantom] url changed to "about:blank"
而不是'this.evaluate','this.log','this.exit'可以使用'casper.evaluate'等 – Leventix
我也一直在尋找@ NiKo的方法來將console.log事件打印到屏幕上(http://stackoverflow.com/a/11957179/1542008)非常有用。對於像我這樣的新手來說,只需將casper.on聲明粘貼到頁面的底部,並從那裏開始工作。 如果您在PC上(因此沒有casper.log事件的彩色輸出(http://docs.casperjs.org/en/latest/modules/colorizer.html#index-1)),它看起來對於添加casper.on語句更加簡單(對我來說),然後對代碼中的所有日誌消息使用console.log,完全繞過casper.log。 – Rebecca