【问题标题】:casperjs evaluate function returns invalid valuecasperjs评估函数返回无效值
【发布时间】:2017-07-16 12:03:13
【问题描述】:

我现在使用 casperjs 进行网络爬取。几乎一切都很好,但我遇到了一些麻烦。首先,我的代码如下所示。

casper.start().each(SOME_URLS, function(self, URL) {
    self.thenOpen(URL, function() {

        self.then(function() {
            var getDatas = function() {
                var title = $('SOME_SELECTOR').map(function() {
                    return $(this).text();
                 }).get();

                return {
                    title: title
                };
            }

            data = self.evaluate(getDatas);
            console.log(JSON.stringify(data));
        });

    });
}).run();

我想从网页获取一些数据到“数据”变量。有时数据非常好(在 console.log 上),但有时,数据是空的!

为什么会这样?我做错了什么?

【问题讨论】:

  • 看起来您正在使用 jQuery,如果您不将其添加到您的 casper 用户代理,则无法保证您正在抓取的任何网站都会加载它。这可能是问题吗?也可能是您对数据的分配以错误的顺序运行,请尝试将其放在单独的 casper.then() 中。另外,请提供网站链接,该网站可以使用和无法使用,以帮助人们找到答案。

标签: casperjs


【解决方案1】:

问题是您不能多次致电casper.start。您的循环需要在 casper.start 函数内或 casper.then

请参阅此excellent SO answer 以帮助您完成此操作。

基本上只调用一次casper.start 并将你的循环放在casper.then

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    相关资源
    最近更新 更多