
由于需要通过浏览器的console控制台用js实现在网页上实现一个点击的自动化操作。
按钮
Button同时添加了两个事件监听器,一个是冒泡阶段事件监听器(useCapture为false),需要正常触发;另一个是捕获阶段事件监听器(useCapture为true),调用了event.stopPropagation()方法。
其中需要触发冒泡阶段事件监听器,但是捕获阶段事件监听器调用了event.stopPropagation()方法,所有采用以下方式模拟点击该Button没有任何反应:
btn = document.getElementsByClassName('')[0]
btn.click()模拟点击按钮btn.dispatchEvent(new MouseEvent('click', { bubbles: true }));btn.send_keys(Keys.ENTER)注:不能直接调用冒泡阶段的事件监听器,也不能修改捕获阶段的事件监听器
其他尝试(都没有效果)
setTimeout函数来延迟调用event.stopPropagation()方法。// 获取元素 let element = document.getElementById('myElement'); // 添加捕获阶段的事件监听器 element.addEventListener('click', function(event) { setTimeout(function() { event.stopPropagation(); }, 0); }, true); // 添加冒泡阶段的事件监听器 element.addEventListener('click', function() { console.log('冒泡阶段的事件监听器被触发'); }, false); // 触发点击事件 element.click(); dispatchEvent方法来创建和触发一个新的事件。// 获取元素 let element = document.getElementById('myElement'); // 创建一个点击事件 let event = new MouseEvent('click', { bubbles: true, // 使事件在冒泡阶段传播 cancelable: true // 使事件可以被取消 }); // 添加冒泡阶段的事件监听器 element.addEventListener('click', function() { console.log('冒泡阶段的事件监听器被触发'); }, false); // 触发事件 element.dispatchEvent(event); 如果能解决,可以有偿
1 shenyu1996 2024-06-08 07:26:33 +08:00 via Android 事件注册前重写一下这个方法呢 Event.prototype.stopPropagation ,前面加一些判断逻辑 |
2 Eighty OP 好像可以哎!感谢大佬回答 |