【问题标题】:Why can I only evaluate an anonymous function in spookyjs (casperjs)为什么我只能评估 spookyjs (casperjs) 中的匿名函数
【发布时间】:2014-05-29 14:44:19
【问题描述】:

我正在使用 spookyjs 构建一个网络爬虫:https://github.com/WaterfallEngineering/SpookyJS

我创建了一个新的诡异对象​​,我正在尝试评估一个返回某个 html 标记内容的函数。为了便于阅读,我每次都尝试使用一个函数 (returnDataFromSelector()) 来执行此操作。但是,当我通过评估传递函数时,它返回 null。

当我使用匿名函数时,它可以正常工作。如何让 returnDataFromSelector 函数正常工作?

   spooky.then(function() {
      function returnDataFromSelector(selector) {
        return function () {
          return document.querySelectorAll(selector)[0].innerHTML;
        }
      }
      var pageData = {};
      pageData.projectName = this.evaluate(returnDataFromSelector('a.green-dark')); // returns null
      pageData.projectName = this.evaluate(function () { return document.querySelectorAll('a.green-dark')[0].innerHTML;}); // returns correct string
      this.emit('pageData', pageData);
    });

【问题讨论】:

    标签: javascript phantomjs casperjs spookyjs


    【解决方案1】:

    selector 变量不在正确的上下文中。您应该将选择器单独传递给spooky.evaluate

    spooky.then(function() {
        function returnDataFromSelector(selector) {
            return document.querySelectorAll(selector)[0].innerHTML;
        }
        var pageData = {};
        pageData.projectName = this.evaluate(returnDataFromSelector, 'a.green-dark');
        pageData.projectName = this.evaluate(function () {
            return document.querySelectorAll('a.green-dark')[0].innerHTML;
        });
        this.emit('pageData', pageData);
    });
    

    【讨论】:

    • 谢谢,这应该可以。但是它现在返回一个空字符串。
    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    相关资源
    最近更新 更多