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

Chromium内核版本会影响脚本执行???!!!

[复制链接]
  • TA的每日心情
    慵懒
    2025-5-29 08:03
  • 签到天数: 2 天

    [LV.1]初来乍到

    1

    主题

    8

    回帖

    14

    积分

    助理工程师

    积分
    14
    发表于 2025-5-28 23:03:55 | 显示全部楼层 | 阅读模式

    刚写了个某网络学院的视频课程学习脚本,代码比较简单,开始在edge浏览器上执行一直不顺畅,脚本经常出现卡滞现象(应该不是脚本出错),单纯卡那不动,切换下标签页代码又活了。换到360浏览器上,Chromium内核版本比较低,就很顺畅,没有任何问题。下面是主要代码,就是简单的找元素,点击,播放之类的,本人初学者,代码写得比较乱,大家勿喷😌1748440606067.jpg

    1748443117163.jpg

    class Runner {
    
        static getNode(selector, type = 'node', dom, timeout = 5000) {
            return new Promise((resolve, reject) => {
                if (!['node', 'nodeList'].includes(type)) {
                    console.error('第二个参数type请选择 "node" or "nodeList"');
                    reject('第二个参数type请选择 "node" or "nodeList"');
                }
                const cleanup = (timeoutId, intervalId) => {
                    clearTimeout(timeoutId);
                    clearInterval(intervalId);
                };
                const handleSuccess = (result, timeoutId, intervalId) => {
                    console.log(`${selector} ready!`);
                    cleanup(timeoutId, intervalId);
                    resolve(result);
                };
                const handleFailure = (timeoutId, intervalId) => {
                    cleanup(timeoutId, intervalId);
                    resolve(null);
                };
                const checkNode = () => {
                    try {
                        let nodes;
                        if (type === 'node') {
                            nodes = dom ? dom.querySelector(selector) : document.querySelector(selector);
                            return nodes
                        }
                        nodes = dom ? dom.querySelectorAll(selector) : document.querySelectorAll(selector);
                        return nodes.length > 0 ? nodes : null;
                    } catch (error) {
                        console.error('节点查找错误:', error);
                        reject('节点查找错误:', error)
                    }
                };
                const intervalId = setInterval(() => {
                    const result = checkNode();
                    if (result) {
                        handleSuccess(result, timeoutId, intervalId);
                    } else {
                        console.log(`等待节点: ${selector}...`);
                    }
                }, 1000);
                const timeoutId = setTimeout(() => {
                    console.error(`获取节点超时: ${selector}`);
                    handleFailure(timeoutId, intervalId);
                }, timeout);
            });
        }
    
        async runAllCourses() {
            // const originalWindow = window;
            var pageNumbers = await Runner.getNode('.number', 'nodeList')
            for (let j = 0; j < pageNumbers.length; j++) {
                pageNumbers[j].click()
                var courseElements = await Runner.getNode('.myCol4', 'nodeList')
                console.log(courseElements.length)
                for (let i = 0; i < courseElements.length; i++) {
                    debugger
                    try {
                        const courseCard = courseElements[i].querySelector('.courseCard')
                        const percentage = courseCard.__vue__._props.item.percentage
                        const courseId = courseCard.__vue__._props.item.id
                        console.log('percentage', percentage)
                        if (percentage >= 100) continue
                        const courseUrl = `https://**************/courseDetailsNew?id=${courseId}&coursewareType=0`
                        const newTab = window.open(courseUrl)
    
                        var duration = 0
                        const detailPage = await Runner.getNode('.detailPage', 'node', newTab.document)
                        const studyBtn = await Runner.getNode('.myBtn.selected', 'node', newTab.document)
                        duration = parseInt(detailPage.__vue__.courseware.duration)
                        console.log('duration', duration)
                        studyBtn.click()
                        const chooseLink = await Runner.getNode('.choose-content', 'node', newTab.document)  //您当前已有正在播放(或未正常关闭)的课件或文章,请点击下方您要学习的课件:
                        if (chooseLink) chooseLink.click()
                        var video = await Runner.getNode('video', 'node', newTab.document);
                        if (video) {
                            video.playbackRate = 1
                            // debugger
                            video.volume = 0
                            video.muted = true
                            if (video.paused) {
                                video.play()
                            }
                            video.addEventListener('play', function () {
    
                            });
                            await sleep((100 - percentage) / 100 * duration * 60 * 1000)
                            // await sleep(6 * 1000)
                            if (newTab) newTab.close()
                            // console.log('end---------------------')
                        }
                    } catch (err) {
                        console.log(err)
                        continue
                    }
                }
            }
        }
    }
    
    const sleep = function (time) {
        return new Promise(resolve => setTimeout(resolve, time));
    }
    
  • TA的每日心情
    开心
    2024-11-21 13:37
  • 签到天数: 213 天

    [LV.7]常住居民III

    308

    主题

    4617

    回帖

    4374

    积分

    管理员

    积分
    4374

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2025-5-29 10:10:45 | 显示全部楼层
    可能是因为切换标签的原因,浏览器有限制的,如果标签在后台,好像是不能用脚本操作播放视频
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-5-29 08:03
  • 签到天数: 2 天

    [LV.1]初来乍到

    1

    主题

    8

    回帖

    14

    积分

    助理工程师

    积分
    14
    发表于 2025-5-29 11:51:16 | 显示全部楼层
    王一之 发表于 2025-5-29 10:10
    可能是因为切换标签的原因,浏览器有限制的,如果标签在后台,好像是不能用脚本操作播放视频 ...

    大部分课程是能打开并且播放的,有几个会卡在查找元素那,就感觉代码不动了。后面试了别的浏览器,高版本的就会出现,低版本的没有。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-11-21 13:37
  • 签到天数: 213 天

    [LV.7]常住居民III

    308

    主题

    4617

    回帖

    4374

    积分

    管理员

    积分
    4374

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2025-5-29 11:52:00 | 显示全部楼层
    damnedvi 发表于 2025-5-29 11:51
    大部分课程是能打开并且播放的,有几个会卡在查找元素那,就感觉代码不动了。后面试了别的浏览器,高版本 ...

    你可以看看控制台中有没有报错

    可能会有一个安全报错,限制播放
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-5-29 08:03
  • 签到天数: 2 天

    [LV.1]初来乍到

    1

    主题

    8

    回帖

    14

    积分

    助理工程师

    积分
    14
    发表于 2025-5-29 14:58:48 | 显示全部楼层
    王一之 发表于 2025-5-29 11:52
    你可以看看控制台中有没有报错

    可能会有一个安全报错,限制播放

    谢谢,我再研究研究
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2025-1-31 20:04
  • 签到天数: 195 天

    [LV.7]常住居民III

    753

    主题

    6623

    回帖

    7285

    积分

    管理员

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

    积分
    7285

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2025-5-29 22:36:34 | 显示全部楼层
    如果iframe在浏览器上会有性能压制
    在后台无法加载
    如果是网课技术栈老很有可能是这个原因
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.com/a/lihengdao666
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-5-29 08:03
  • 签到天数: 2 天

    [LV.1]初来乍到

    1

    主题

    8

    回帖

    14

    积分

    助理工程师

    积分
    14
    发表于 2025-5-30 08:27:13 | 显示全部楼层
    李恒道 发表于 2025-5-29 22:36
    如果iframe在浏览器上会有性能压制
    在后台无法加载
    如果是网课技术栈老很有可能是这个原因 ...

    虽然不理解您说的这个情况,    还是要谢谢
    回复

    使用道具 举报

    发表回复

    本版积分规则

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