Chromium内核版本会影响脚本执行???!!!
刚写了个某网络学院的视频课程学习脚本,代码比较简单,开始在edge浏览器上执行一直不顺畅,脚本经常出现卡滞现象(应该不是脚本出错),单纯卡那不动,切换下标签页代码又活了。换到360浏览器上,Chromium内核版本比较低,就很顺畅,没有任何问题。下面是主要代码,就是简单的找元素,点击,播放之类的,本人初学者,代码写得比较乱,大家勿喷😌!(data/attachment/forum/202505/28/230222lm6zug6zpwpzruph.jpg)!(data/attachment/forum/202505/28/230242b4yckoilayikkiyk.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.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.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));
}
``` 可能是因为切换标签的原因,浏览器有限制的,如果标签在后台,好像是不能用脚本操作播放视频 王一之 发表于 2025-5-29 10:10
可能是因为切换标签的原因,浏览器有限制的,如果标签在后台,好像是不能用脚本操作播放视频 ...
大部分课程是能打开并且播放的,有几个会卡在查找元素那,就感觉代码不动了。后面试了别的浏览器,高版本的就会出现,低版本的没有。 damnedvi 发表于 2025-5-29 11:51
大部分课程是能打开并且播放的,有几个会卡在查找元素那,就感觉代码不动了。后面试了别的浏览器,高版本 ...
你可以看看控制台中有没有报错
可能会有一个安全报错,限制播放 王一之 发表于 2025-5-29 11:52
你可以看看控制台中有没有报错
可能会有一个安全报错,限制播放
谢谢,我再研究研究 如果iframe在浏览器上会有性能压制
在后台无法加载
如果是网课技术栈老很有可能是这个原因 李恒道 发表于 2025-5-29 22:36
如果iframe在浏览器上会有性能压制
在后台无法加载
如果是网课技术栈老很有可能是这个原因 ...
虽然不理解您说的这个情况,{:4_104:} 还是要谢谢
页:
[1]