以下是我要做的事情:
var casper = require('casper').create();
casper.start('mysite.html', function() {
});
/* Casper configuration */
casper.on('remote.message', function(msg) {
this.echo('remote message caught: ' + msg);
})
function getAllImages()
{
// Get all images
var images = document.getElementsByTagName('img');
evaluateImages(images);
}
function evaluateImages(images)
{
console.log("I am in evaluateImages");
}
// Then find all pictures
casper.then(function() {
var product_image = this.evaluate(getAllImages);
});
casper.run();
但它永远不会获得evaluteImages功能。我在这里缺少什么?
答案 0 :(得分:4)
好吧,我从未使用过CasperJS,但是从我在文档中读到的内容来看,我认为这是因为evaluateImages
函数在页面的上下文中不存在。
我不确定这里的最佳做法是什么,但似乎你可以从评估回调中返回原语,所以你可以在技术上做类似的事情:
function getAllImages() {
// Get all images
var images = document.getElementsByTagName('img');
//Return an array that contains all images src attribute
return Array.prototype.map.call(images, function (img) {
return img.src;
});
}
然后你可以做类似的事情:
var images = this.evaluate(getAllImages);
evaluateImages(images);
编辑:
我需要处理页面上下文中的所有图像,正如我要比较的那样 每个都与页面中的其他元素...
也许你可以先在页面的上下文中定义一个模块:
this.evaluate(function () {
window.yourNS = {
evaluateImages: function (images) {
//do something with images
},
getAllImages: function () {
return document.getElementsByTagName('img');
}
};
});
然后你可以做类似的事情:
this.evaluate(function () {
yourNS.evaluateImages(yourNS.getAllImages());
});