Javascript 单击<;img角色=";按钮“&燃气轮机;卡斯佩斯大道

Javascript 单击<;img角色=";按钮“&燃气轮机;卡斯佩斯大道,javascript,phantomjs,casperjs,Javascript,Phantomjs,Casperjs,试图通过casperjs单击下面的元素,但它对我无效 <img alt="Pay Button" class="v-button" role="button" src="https://test/wallet-services-web/xo/button.png" tabindex="0" style="cursor: pointer; transition-property: filter; transition-duration: 0.25s; filter: brightness(1

试图通过casperjs单击下面的元素,但它对我无效

<img alt="Pay Button" class="v-button" role="button" src="https://test/wallet-services-web/xo/button.png" tabindex="0" style="cursor: pointer; transition-property: filter; transition-duration: 0.25s; filter: brightness(1);">

方法1和方法2都不适用于单击-即使我确实正确进入了“存在”块。

您应该尝试以下页面上建议的方法:


我建议您查看一下。

例如,检查一下:您可以等待特定的选择器出现

casper.start('https://yourmom.gov');

casper.waitForSelector('img.v-button', function() {
    this.click('img.v-button');
});

casper.run(); 
或者有另一种方法——我觉得更好

casper.start('http://yourmom.gov/').thenClick('img.v-button', function() {
    this.echo("clicktastic.");
});

casper.run();

这可能是因为casper是异步的。我认为您在处理单击之前从函数返回了
true
。尝试在一个
setTimeout(()=>casper.click(img),0)
中包装。有趣的一点-将尝试并发回。因此,当您“在”单个“casper.then(function()”块中时,我们不能假定指令的完成顺序是严格的?如果我们需要两个命令的完成顺序是严格的,那么它们需要在连续但独立的“casper.then(function()”块中块?或者,按照你的建议,通过超时创建一个单独的线程…哦,我上面的代码片段已经在一个“casper.then(function(){”块中了。为了简洁起见,我没有包含它。我发布的是“casper.then(function(){”块.Thx.)的内部。但是正如我提到的,元素已经存在了。我的第一行代码是“if”(casper.exists('img.v-button')){.。它存在,因为我的console.log打印正确。但一旦进入块,单击就不起作用。如果元素不存在,我就不会首先进入块,我的console.log也不会被打印。因此,没有什么可以“等待”的。
casper.start('https://yourmom.gov');

casper.waitForSelector('img.v-button', function() {
    this.click('img.v-button');
});

casper.run(); 
casper.start('http://yourmom.gov/').thenClick('img.v-button', function() {
    this.echo("clicktastic.");
});

casper.run();