Module casperJS可以';找不到变量:$

Module casperJS可以';找不到变量:$,module,casperjs,evaluate,Module,Casperjs,Evaluate,我正在尝试使用this.evaluate()调用另一个模块中定义的函数 代码段(调用函数)为: this.waitFor(函数检查(){ var re=this.evaluate(universe.answer(couponElement,url)); 如果(re!=“否”&re!=“是”&re!=null){ couponObj.推送(re); 定义函数的模块如下所示: var require=patchRequire(require); var utils=require('utils')

我正在尝试使用
this.evaluate()
调用另一个模块中定义的函数

代码段(调用函数)为:

this.waitFor(函数检查(){
var re=this.evaluate(universe.answer(couponElement,url));
如果(re!=“否”&re!=“是”&re!=null){
couponObj.推送(re);
定义函数的模块如下所示:

var require=patchRequire(require);
var utils=require('utils');
exports.answer=函数(couponElement,url){
变量lblinvalidcon='lblinvalidcon';
var tolTipCouponinner='tolTipCouponinner';
var txtfccupondisocount='txtfccupondisocount';
var btnRemoveFC优惠券='btnRemoveFC优惠券';
var check=$('#txtcooponcode').css('backgroundImage');
如果(check.indexOf('ajax-loader.gif')>-1){
返回“否”;
}否则{
if(document.getElementById(lblinValidCoon)!=null){

基本上,我想使用this.evaluate调用函数,但无法这样做。

首先,尝试使用最简单的
evaluate
remote.message
事件从页面捕获
控制台.log

casper.on("remote.message", function(msg) { 
    console.log("[page] " + msg); 
});

this.evaluate(function () { 
    console.log("Hi phantomworld! I am hello-ing from remote page!"); 
});
接下来,检查jQuery是否存在:

this.evaluate(function () { 
    console.log(typeof jQuery); 
});
如果它说,
[page]函数
,jQuery就出现在页面中。你需要挖掘更多

如果没有,则注入:

var casper = require('casper').create({
    clientScripts:  [
        'includes/jquery.js'
    ]
});     

实际上,您没有将
answer
函数传递给
casper.evaluate
,而是调用了该函数。问题是,以这种方式,
answer
没有在页面上下文中执行,因此,
$
没有定义。在页面上下文中执行函数的
casper.evaluate
是沙盒。它无法ot使用外部定义的变量。传递的函数必须是自包含的

要解决此问题,
answer
使用的参数可以作为附加参数传递给

换线

var re = this.evaluate(universe.answer(couponElement, url));


如果JQuery不在页面中,您需要遵循。

是否检查以确保远程页面已加载JQuery?您可以通过在浏览器中访问该页面并尝试在浏览器的开发人员工具中使用JQuery功能来完成此操作。可能存在重复的
var re = this.evaluate(universe.answer, couponElement, url);