为什么我只能在spookyjs(casperjs)中评估匿名函数

时间:2014-05-29 14:44:19

标签: javascript phantomjs casperjs spookyjs

我正在使用spookyjs构建一个网络抓取工具:https://github.com/WaterfallEngineering/SpookyJS

我创建了一个新的怪异对象,我正在尝试评估一个返回某个html标记内容的函数。为了便于阅读,我每次尝试使用函数(returnDataFromSelector())来执行此操作。但是,当我通过evaluate传递函数时,它返回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);
    });

1 个答案:

答案 0 :(得分: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);
});