使用casperjs1.1.0-beta3和幻影1.9.8的代码列表如下:
function getImage(locator, casper) {
return casper.evaluate(function(locator) {
return Array.prototype.map.call(document.querySelectorAll(locator), function(e) {
return e.getAttribute('src');
});
},locator);
};
casper.start("http://stackoverflow.com/", function () {
var img = getImage('img[class="sponsor-tag-img"]', this);
this.echo(img[0]);
this.download(img[0], "logo.png");
});
casper.run();但是,如果我将代码分成两个文件并从另一个文件调用util.getImage(),则会出现以下错误:~/tmp/PhantomCSS $ casperjs test --web-security=no demo/stack.js
FAIL TypeError: 'undefined' is not a function (evaluating 'util.getImage('img[class="sponsor-tag-img"]', this)')
# type: uncaughtError
# file: demo/stack.js:5
# error: 'undefined' is not a function (evaluating 'util.getImage('img[class="sponsor-tag-img"]', this)')
# TypeError: 'undefined' is not a function (evaluating 'util.getImage('img[class="sponsor-tag-img"]', this)')
# at demo/stack.js:5
# at runStep (/usr/local/lib/node_modules/casperjs/modules/casper.js:1553)
# at checkStep (/usr/local/lib/node_modules/casperjs/modules/casper.js:399)
# stack: not providedstack.js:
var util = require('/home/gauss/tmp/PhantomCSS/demo/util.js');
casper.start("http://stackoverflow.com/", function () {
var img = util.getImage('img[class="sponsor-tag-img"]', this);
this.echo(img[0]);
this.download(img[0], "logo.png");
});
casper.run();util.js:
function getImage(locator, casper) {
return casper.evaluate(function(locator) {
return Array.prototype.map.call(document.querySelectorAll(locator), function(e) {
return e.getAttribute('src');
});
},locator);
};怎么修呢?
发布于 2014-12-07 11:43:17
这不是require的工作方式。它非常类似于node.js类型的要求。
你有两种可能性。有关更多信息,请参见文档。
module.exports
util.js:
function getImage(locator, casper) {
// impl
}
module.exports = getImage;stack.js:
var getImage = require('util'); // extension can be omitted
// use getImage(locator, casper)这种类型最适合于类函数或将全局对象传递给所有函数,而不是实用程序函数的集合。一个备选案文是:
util.js:
function getImage(locator, casper) {
// impl
}
module.exports = function(casper){
return {
getImage: function(locator){
return getImage(locator, casper)
}
};
};stack.js:
var util = require('util')(casper); // extension can be omitted
// use util.getImage(locator)exports
util.js:
function getImage(locator, casper) {
// impl
}
exports.getImage = getImage;stack.js:
var getImage = require('util'); // extension can be omitted
// use getImage(locator, casper)顺便说一下,您的getImage实用程序函数已经在CasperJS中作为getElementsAttribute提供了。
casper.getElementsAttribute(locator, "src");https://stackoverflow.com/questions/27341395
复制相似问题