Casperjs评估函数不工作



我正在研究casperjs。我写了下面的程序来得到输出:

var casper = require('casper').create();
var cookie;
casper.start('http://wordpress.org/');
casper.then(function() {
       this.evaluate(function() {
            cookie=document.cookie;
       })
   })
casper.then(function() {
console.log("Page cookie");
console.log(cookie);
})
casper.run(function() {
 this.echo('Done.').exit();
})

上面的输出是:
页面饼干
未定义的
做。

为什么它给我undefined?

evaluate背后的概念是,您将代码传递到浏览器的控制台并在那里执行代码。如果在evaluate方法中定义任何变量,该变量将是该方法的局部变量。这个范围是局部的。当您处理Casper时,您应该考虑变量的作用域。
所以当你试图在main函数中打印"cookie"时,它会说它是未定义的。这是意料之中的。
注意,你不能在evaluate方法中使用echo()、console.log()。

cookie = this.evaluate(function() { var cookieLocal=document.cookie; return cookieLocal; })

这里的" cookiellocal "是一个局部变量。这将返回值给全局变量"cookie"。因此,当您尝试在main函数中打印值时,它将按预期工作。我希望这将使您在声明变量时考虑作用域。你可以直接退货做退货。不需要使用局部变量。

cookie = this.evaluate(function() { return document.cookie; })

我在使用求值方法时推荐的另一个重要事项。在开发代码时尽量使用try catch方法。根据你的要求,生产中不需要它。我们不能在控制台中打印任何东西。所以使用try catch来调试。

casper.then(function() { cookie = this.evaluate(function() { try { return document.cookie; } catch (e) { return e; } }) this.echo (JSON.stringify ('cookie :'+cookie)); })

请注意。Echo()应该在evaluate方法之外。

删除var饼干

        cookie = casper.evaluate(function() {
                 return document.cookie;
         })
        casper.then(function() { 
                console.log("Page cookie");    
                console.log(cookie);        
        })

最新更新