在casperjs javascript中调用辅助文件中的函数

时间:2017-05-25 11:03:07

标签: javascript casperjs

我正在尝试为casperjs脚本中的函数添加帮助文件,以便在多个脚本中保存重复代码。

我的初始script.js文件是使用并调用下面的函数并运行

function getTitles() {
  var titles = document.querySelectorAll('[itemprop="title"]');
  return [].map.call(titles, function (title) {
    return title.innerText;
  });
}

titles = this.evaluate(getTitles);
utils.dump(titles);

我在helpers.js中有以下功能

exports.getTitles = function (selector) {
  this.evaluate(function () {
    var titles = document.querySelectorAll(selector);
    return [].map.call(titles, function (title) {
      return title.innerText;
    });
  })
}

并尝试从这样的script.js调用

titles = helpers.getTitles('[itemprop="title"]');
utils.dump(titles);

helper文件中的其他函数正在运行,因此脚本可以访问代码。

有人可以告诉我哪里出错了。任何帮助赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:0)

exports.getTitles看起来像 Node.js 使用的 CommonJS 语法...问题是 CasperJS 不是真的节点模块,因此除非您使用 SpookyJS ,否则这不是使用此库管理模块的标准方法。

CasperJS构建于 PhantomJS 之上,它提供了一个名为injectJs的有用方法来注入外部脚本。在您的情况下,您可以像这样组织代码:

主要脚本( script.js

phantom.injectJs('helpers.js');

// ------------------------------

var casper = require('casper').create();

casper.start('http://casperjs.org/');

casper.then(function () {
  console.log(helpers.foo, helpers.bar());
});

casper.run();

共享变量和函数( helpers.js

var helpers = {
  foo: 'Foo',
  bar: function () {
    return 'Bar';
  }
};

如果您运行casperjs script.js,您应该会在终端中看到Foo Bar。此处script.jshelpers.js必须位于同一目录中。