我正在学习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/

10-11 20:25