Opan 发表于 2021-10-15 12:12:08

关于原本元素上本来已经监听click事件导致无法接受click()

> 问题是这样的, 最近有个刷课的需求,不奢求快进后台禁音什么的,我的思路很简单.
> 页面上视频上方会延后显示当前学习进度,我检测到`100%`后,就直接给下一章节元素发送一个`click()`过去,让他跳转到下一个章节上.

但是在编写的过程中发现无论向这个`div`或者它内部的`span`发送`click()`都没有任何效果.

因为这个元素是在上方导航栏,所以也排除了后续加载导致无法`click`的原因,后来我在网上看到有人说原因是本身就已经在监听`click`事件才导致的.
所以我使用下面的方法清除了监听事件,但是发现也没有效果.

```
document.removeEventListener('click', window.getEventListeners(document).click.listener)
```

通过浏览器自带的调试功能,`Event Listeners` 来查看`click`的事件,这时候我发现它只监听了`div`,没有监听下一级的`span`,但是通过浏览器调试功能清除事件之后,就算用鼠标点击该元素也不会跳转了.
我可以通过调试功能看到这个`click`的监听事件指向了网站自己的一个js脚本, 我想知道有没有什么办法可以让我的脚本接管这个过程,实现点击跳转页面的功能.

非常感谢各位的帮助.

下面是我的代码

```javascript
(function() {
'use strict';

// Your code here...
        function nextVideo(){
                var pace = document.getElementsByClassName("el-tooltip item");
                var nextButton = document.getElementsByClassName("btn-next ml20 pointer");
                if (pace == null || nextButton == null){
                        console.log("没有找到目标元素,等待页面完整载入");
                } else {
                        // 我发现这个网站的提示信息居然会发生一点小小的变化,可能会自行在不定位置添加空格.
                        let r = new RegExp("100%");
                        if (r.test(pace.textContent)){
                                nextButton.firstChild.click();
                                nextButton.click(); // 无论是div还是span都一样没效果
                                console.log("已经执行点击了,但是没有效果");
                                //location.reload();
                        }else{
                                console.log(pace.textContent);
                        }
                }
        }
        window.setInterval(nextVideo, 10000);
})();
```

相关截图 !(data/attachment/forum/202110/15/121628nba4r6iii4aziiir.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "bbs_21101501.png")

李恒道 发表于 2021-10-15 12:40:04

哥哥可以私聊一个账号密码?
我进去看看
看描述实在有点搞不清状况
QQ4548212

Opan 发表于 2021-10-15 12:56:20

李恒道 发表于 2021-10-15 12:40
哥哥可以私聊一个账号密码?
我进去看看
看描述实在有点搞不清状况


谢谢你的帮助,不过账号密码确实不能给出,这网站账号是身份证号你懂的.
谢谢.

李恒道 发表于 2021-10-15 13:26:16

Opan 发表于 2021-10-15 12:56
谢谢你的帮助,不过账号密码确实不能给出,这网站账号是身份证号你懂的.
谢谢. ...
对addeventlistener做层过滤试一试

cxxjackie 发表于 2021-10-15 18:32:11

getEventListeners是chrome自己加的调试命令,只能在控制台中使用,脚本无法调用的。点击无效有好几种可能,比如click事件是延迟绑定的,脚本注入时可能还没有click事件,或者click内部对isTrusted做了检测,还有可能是在事件传播过程中被stopPropagation/stopImmediatePropagation阻断了传播过程(这个排查起来比较麻烦)。最好还是跟进去你说的那个js文件中看看代码,必要时可以自己重新做一个click事件。

李恒道 发表于 2021-10-15 21:47:35

cxxjackie 发表于 2021-10-15 18:32
getEventListeners是chrome自己加的调试命令,只能在控制台中使用,脚本无法调用的。点击无效有好几种可能 ...

不亏是大佬!
严谨!

Opan 发表于 2021-10-16 15:37:42

cxxjackie 发表于 2021-10-15 18:32
getEventListeners是chrome自己加的调试命令,只能在控制台中使用,脚本无法调用的。点击无效有好几种可能 ...

非常感谢. 因为网站的特殊我怀疑可能是做了特殊的处理. 但是那个js文件是用webpack打包过的,昨天看得我头都大了. 我打算另外想办法再研究一下.
页: [1]
查看完整版本: 关于原本元素上本来已经监听click事件导致无法接受click()