thenEvaluate()是否以与evaluate()相同的方式返回

Does thenEvaluate() return in the same way as evaluate()?

本文关键字:返回 方式 是否 thenEvaluate evaluate      更新时间:2023-09-26

所以我知道我可以使用return…将数据从window返回到casper。。。

casper.evaluate(function() {
    return 'foobar';
}, {});

如何使用thenEvaluate()实现相同的功能?

您不能从casper.thenEvaluate返回任何内容。它将被忽略。您需要将其拆分为casper.thencasper.evaluate。请参阅此问题以了解类似内容。

casper.thenEvaluate是一个异步步进函数,就像所有其他then*wait*函数一样。从异步函数返回有用的内容是不可能的。你最可能想要的是:

var something;
casper.start(url).then(function(){
    something = this.evaluate(function(){
        return 'foobar';
    });
    this.click("someSelector");
}).then(function(){
    // do something with "something" on the new page
});

我怀疑你以后不会问是否不想使用something。所有步骤函数都返回初始的casper对象,这样就可以像上面的例子一样用promise语法编写脚本。