Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在casperjs javascript中从帮助文件调用函数_Javascript_Casperjs - Fatal编程技术网

在casperjs javascript中从帮助文件调用函数

在casperjs javascript中从帮助文件调用函数,javascript,casperjs,Javascript,Casperjs,我正在尝试为casperjs脚本中的函数添加一个helpers文件,以在多个脚本中保存重复代码 我的初始script.js文件是使用并调用下面的函数并工作 function getTitles() { var titles = document.querySelectorAll('[itemprop="title"]'); return [].map.call(titles, function (title) { return title.innerText; }); }

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

我的初始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);
helpers文件中的其他函数正在工作,因此脚本应该可以访问代码


谁能告诉我哪里出了问题。谢谢你的帮助。提前谢谢。

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

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

主脚本(script.js) 共享变量和函数(helpers.js)
如果运行
casperjs script.js
,您应该会在终端中看到
Foo Bar
。这里的
script.js
helpers.js
必须在同一个目录中。

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

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

主脚本(script.js) 共享变量和函数(helpers.js)
如果运行
casperjs script.js
,您应该会在终端中看到
Foo Bar
。这里的
script.js
helpers.js
必须在同一个目录中。

谢谢。这是因为它从另一个文件中读取函数,但只有当选择器硬编码到getTitles函数中的helpers.js文件中时才起作用。如何使用参数将选择器变量从script.js传递到helpers.js?谢谢。这是因为它从另一个文件中读取函数,但只有当选择器硬编码到getTitles函数中的helpers.js文件中时才起作用。如何使用参数将选择器变量从script.js传递到helpers.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();
var helpers = {
  foo: 'Foo',
  bar: function () {
    return 'Bar';
  }
};