如何通过PhantomJS触发MouseDown事件?

6
我尝试了:
var clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent("mousedown", true, true);
jQuery('.left-rail-facets .facet-list .facet.CS .suggestion[data-value="B"] a')[0].dispatchEvent(clickEvent);

但它无法在网站上触发动作。没有返回任何错误。


请展示你代码的更广泛样本(你可能在不正确的位置使用了这个样本)。同时:你确定运行此代码时该元素绝对存在吗?你通过代码/截图进行了检查吗?另外,在问题中说明所使用的PhantomJS版本和环境也是很有用的。 - Vaviloff
2个回答

4
这是如何以编程方式触发DOM元素上的“mousedown”事件。为了回答你的问题,您的源代码需要有两个东西:

用于检测点击的事件监听器

在jQuery行中多个选择器之间使用逗号。

请运行以下代码片段,其中显示了修改后的jQuery行和正确运行的监听器。

<!DOCTYPE html>
<html>

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script>
    $(document).ready(function() {
      // You must have event listeners to see if anything is actually happening. For example, here I will add only a listener to the first element:
      jQuery(".left-rail-facets")[0].addEventListener('mousedown', function(e) {
        jQuery(".left-rail-facets")[0].innerHTML = "I have received a click.";
      }, false);
      // Now here is the code from your question. Please see how I have commas instead of spaces in my jQuery selector:
      var clickEvent = document.createEvent('MouseEvents');
     clickEvent.initEvent('mousedown', true, true);
      jQuery('.left-rail-facets,.facet-list,.facet.CS,.suggestion[data-value="B"],a')[0].dispatchEvent(clickEvent);
    });
  </script>
</head>

<body>

  <h1>I am a Webpage</h1>

  <p class="left-rail-facets">I have not received a click.</p>
  <p class="facet-list">I have not received a click.</p>
  <facet class="CS">I have not received a click.</facet>
  <p class="suggestion" data-value="B">I have not received a click.</p>
  <a href="url">I have not received a click.</a>

</body>

</html>


1

您需要使用document.createEvent和event.initMouseEvent:

var element = document.querySelector('.left-rail-facets .facet-list .facet.CS .suggestion[data-value="B"] a');
//or var element = jQuery('.left-rail-facets .facet-list .facet.CS .suggestion[data-value="B"] a')[0];
var elementRect = element.getBoundingClientRect();
var mouseEvent = document.createEvent('MouseEvents');
mouseEvent.initMouseEvent('mousedown', true, true, window, 0, elementRect.left, elementRect.top);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接