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

[油猴脚本开发指南]实战91学习网videojs去广告

[复制链接]
  • TA的每日心情
    无聊
    2022-4-18 01:37
  • 签到天数: 30 天

    [LV.5]常住居民I

    303

    主题

    2584

    帖子

    2653

    积分

    荣誉开发者

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    2653

    猫咪币纪念章

    发表于 2022-3-6 10:32:27 | 显示全部楼层 | 阅读模式

    前文

    之前我们简单搞了超级星星获取player

    这节课再次进行整理一下,纳入开发指南里

    我们目标是实战91学习网videojs去广告

    开始

    首先我们应该判断什么时候设置了videojs

    打印一下window.videojs

    可以看到他是在window下挂在了一个videojs对象

    那我们起手一个run-at提前注入外加Object.defineproperty

    unsafeWindow.savevideojs=undefined
    debugger;
    Object.defineProperty(unsafeWindow,'videojs',{
        get(){
            let result=unsafeWindow.savevideojs;
            return result
        },
        set(obj){
            unsafeWindow.savevideojs=obj;
    
        }
    })

    这样就可以劫持到设置对象的过程了

    然后可以尝试打印savevideojs是否存在,如果存在代表劫持成功

    关于拿Player的两种方法

    目前来说存在两种通用方法

    第一种

    即使直接对videojs的函数进行一层封装,弊病就是因为我们替换了原对象,缺失了一些东西,只能缺什么想办法补什么,所以更推荐使用封装+proxy代理的手法来进行处理,但是这种方法我个人是不太推荐了,更推荐使用第二种方法。

    第二种方法

    可以参考https://bbs.tampermonkey.net.cn/thread-1833-1-1.html

    我们可以直接使用videojs的hooks钩子,来在videojs初始化对象前对config配置进行处理,或者在videojs初始化后对一些函数或者对象进行处理

    我们使用beforesetup钩子和setup钩子

    使用方式很简单

    videojs.hook('beforesetup', function(videoEl, options) {
    
      // videoEl will be the video element with id="some-id" since that
      // gets passed to videojs() below. On subsequent calls, it will be
      // different.
    
      videoEl.className += ' some-super-class';
    
      // autoplay will be true here, since we passed it as such.
      if (options.autoplay) {
        options.autoplay = false
      }
    
      // Options that are returned here will be merged with old options.
      //
      // In this example options will now be:
      //   {autoplay: false, controls: true}
      //
      // This has the practical effect of always disabling autoplay no matter
      // what options are passed to videojs().
      return options;
    });

    初始化之前会调用beforesetup钩子,传入el元素和config配置对象

    videojs.hook('setup', function(player) {
    
      // Initialize the foo plugin after any player is created.
      player.foo();
    });

    初始化之后会调用setup钩子,传入初始化好的player对象

    我们接下来开分析流程

    图片.png

    首先刚开始是没有广告的

    点击之后才出现广告

    图片.png

    证明是在点击播放器之后才进行触发的,根据f12找到了该广告的元素名是preroll-blocker

    我们直接js搜寻对应元素,找到

    图片.png

    这里可以看到是初始化一些数据,在视频ready过程中执行该函数

    但是ready并没有弹广告呀?

    我们继续往后看看

    图片.png

    找到了各种绑定事件

    我因为懒得思考了,直接对所有都打了一个断点

    图片.png

    发现点击页面的时候回调了playing函数

    这里首先对播放器进行了暂停处理,然后调用了d函数,传入了vjs-hidden,执行到d的时候开始了弹广告

    所以我们大概可以判断出来是playing钩子时间内的回调函数控制了广告的触发

    所以我们思路大概来了

    首先我们用videojs的hooks钩子

    在初始化player对象之后,我们在hooks钩子里对on函数进行劫持,找到playing事件就不让其进行绑定,更换为我们自己的函数

    理论推理成功,开始实战

    
    unsafeWindow.savevideojs=undefined
    debugger;
    Object.defineProperty(unsafeWindow,'videojs',{
        get(){
            let result=unsafeWindow.savevideojs;
            console.log('读取了对象',result);
            return result
        },
        set(obj){
            obj.hook('setup', function(player) {
               // player.ready=()=>{};
                window.player=player
                let onlyon=player.on
                debugger;
                player.on=function(...args){
                    if(args.length>=1&&args[0]==="playing"){
                        args[1]=function(){
                            player.play()
                        }
    
                    }
                    return onlyon.call(this,...args)
                }
    
            });
            unsafeWindow.savevideojs=obj;
    
        }
    })

    实测成功,videojs拿捏成功!

    结语

    我们不仅可以对其初始化之后进行一些函数的劫持,以及相应的各种东西的处理

    我们也可以在初始化之前进行一些配置选项

    具体可以参阅一些百度,谷歌的文章,也可以查询官方文档

    这里的资料还是比较多的

    那么我们这节课就到这里了

    撒花~

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
  • TA的每日心情
    慵懒
    3 天前
  • 签到天数: 43 天

    [LV.5]常住居民I

    128

    主题

    1663

    帖子

    1867

    积分

    管理员

    Rank: 10Rank: 10Rank: 10

    积分
    1867

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

    发表于 2022-3-6 10:58:13 | 显示全部楼层
    为什么暂停,是不行了吗?
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2022-4-18 01:37
  • 签到天数: 30 天

    [LV.5]常住居民I

    303

    主题

    2584

    帖子

    2653

    积分

    荣誉开发者

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    2653

    猫咪币纪念章

    发表于 2022-3-6 11:13:57 | 显示全部楼层
    王一之 发表于 2022-3-6 10:58
    为什么暂停,是不行了吗?

    因为91每天只允许看15个视频
    我调试给次数用光了...
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2022-4-16 18:33
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    5

    主题

    66

    帖子

    79

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    79

    活跃会员热心会员

    发表于 2022-3-6 12:01:32 | 显示全部楼层
    JJBOOM,无奈暂停 ?
    可恃唯我
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    10

    主题

    315

    帖子

    402

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    402

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

    发表于 2022-3-6 12:10:45 | 显示全部楼层
    李恒道 发表于 2022-3-6 11:13
    因为91每天只允许看15个视频
    我调试给次数用光了...

    调试需要这么多次吗?我不信
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2022-4-18 01:37
  • 签到天数: 30 天

    [LV.5]常住居民I

    303

    主题

    2584

    帖子

    2653

    积分

    荣誉开发者

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    2653

    猫咪币纪念章

    发表于 2022-3-6 12:12:53 | 显示全部楼层
    cxxjackie 发表于 2022-3-6 12:10
    调试需要这么多次吗?我不信

    不,你不信也要信!哈哈哈哈哈
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    21 小时前
  • 签到天数: 79 天

    [LV.6]常住居民II

    41

    主题

    352

    帖子

    1277

    积分

    荣誉开发者

    累计点滴改进,迈向完美品质。

    Rank: 10Rank: 10Rank: 10

    积分
    1277

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

    发表于 2022-3-6 13:02:31 | 显示全部楼层
    李恒道 发表于 2022-3-6 12:12
    不,你不信也要信!哈哈哈哈哈

    我记得有个91破解观看次数的脚本,哥哥找找
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2022-4-18 01:37
  • 签到天数: 30 天

    [LV.5]常住居民I

    303

    主题

    2584

    帖子

    2653

    积分

    荣誉开发者

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    2653

    猫咪币纪念章

    发表于 2022-3-6 15:10:20 | 显示全部楼层
    Hangover 发表于 2022-3-6 13:02
    我记得有个91破解观看次数的脚本,哥哥找找

    我没找到
    呜呜呜呜
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2022-4-18 01:37
  • 签到天数: 30 天

    [LV.5]常住居民I

    303

    主题

    2584

    帖子

    2653

    积分

    荣誉开发者

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    2653

    猫咪币纪念章

    发表于 2022-3-6 15:20:08 | 显示全部楼层
    cocang 发表于 2022-3-6 12:01
    JJBOOM,无奈暂停 ?

    JJ Refresh 已经写完~
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2022-4-16 18:33
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    5

    主题

    66

    帖子

    79

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    79

    活跃会员热心会员

    发表于 2022-3-6 15:50:30 | 显示全部楼层
    Hangover 发表于 2022-3-6 13:02
    我记得有个91破解观看次数的脚本,哥哥找找

    我记得是用了个不好用的接口来实现突破观看次数的
    可恃唯我
    回复

    使用道具 举报

    发表回复

    本版积分规则

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