我正在学习CasperJS,并且能够使用fill()
登录到网站,但无法使用this.evaluate()
或this.sendKeys()
this.evaluate()
和this.sendKeys()
我在做什么错?
这有效:
casper.then(function() {
this.fill('form[class="login-form"]', {
'session_key': 'username',
'session_password': 'password'
}, true);
});
但是,这些都不做:
casper.then(function() {
this.evaluate(function(username, password) {
document.querySelector('input#login-email').value = username;
document.querySelector('input#login-password').value = password;
document.querySelector('input[value="Sign in"]').click();
}, 'username', 'password');
})
要么
casper.then(function() {
this.sendKeys('input#login-email', 'username');
this.sendKeys('input#login-password', 'password');
this.click('input[value="Sign in"]')
})
最佳答案
由于您的问题比一般问题更具体,我将尝试以同样的方式回答。
fill和fillSelector可以快速填充简单表单。
如果您有大量使用JavaScript的网站,并且在操作上触发了事件,那么您将拥有SendKeys,它将尝试在事件发生时触发这些事件。
最后,如果SendKeys不能完成任务,则始终可以执行评估并手动触发这些事件。如果打开浏览器控制台并检查要对其执行操作的元素,则将看到附加的事件。从那里,您可以查看它们是DOM事件还是JQuery事件,因此可以相应地使用document.querySelector或$。在编写任何代码之前,请知道,如果您跳到浏览器JavaScript控制台,那么执行的任何代码都将最终在评估范围内;您可以先在浏览器中快速测试代码,然后再将其应用于脚本。
我没有详细介绍,我只是以我的亲身经历来介绍“ fill()vsvaluate()vs sendKeys()”,但是要专门回答您的问题,我们没有页面HTML,因此很难告诉。为什么有很多原因使SendKeys无法工作但无法评估。在您的评估范围内,选择器可能错误或缺少事件。
最后,正如Artjom所述,对于单击,最好总是使用casper.click(selector)
关于javascript - CasperJS-使用fill()vs validate()vs sendKeys(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34551890/