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

标签 javascript node.js screen-scraping nightmare

我是 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/

相关文章:

javascript - 如何使用 Youtube API 从播放列表中获取超过 5 个视频

javascript - Chrome 内容脚本不工作 : DOMContentLoaded listener does not execute

javascript - 如何在 d3.js 中转换路径

javascript - 使用nodejs加载动态html

python - 从网页中抓取 YouTube 链接

javascript - 私有(private) NPM : How can the latest version of a module be installed?

json - Angular 4 + Express 未在 Heroku 上启动

javascript - 以 HTTPS 方式提供 Apostrope-CMS S3 Assets 和附件

c# - 延迟后屏幕抓取网页

c# - htmlagilitypack 未加载页面的全部内容