gpt4 book ai didi

javascript - Nightmare JS 使用 .evaluate 返回变量

转载 作者:行者123 更新时间:2023-12-03 01:17:27 25 4
gpt4 key购买 nike

我是 Javascript、Node.js 和 Nightmare 新手。我正在尝试添加一个功能来计算页面上的标题数量,然后等到标题总数增加 5。

这是片段:

.evaluate(function () {
var elements = Array.from(document.getElementsByClassName('title'));
var firstCount = elements.length;
var higherCount = firstCount + 5;
var selector = '\'#price' + higherCount + '\'';
return selector;
})
.wait(selector)

当我运行时,出现错误:

.wait(selector)
^ ReferenceError: selector is not defined at Object.

如何将变量 selector 获取到 .wait 命令?

最佳答案

根据文档,函数评估将函数的返回值传递给调用者。

http://phantomjs.org/api/webpage/method/evaluate.html

因此在您的示例中,调用将是

var selector = page.evaluate(function () {
var elements = Array.from(document.getElementsByClassName('title'));
var firstCount = elements.length;
var higherCount = firstCount + 5;
var selector = '\'#price' + higherCount + '\'';
return selector;
});

如果由于某种原因评估调用的内容是异步的,您可以返回一个 promise ;

page.evaluate(function () {

return new Promise( function(success, error) {
// whatever is the async thing
success(value);
// or if there is an error
error("details of error");
}

}).then( function (results) {
// we have our results
}).catch( function(err) {
// ... oops
});

这可能与 async/await 兼容,具体取决于上下文。

关于javascript - Nightmare JS 使用 .evaluate 返回变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51939213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com