我在使用CasperJS时遇到问题。基本上,这是我想要通过的步骤:
这是我的步骤1到3的设置。(我在这里捕获图像以确保我能够登录网站);
步骤1到3(加上屏幕截图):
var env = require('system').env;
var casper = require('casper').create();
var loginUrl = env.loginUrl;
var login = env.login;
var password = env.password;
casper.on('remote.message', function(event) { // log messages from browser
console.log(event);
});
casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'); // set user agent
casper.start(loginUrl); // open the following url
casper.then(function() { // login
this.fill('#form_signin', {username: login, password: password}, true);
});
casper.wait(2000, function() {
this.capture('./output/test.png');
});
casper.run();
以上效果很好。捕获的图像正是我所期待的。但是,我不想使用等待 - 相反,我想使用 waitForSelector 。我用上面的等待函数代替:
casper.waitForSelector('#attendance', function() {
this.capture('./output/test.png');
})
不幸的是,这不起作用。起初我可能是因为选择器错了。 但是,当我使用Chrome手动登录网站时,我运行了document.getElementById("出勤率")我得到了预期的元素。
如果我尝试在页面本身的上下文中搜索选择器,我认为可能会有更好的运气,所以我没有用 waitForSelector 替换等待,而是替换它有了这个:
function attendanceCheck() {
return this.evaluate(function() {
return !!document.getElementById('attendance');
});
}
casper.waitFor(attendanceCheck, function() {
this.capture('./output/test.png');
})
即使使用此设置,我也会暂停,这意味着 attendanceCheck 永远无法找到适合给定选择器的元素,即使在页面上下文中进行评估也是如此。
有人可以帮我弄清楚我做错了什么吗?我知道我可以登录,而且我知道,一旦整个页面加载,就会有一个ID为"出勤率#34;还有 waitForSelector 和 waitFor的元素无法找到此元素。 (最后,我必须单击此元素,所以我必须能够找到它)。