首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SlimerJS单击链接/按钮

SlimerJS单击链接/按钮
EN

Stack Overflow用户
提问于 2014-07-27 20:02:20
回答 1查看 3.4K关注 0票数 2

我正在尝试使用SlimerJS单击页面上的按钮。

在SlimerJS文档中,我看到了sendEvent(eventType, arg1, arg2, button, modifier),它允许我们通过X和Y坐标单击给定的位置。(Doc here)

所以,我试着用下面的方法获得按钮坐标的X和Y:

代码语言:javascript
复制
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或标记名?

EN

回答 1

Stack Overflow用户

发布于 2014-07-28 18:44:53

这是一种很难做到的方法。(顺便说一句,您不能从evaluate()传回DOM对象,比如按钮,所以最好将clickButton内容移到evaluate()内部。)

最简单的方法是使用CasperJS,它是PhantomJS/SlimerJS周围的一个更高级别的抽象层。你的例子就变成了:

代码语言:javascript
复制
var casper = require('casper').create();
casper.start(url, function(){
  this.click('#signIn');
  });
casper.run();

如果你想坚持使用PhantomJS,并且你已经在页面中加载了jQuery,那么这也是相当简单的:

代码语言:javascript
复制
var webpage = require("webpage").create();

webpage.open(url).then(function(){
    this.evaluate(function(){
        $("#signIn").click();
        });
    });

另一种方法是直接向DOM对象发送一个单击事件(即,不用担心鼠标坐标):

代码语言:javascript
复制
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

(后两篇文章的来源是my own blog post,我还介绍了如何使用d3。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24980729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档