Dav*_*ron 2 javascript scope phantomjs 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);
});
});
Run Code Online (Sandbox Code Playgroud)
上面的代码不会操作输入字段(不会在其中写入),但是如果我替换thenEvaluate()
为this.fillSelectors()
,则会正常访问变量并且一切正常:
// XPathSignInButton is predefined
// signInFormSelector is predefined
casper.waitForSelector(xPathSignInButton, function() {
this.fillSelectors(signInFormSelector, {
'input[name="Email"]': Username,
'input[name="Passwd"]': Password
});
});
Run Code Online (Sandbox Code Playgroud)
我首先想到我如何调用jQuery有一个问题,但当我用实际的字符串替换变量时:$('#Email').val('user123');
和$('#Email').val('pass123');
- 它就像一个魅力.
我的问题是如何从thenEvaluate()
函数中访问变量.它可能吗?
里面evaluate
是沙盒页面上下文.你不能从外面使用变量(以及其他方式),你必须明确地传递它们:
casper.thenEvaluate(function(username, password) {
$('#Email').val(username);
$('#Passwd').val(password);
}, Username, Password);
Run Code Online (Sandbox Code Playgroud)
同样重要的是要注意(从这里):
注意: evaluate函数的参数和返回值必须是一个简单的原始对象.经验法则:如果它可以通过JSON序列化,那么它很好.
闭包,函数,DOM节点等不起作用!
归档时间: |
|
查看次数: |
2201 次 |
最近记录: |