上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

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

[复制链接]

1

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2021-10-15 12:12:08 | 显示全部楼层 | 阅读模式

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

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

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

document.removeEventListener('click', window.getEventListeners(document).click[0].listener)

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

非常感谢各位的帮助.

下面是我的代码

(function() {
'use strict';

// Your code here...
    function nextVideo(){
        var pace = document.getElementsByClassName("el-tooltip item")[0];
        var nextButton = document.getElementsByClassName("btn-next ml20 pointer")[0];
        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);
})();

相关截图 bbs_21101501.png

189

主题

1474

帖子

763

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
763
发表于 2021-10-15 12:40:04 | 显示全部楼层
哥哥可以私聊一个账号密码?
我进去看看
看描述实在有点搞不清状况
QQ4548212
混的人。
回复

使用道具 举报

1

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2021-10-15 12:56:20 | 显示全部楼层
李恒道 发表于 2021-10-15 12:40
哥哥可以私聊一个账号密码?
我进去看看
看描述实在有点搞不清状况

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

使用道具 举报

189

主题

1474

帖子

763

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
763
发表于 2021-10-15 13:26:16 | 显示全部楼层
Opan 发表于 2021-10-15 12:56
谢谢你的帮助,不过账号密码确实不能给出,这网站账号是身份证号你懂的.
谢谢. ...

对addeventlistener做层过滤试一试
混的人。
回复

使用道具 举报

8

主题

173

帖子

254

积分

开发者

Rank: 6Rank: 6

积分
254

活跃会员热心会员突出贡献三好学生猫咪币纪念章中秋纪念章国庆纪念章

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

使用道具 举报

189

主题

1474

帖子

763

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
763
发表于 2021-10-15 21:47:35 | 显示全部楼层
cxxjackie 发表于 2021-10-15 18:32
getEventListeners是chrome自己加的调试命令,只能在控制台中使用,脚本无法调用的。点击无效有好几种可能 ...

不亏是大佬!
严谨!
混的人。
回复

使用道具 举报

1

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2021-10-16 15:37:42 | 显示全部楼层
cxxjackie 发表于 2021-10-15 18:32
getEventListeners是chrome自己加的调试命令,只能在控制台中使用,脚本无法调用的。点击无效有好几种可能 ...

非常感谢. 因为网站的特殊我怀疑可能是做了特殊的处理. 但是那个js文件是用webpack打包过的,昨天看得我头都大了. 我打算另外想办法再研究一下.
回复

使用道具 举报

发表回复

本版积分规则

快速回复 返回顶部 返回列表