我正在学习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"]')
})
答案 0 :(得分:3)
由于您的问题比一般情况更为笼统,我将尝试以同样的方式回答。
fill和fillSelectors可以快速填写简单的表格。
如果您有重量级网站,在操作上触发事件,那么您将拥有SendKeys,它会尝试触发这些事件。
最后,如果SendKeys不能完成这项工作,您可以随时使用评估并手动触发这些事件。如果您打开浏览器控制台并检查要对其执行操作的元素,您将看到附加到它们的事件。从那里,您可以看到它们是DOM事件还是JQuery事件,因此您可以相应地使用document.querySelector或$。在编写任何代码之前,请知道如果您跳转到浏览器javascript控制台,那么您在那里执行的任何代码都将成为您在评估范围内的最终代码;在将代码应用到脚本之前,您可以在浏览器中快速测试代码。
我没有详细介绍,我只是通过我的个人经验看过“fill()vs evaluate()vs sendKeys()”的表面,但具体回答你的问题,我们没有页面HTML所以它很难说。 SendKeys不能工作但不能评估的原因有很多。在您的评估范围中,选择器可能错误或缺少事件。
最后,正如Artjom所说,点击它总是最好用casper.click(选择器)