无法从 CasperJS 的 thenEvaluate() 函数中访问变量
Can't access variables from within the thenEvaluate() function in CasperJS
我最近开始学习 CasperJS,我正在尝试登录 YouTube。这是我当前的代码:
// XPathSignInButton is predefined
var Username = 'user123';
var Password = 'pass123';
casper.waitForSelector(xPathSignInButton, function() {
this.thenEvaluate(function() {
$('#Email').val(Username);
$('#Passwd').val(Password);
});
});
上面的代码不操作输入字段(不在其中写入),但是如果我将 thenEvaluate()
替换为 this.fillSelectors()
,则可以正常访问变量并且一切正常执行:
// XPathSignInButton is predefined
// signInFormSelector is predefined
casper.waitForSelector(xPathSignInButton, function() {
this.fillSelectors(signInFormSelector, {
'input[name="Email"]': Username,
'input[name="Passwd"]': Password
});
});
我首先认为我调用 jQuery 的方式有问题,但是当我用实际字符串替换变量时,例如:$('#Email').val('user123');
和 $('#Email').val('pass123');
- 它的工作方式如下一个魅力。
我的问题是如何从 thenEvaluate()
函数中访问变量。有可能吗?
evaluate
内部是沙盒页面上下文。您不能从外部使用变量(以及其他方式),您必须显式传递它们:
casper.thenEvaluate(function(username, password) {
$('#Email').val(username);
$('#Passwd').val(password);
}, Username, Password);
同样重要的是要注意(来自here):
Note: The arguments and the return value to the evaluate function must be a simple primitive object. The rule of thumb: if it can be serialized via JSON, then it is fine.
Closures, functions, DOM nodes, etc. will not work!
我最近开始学习 CasperJS,我正在尝试登录 YouTube。这是我当前的代码:
// XPathSignInButton is predefined
var Username = 'user123';
var Password = 'pass123';
casper.waitForSelector(xPathSignInButton, function() {
this.thenEvaluate(function() {
$('#Email').val(Username);
$('#Passwd').val(Password);
});
});
上面的代码不操作输入字段(不在其中写入),但是如果我将 thenEvaluate()
替换为 this.fillSelectors()
,则可以正常访问变量并且一切正常执行:
// XPathSignInButton is predefined
// signInFormSelector is predefined
casper.waitForSelector(xPathSignInButton, function() {
this.fillSelectors(signInFormSelector, {
'input[name="Email"]': Username,
'input[name="Passwd"]': Password
});
});
我首先认为我调用 jQuery 的方式有问题,但是当我用实际字符串替换变量时,例如:$('#Email').val('user123');
和 $('#Email').val('pass123');
- 它的工作方式如下一个魅力。
我的问题是如何从 thenEvaluate()
函数中访问变量。有可能吗?
evaluate
内部是沙盒页面上下文。您不能从外部使用变量(以及其他方式),您必须显式传递它们:
casper.thenEvaluate(function(username, password) {
$('#Email').val(username);
$('#Passwd').val(password);
}, Username, Password);
同样重要的是要注意(来自here):
Note: The arguments and the return value to the evaluate function must be a simple primitive object. The rule of thumb: if it can be serialized via JSON, then it is fine.
Closures, functions, DOM nodes, etc. will not work!