Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CasperJS-使用fill()vs evaluate()vs sendKeys()_Javascript_Phantomjs_Casperjs - Fatal编程技术网

Javascript CasperJS-使用fill()vs evaluate()vs sendKeys()

Javascript CasperJS-使用fill()vs evaluate()vs sendKeys(),javascript,phantomjs,casperjs,Javascript,Phantomjs,Casperjs,我正在学习CasperJS,能够使用fill()登录到网站,但不能使用this.evaluate()或this.sendKeys() 我用这个.evaluate()和这个.sendKeys()有什么错 这项工作: casper.then(function() { this.fill('form[class="login-form"]', { 'session_key': 'username', 'session_password': 'password'

我正在学习CasperJS,能够使用
fill()
登录到网站,但不能使用
this.evaluate()
this.sendKeys()

我用
这个.evaluate()
这个.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');
})


由于你的问题是一般性的而不是具体的,我将试着以同样的思路回答

fill和FillSelector用于快速填充简单表单

如果您的网站使用大量javascript,并且在操作时触发事件,那么您就有SendKeys,它将尝试在事件发生时触发这些事件

最后,如果SendKeys不执行此任务,则始终可以使用evaluate手动执行并触发这些事件。如果打开浏览器控制台并检查要对其执行操作的图元,则会看到附加到这些图元的事件。从这里,您可以看到它们是DOM事件还是JQuery事件,因此您可以相应地使用document.querySelector或$。在编写任何代码之前,要知道,如果您跳转到浏览器javascript控制台,您在那里执行的任何代码都将在您的评估范围内得到;在将代码应用于脚本之前,可以在浏览器中快速测试代码

我没有详细介绍,我只是根据我的个人经验介绍了“fill()vs evaluate()vs sendKeys()”的表面,但为了具体回答您的问题,我们没有HTML页面,因此很难说。SendKeys无法工作但无法评估的原因有很多。在评估范围中,选择器可能错误或缺少事件


最后,正如Artjom所提到的,对于单击,最好选择casper。单击(选择器)

由于您的问题更一般而不是具体,我将尝试以同样的方式回答

fill和FillSelector用于快速填充简单表单

如果您的网站使用大量javascript,并且在操作时触发事件,那么您就有SendKeys,它将尝试在事件发生时触发这些事件

最后,如果SendKeys不执行此任务,则始终可以使用evaluate手动执行并触发这些事件。如果打开浏览器控制台并检查要对其执行操作的图元,则会看到附加到这些图元的事件。从这里,您可以看到它们是DOM事件还是JQuery事件,因此您可以相应地使用document.querySelector或$。在编写任何代码之前,要知道,如果您跳转到浏览器javascript控制台,您在那里执行的任何代码都将在您的评估范围内得到;在将代码应用于脚本之前,可以在浏览器中快速测试代码

我没有详细介绍,我只是根据我的个人经验介绍了“fill()vs evaluate()vs sendKeys()”的表面,但为了具体回答您的问题,我们没有HTML页面,因此很难说。SendKeys无法工作但无法评估的原因有很多。在评估范围中,选择器可能错误或缺少事件


最后,正如Artjom提到的,对于单击,最好使用casper.click(selector)

我看不到页面标记,因此这些选择器可能是完全错误的。另一种可能是,点击不起作用<代码>元素。单击()。有一个原因是,有多种方法可以完成看似相同的事情。我看不到页面标记,因此这些选择器可能是完全错误的。另一种可能是,点击不起作用<代码>元素。单击()。有一个原因,为什么有多种方法来做一件看似相同的事情。
casper.then(function() {
    this.sendKeys('input#login-email', 'username');
    this.sendKeys('input#login-password', 'password');
    this.click('input[value="Sign in"]')
})