我试图了解casperjs,但正在努力解决这个问题。有人可以请求告诉我为什么这样可行(导航到http://www.w3schools.com/html/default.asp):
var casper = require('casper').create();
var mouse = require("mouse").create(casper);
casper.start('http://www.w3schools.com/');
casper.then(function(){
this.click('a.btn');
});
casper.then(function(){
console.log('Location is now: ' + this.getCurrentUrl());
});
casper.run();
但如果我替换
this.click('a.btn');
带
this.mouse.click('a.btn');
然后它停留在同一页面上。我以为这些都是一样的。
答案 0 :(得分:4)
根据CasperJS的即时测试:
casper.click()
创建一个事件并将其发送到目标 事件,但casper.mouse.click()
不处理任何元素 只是在给定位置产生鼠标动作。
这就产生了第二个问题,即为什么会产生影响(w3schools.com HTML非常简洁明了,据我所见,没有隐形层,或者对点击操作采取花哨的JavaScript干预)。
原因很简单。默认视口大小非常小:您的按钮在屏幕外,因此鼠标无法单击它!这是一个适合我的快速测试脚本:
var casper = require('casper').create();
//var mouse = require("mouse").create(casper);
casper.options.viewportSize = {width: 1024,height: 768};
casper.start('http://www.w3schools.com/');
casper.then(function(){
this.mouse.click('a.btn');
});
casper.then(function(){
console.log('Location is now: ' + this.getCurrentUrl());
});
casper.run();
我用PhantomJS和SlimerJS进行了测试。但是我在使用SlimerJS进行测试时才意识到这个问题,并且可以看到生成的HTML。在this.capture("aboutToClick.png");
之前放置this.mouse.click('a.btn');
也是一种很好的故障排除方法。
ASIDE:我已注释掉var mouse
行,表明您不需要它:casper
对象内部有一个。