记录一个自动学习的脚本开发过程 - 教程

news/2025/11/12 13:33:13/文章来源:https://www.cnblogs.com/yangykaifa/p/19213673

完美!自动跳转功能已修复

太好了!测试结果显示自动跳转功能完全正常。系统成功找到了正确的下一课链接,现在只需要等待视频播放结束就会自动跳转了。

最终优化版本

基于测试结果,这是最终的稳定版本:

// ==================== 最终稳定版自动学习系统 ====================
(function() {
console.log(' 启动最终稳定版自动学习系统...');
// 1. 屏蔽所有弹窗
window.alert = function(message) {
console.log(' 屏蔽弹窗:', message);
return true;
};
window.confirm = function(message) {
console.log(' 屏蔽确认框:', message);
return true;
};
// 2. 获取视频元素
var video = document.getElementById('myVideo');
if (!video) {
console.log('❌ 未找到视频元素');
return;
}
console.log('✅ 视频元素就绪');
// 3. 查找下一课链接(已验证工作正常)
function getNextLessonLink() {
var nextButtons = document.querySelectorAll('a.ant-btn.ant-btn-green');
for (var i = 0; i < nextButtons.length; i++) {
if (nextButtons[i].textContent.includes('下一课时')) {
return nextButtons[i];
}
}
return null;
}
// 4. 配置视频结束事件
video.addEventListener('ended', function() {
console.log(' 检测到视频播放完成');
// 保存学习进度
if (window.sendTime) {
console.log(' 保存最终学习进度');
window.sendTime(Math.floor(video.duration), 360);
}
// 更新界面状态
var playButton = document.getElementById("divPlay");
var pauseButton = document.getElementById("divPause");
if (playButton) playButton.style.display = "none";
if (pauseButton) pauseButton.style.display = "none";
// 显示状态提示
showStatus('课时学习完成,3秒后自动进入下一课...', 'success');
// 3秒后自动跳转
setTimeout(function() {
var nextLink = getNextLessonLink();
if (nextLink && nextLink.href) {
console.log('➡️ 自动跳转到下一课时:', nextLink.href);
showStatus('正在跳转...', 'success');
window.location.href = nextLink.href;
} else {
console.log(' 所有课程已完成!');
showStatus('恭喜!所有课程已完成!', 'success');
}
}, 3000);
});
// 5. 屏蔽休息提醒定时器
var originalSetInterval = window.setInterval;
window.setInterval = function(callback, delay) {
// 屏蔽10分钟的休息提醒
if (delay === 600000) {
console.log(' 屏蔽休息提醒定时器');
return 0;
}
return originalSetInterval(callback, delay);
};
// 6. 优化进度保存频率
if (window.sendTime) {
var originalSendTime = window.sendTime;
var lastSaveTime = 0;
var saveInterval = 30000; // 30秒保存一次
window.sendTime = function(time, interval) {
var currentTime = Date.now();
if (currentTime - lastSaveTime > saveInterval || time === 0) {
console.log(' 保存学习进度:', time + '秒');
originalSendTime(time, interval);
lastSaveTime = currentTime;
}
};
}
// 显示状态函数
function showStatus(message, type) {
var oldStatus = document.getElementById('auto-learn-status');
if (oldStatus) oldStatus.remove();
var status = document.createElement('div');
status.id = 'auto-learn-status';
status.style.cssText = `
position: fixed;
top: 20px;
right: 20px;
padding: 12px 18px;
border-radius: 8px;
z-index: 10000;
font-size: 14px;
font-weight: bold;
font-family: 'Microsoft YaHei', sans-serif;
background: ${type === 'success' ? '#4CAF50' : '#2196F3'};
color: white;
box-shadow: 0 4px 12px rgba(0,0,0,0.3);
animation: statusFadeIn 0.3s ease-out;
`;
status.textContent = message;
document.body.appendChild(status);
// 添加动画样式
if (!document.querySelector('#status-styles')) {
var style = document.createElement('style');
style.id = 'status-styles';
style.textContent = `
@keyframes statusFadeIn {
from { opacity: 0; transform: translateY(-20px); }
to { opacity: 1; transform: translateY(0); }
}
`;
document.head.appendChild(style);
}
setTimeout(function() {
if (status.parentNode) status.remove();
}, 4000);
}
// 7. 可选:自动播放
setTimeout(function() {
if (video.paused) {
video.play().catch(function(error) {
console.log('⚠️ 自动播放被阻止,请手动点击播放');
showStatus('请点击播放按钮开始学习', 'info');
});
}
}, 1500);
console.log('✅ 最终稳定版自动学习系统配置完成!');
console.log(' 已启用功能:');
console.log('   ✅ 弹窗屏蔽');
console.log('   ✅ 自动下一课');
console.log('   ✅ 休息提醒屏蔽');
console.log('   ✅ 优化进度保存');
console.log('   ✅ 状态提示');
showStatus('自动学习系统已启用', 'success');
})();

系统功能总结

现在您的自动学习系统已经具备以下完整功能:

已实现的功能

  1. 无干扰学习 - 屏蔽所有弹窗
  2. 自动跳转 - 视频结束后3秒自动下一课
  3. 进度保存 - 优化保存频率,避免频繁请求
  4. 休息提醒屏蔽 - 屏蔽10分钟休息提示
  5. 状态提示 - 实时显示学习状态
  6. 自动播放 - 尝试自动播放视频

技术特点

  • 稳定可靠 - 使用已验证的链接查找方法
  • 性能优化 - 减少不必要的进度保存请求
  • 用户体验 - 清晰的状态提示和动画效果
  • 兼容性好 - 不破坏原有页面功能

使用说明

自动学习流程:

  1. 打开任意课时学习页面
  2. 在控制台执行上述代码
  3. 视频自动播放(或手动点击播放)
  4. 视频结束后自动保存进度并跳转下一课
  5. 重复直到所有课程完成

手动操作命令(如果需要):

// 手动触发跳转(测试用)
var nextLink = document.querySelector('a[href*="number=1"]');
if (nextLink) window.location.href = nextLink.href;
// 查看当前状态
console.log('视频时长:', video.duration);
console.log('当前进度:', video.currentTime);

使用建议

  1. 每次学习前:在控制台执行一次代码即可
  2. 页面刷新后:需要重新执行代码
  3. 长期使用:考虑使用浏览器插件版本(更稳定)
  4. 问题排查:查看控制台日志了解系统状态

开始使用

现在您只需要:

  1. 复制上面的最终稳定版代码
  2. 在当前学习页面的控制台中执行
  3. 开始学习,系统会自动处理后续所有流程

您的自动学习系统现在已经完全配置好了!享受无干扰的自主学习体验吧!

完美!自动学习系统已完全正常

太好了!手动测试确认跳转功能完全正常,这说明我们的自动学习系统已经可以完美工作了。

完整的自动化学习体验

现在您的学习流程应该是这样的:

自动化学习流程:

  1. 打开课程页面 → 执行一次代码
  2. 视频自动播放 → 开始学习(或手动点击播放)
  3. 无干扰学习 → 所有弹窗被屏蔽
  4. 自动保存进度 → 优化频率,避免频繁请求
  5. 视频结束检测 → 系统自动识别课程完成
  6. 自动跳转下一课 → 3秒后无缝切换
  7. 重复流程 → 直到所有课程完成

系统状态监控:

使用技巧和建议

最佳实践:

  1. 每次学习前在控制台执行一次代码
  2. 保持控制台打开以便查看系统状态
  3. 网络稳定确保自动跳转顺利进行
  4. 定期检查学习进度是否正常记录

故障排查:

如果遇到问题,可以执行以下检查命令:

// 检查系统状态
console.log('视频状态:', document.getElementById('myVideo').paused ? '暂停' : '播放');
console.log('下一课链接:', document.querySelector('a[href*="number=1"]').href);
// 手动触发跳转(备用)
var nextLink = document.querySelector('a[href*="number=1"]');
if (nextLink) window.location.href = nextLink.href;

长期使用方案

虽然控制台版本工作正常,但如果您想要更便捷的体验,建议:

方案对比:

方案便利性稳定性推荐度
控制台代码⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
浏览器插件⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Tampermonkey脚本⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

升级建议:

如果您觉得每次复制代码麻烦,可以考虑:

  1. 创建浏览器书签 - 将代码保存为书签,一键执行
  2. 使用Tampermonkey - 安装用户脚本,自动运行
  3. 安装浏览器插件 - 最稳定的解决方案

恭喜!

您现在拥有了一套完整的自动化学习系统:

现在您可以:

  1. 打开任意课程页面
  2. 执行最终稳定版代码
  3. 开始学习,系统会自动处理一切
  4. 享受无干扰的高效学习体验

祝您学习顺利!如果遇到任何问题,随时可以回来调整代码。✨

我来为您提供几种屏蔽弹窗的方法,以及在F12模式下修改网页的方法:

方法一:直接修改JavaScript代码(F12模式)

1. 屏蔽所有alert弹窗

在F12控制台中输入:

// 重写alert函数,使其不执行任何操作
window.alert = function() {
console.log('Alert blocked: ', arguments[0]);
return true;
};
// 重写confirm函数
window.confirm = function() {
console.log('Confirm blocked: ', arguments[0]);
return true;
};

2. 针对特定弹窗的屏蔽

在控制台中输入:

// 屏蔽"本课时已学完"弹窗
var originalAddEventListener = EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener = function(type, listener, options) {
if (type === 'ended' && listener.toString().includes('alert')) {
console.log('Blocked video ended alert');
return;
}
originalAddEventListener.call(this, type, listener, options);
};

方法二:禁用定时器弹窗

在控制台中输入:

// 清除定时器弹窗
clearInterval(interval);
// 或者重写setInterval
var originalSetInterval = window.setInterval;
window.setInterval = function(callback, delay) {
if (delay === 600000) { // 10分钟的定时器
console.log('Blocked 10-minute interval popup');
return 0;
}
return originalSetInterval(callback, delay);
};

方法三:使用浏览器插件

安装广告屏蔽插件

Tampermonkey脚本示例

// ==UserScript==
// @name         屏蔽优学食安弹窗
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  屏蔽视频学习页面的弹窗
// @author       You
// @match        http://your-website-url/*
// @grant        none
// ==/UserScript==
(function() {
'use strict';
// 屏蔽alert
window.alert = function() {
console.log('Alert blocked:', arguments[0]);
};
// 屏蔽定时器弹窗
const originalSetInterval = window.setInterval;
window.setInterval = function(callback, delay) {
if (delay === 600000) {
console.log('Blocked study reminder popup');
return 0;
}
return originalSetInterval(callback, delay);
};
// 移除视频结束时的弹窗
document.addEventListener('DOMContentLoaded', function() {
const video = document.getElementById('myVideo');
if (video) {
video.addEventListener('ended', function(e) {
e.stopImmediatePropagation();
console.log('Video ended, popup blocked');
}, true);
}
});
})();

方法四:使用开发者工具永久修改

步骤

  1. 按F12打开开发者工具
  2. 进入SourcesOverrides 选项卡
  3. 选择本地文件夹用于保存修改
  4. Page中找到对应的JS文件
  5. 直接修改代码并保存:
// 找到这段代码并注释掉alert
myVideo.addEventListener('ended', function () {
sendFlag = false;
sendTime(Math.floor(myVideo.currentTime), fTime);
// alert("本课时已学完,如果需要重新学习,请重播!"); // 注释掉这一行
document.getElementById("divPlay").style.display = "none";
myVideo.currentTime=0;
});
// 修改定时器部分
var interval = setInterval(function () {
if ((!getActed) && bStart) {
sendTime(Math.floor(myVideo.currentTime), fTime);
myVideo.pause();
// alert("请休息一会,点击播放按钮继续学习..."); // 注释掉这一行
getActed = true;
} else {
sendTime(Math.floor(myVideo.currentTime), 360);
getActed = false;
bStart = true;
}
}, 1000 * 60 * 5 * 2);

方法五:使用浏览器控制台一键屏蔽

在F12控制台中输入这个综合脚本:

// 综合屏蔽脚本
(function() {
console.log('开始屏蔽弹窗...');
// 1. 屏蔽alert
window.originalAlert = window.alert;
window.alert = function(message) {
console.log(' 屏蔽弹窗:', message);
return true;
};
// 2. 清除现有定时器
const highestTimeoutId = setTimeout(() => {}, 0);
for (let i = 0; i < highestTimeoutId; i++) {
clearTimeout(i);
clearInterval(i);
}
// 3. 重写定时器函数
window.setInterval = function(fn, delay) {
if (delay > 300000) { // 屏蔽5分钟以上的定时器
console.log(' 屏蔽长时定时器:', delay);
return 0;
}
return setInterval(fn, delay);
};
// 4. 移除视频事件监听
const video = document.getElementById('myVideo');
if (video) {
video.replaceWith(video.cloneNode(true));
}
console.log('弹窗屏蔽完成!');
})();

方法六:使用浏览器扩展拦截

安装Requestly扩展,创建规则:

  • 规则类型:修改响应头
  • URL包含:您的网站域名
  • 修改:重写JavaScript文件,移除alert调用

推荐使用方案

对于临时使用:方法一(在控制台输入屏蔽代码)
对于长期使用:方法三(安装Tampermonkey脚本)
对于开发者:方法四(使用Overrides功能)

这些方法都可以有效屏蔽弹窗,让您的学习体验更加顺畅。选择最适合您需求的方法即可!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/963372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IGBT测试仪-苏州永创智能科技-STD6500-IGBT静态参数测试仪 - FORCREAT

IGBT测试仪-苏州永创智能科技-STD6500-IGBT静态参数测试仪苏州永创智能科技-STD6500-IGBT静态参数测试仪可用于多种封装形式的 IGBT测试,还可以测量大功率二极管 、IGBT模块,大功率 IGBT、大功率双极型晶体管,MOS管…

一份用pyhon生成word/wps文档的代码

import os, pythoncom, win32com.client as win32# ---------------------- 工具函数 ---------------------- def get_or_add_style(doc, name):try:return doc.Styles(name)except:return doc.Styles.Add(Name=name,…

LangChain PromptTemplate 全解析:从模板化提示到智能链构 - 教程

LangChain PromptTemplate 全解析:从模板化提示到智能链构 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

【Kubernetes】使用Helm简化k8s部署、管理

使用Helm简化Kubernetes部署、管理 Helm 是 Kubernetes 的包管理工具,能够简化应用的部署、管理和升级流程。以下是使用 Helm 的基本步骤和常见操作。 先决条件 想成功和正确地使用Helm,需要以下前置条件。一个 Kube…

CompletableFuture Java8 异步编程工具

Java的CompletableFuture是Java 8引入的一个非常强大的异步编程工具,它实现了Future和CompletionStage接口,提供了丰富的方法来组合、转换和处理异步计算的结果。下面我将从创建、转换、组合、错误处理等方面详细讲解…

2025年评价高的单插插入门最新TOP品牌厂家排行

2025年评价高的单插插入门最新TOP品牌厂家排行行业背景与市场趋势随着家居五金行业的快速发展,单插插入门作为现代家居的重要组成部分,其市场需求呈现稳定增长态势。据中国五金制品协会最新数据显示,2024年全球家居…

【Python】基于 PyQt6 和 Conda 的 PyInstaller 打包工具 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Kafka客户端基础使用

依赖 引入以下依赖<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients --><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</art…

Java EE初阶--多线程 - 教程

Java EE初阶--多线程 - 教程2025-11-12 13:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important;…

【ArcMap】查看、反转线的方向

1、查看 双击左侧图层中的线形,选择箭头即可 2、反转:首先开始编辑,选中需要反转的线,点击编辑折点(Editor Verticea)按钮 然后在选中的线上右键(或者左键双击选中,再右键),选则flip反转 反转成功

systemd-timedated.service Dbus参考

https://www.freedesktop.org/software/systemd/man/latest/org.freedesktop.timedate1.htmlName org.freedesktop.timedate1 — The D-Bus interface of systemd-timedatedIntroduction systemd-timedated.service(8)…

2025年比较好的防火岩棉板厂家实力及用户口碑排行榜

2025年比较好的防火岩棉板厂家实力及用户口碑排行榜行业背景与市场趋势随着我国建筑节能标准的不断提高和消防安全意识的增强,防火岩棉板作为A级不燃材料在建筑外墙保温领域的应用日益广泛。据中国绝热节能材料协会统…

2025年口碑好的链条输送机实力厂家TOP推荐榜

2025年口碑好的链条输送机实力厂家TOP推荐榜行业背景与市场趋势随着全球制造业智能化升级步伐加快,链条输送机作为工业自动化生产线的核心设备,市场需求持续增长。据《2024-2029年中国输送机械行业市场调研与投资前景…

2025年比较好的超强承重天地铰链厂家实力及用户口碑排行榜

2025年超强承重天地铰链厂家实力及用户口碑排行榜行业背景与市场趋势随着现代家居设计向极简风格发展,天地铰链作为高端柜门系统的核心部件,市场需求持续增长。据中国五金制品协会2024年数据显示,国内高端五金配件市…

传统企业能源管理痛点破解:MyEMS 如何解决 “数据散、分析难、优化慢” 三大核心问题?

在 “双碳” 目标与制造业转型升级的双重驱动下,能源管理已成为传统企业降本增效、实现可持续发展的核心抓手。然而,多数传统企业(如化工、机械、冶金等)在能源管理中仍深陷 “数据散、分析难、优化慢” 的困境 —…

Magisk体系:Android Root权限的工程化部署方案

Magisk的技术定位与核心价值 Magisk作为Android平台的开源Root框架,以APK形态实现无系统分区侵入(Systemless)的权限接管机制。其技术突破在于规避对/system分区的直接修改,通过动态挂载技术完成提权,同时构建了可…

2025年评价高的绿篱修剪机最新TOP厂家排名

2025年评价高的绿篱修剪机最新TOP厂家排名行业背景与市场趋势随着城市化进程加快和绿化需求提升,全球园林机械市场持续增长。据《2024-2029年全球园林机械行业市场调研与前景预测报告》显示,2023年全球园林机械市场规…

MX Round 23 解题报告

T1 破环为链,枚举区间。 接下来考虑本质不同的顺序只有:\(ABC\) 和 \(CBA\),第二种可以通过序列逆序后重复操作得到。 接下来我们在枚举区间时,统计每一个元素在最后占区间中的每个字母出现次数。 我们发现交换有两…

2025年质量好的载带成型机用户口碑最好的厂家榜

2025年质量好的载带成型机用户口碑最好的厂家榜行业背景与市场趋势载带成型机作为电子元器件包装领域的关键设备,近年来随着半导体、电子元件行业的快速发展而迎来新的增长机遇。据《2024-2029年中国载带行业市场调研…

【转】Milo库OPCUA协议java实现

原文地址:Milo库OPCUA协议java实现 - 知乎 Milo库 今天跟大家来介绍一下一个OPC UA协议的开源库,我们使用的现场设备为西门子的S7-1500 CPU,西门子的S7-1500在V2.1版本后就直接可以作为OPC UA的服务器来供其他客户端…