点击链接/按钮
SlimerJS Click a link/button
我正在尝试使用SlimerJS点击页面上的按钮。
在SlimerJS文档中,我看到sendEvent(eventType, arg1, arg2, button, modifier)
允许我们通过X和Y坐标单击给定位置。(Doc)
所以,我试着得到这些X和Y的按钮坐标如下方式:
var webpage = require("webpage").create();
function clickButton(button)
{
var rect = button.getBoundingClientRect();
webpage.sendEvent('click',rect.left,rect.top,'left',0);
}
webpage.open(url).then(function(){
var button = webpage.evaluate(function(){
signInButton = document.querySelector("#signIn");
return signInButton;
});
clickButton(button);
});
这样,不会抛出错误,但按钮似乎没有被点击。这种做法有什么问题吗?有没有更好的办法?是否有一种方法来点击一个按钮或链接提供它的ID或标签名称?
这是一种相当困难的方法。(顺便说一句,你不能传递一个DOM对象,像一个按钮,从evaluate()
回来,所以你最好把你的clickButton
内容移动到evaluate()
里面。)
简单的方法是使用CasperJS,它是围绕PhantomJS/SlimerJS的高级抽象层。你的例子变成:
var casper = require('casper').create();
casper.start(url, function(){
this.click('#signIn');
});
casper.run();
如果你想坚持使用PhantomJS,并且你已经在页面中加载了jQuery,那么它也相当容易:
var webpage = require("webpage").create();
webpage.open(url).then(function(){
this.evaluate(function(){
$("#signIn").click();
});
});
另一种方法是直接向DOM对象发送一个点击事件(即,而不是担心鼠标坐标):
var webpage = require("webpage").create();
webpage.open(url).then(function(){
this.evaluate(function(){
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
return document.querySelector('#signIn').dispatchEvent(evt);
};
});
为什么我认为这比处理鼠标线更好?因为使用线的鼠标点击必须在可见按钮上,这意味着你必须担心你的视口;见https://stackoverflow.com/a/24861718/841830
相关文章:
- 按钮链接加载后JS确认弹出
- 在我的Javascript和HTML之间的表单提交按钮链接中遇到问题
- ajax表中的按钮链接
- 作为按钮/链接的复杂形状
- 单击按钮/链接后更改ng-include内的内容
- 警报 JS 确认无法使用按钮链接
- 根据选择的单选按钮更改按钮链接
- 滚动按钮链接Div Id's
- 如何获取警报框中的按钮链接
- Codeigniter在单击按钮/链接时创建新的文本字段
- 无法使用jQuery按钮链接连接外部HTML文件
- Htmlunit Javascript按钮/链接
- 引导:弹出窗口按钮链接不工作
- 添加新的按钮/链接悬停在剑道网格上
- 当点击jQuery循环插件时,暂时禁用下一个/上一个按钮(链接)(不一定是jQuery循环问题)
- 如何导航一个页面到另一个页面时,点击按钮/链接在html5
- 制作按钮链接- Javascript
- 如何使用按钮链接另一个页面
- 我怎么能通过一个变量到动作属性下载(按钮/链接)使用HTML或javascript,
- 如何获得标题和按钮/链接内联