// ==UserScript== // @name 【免费版】好医生|自动播放|解除暂停限制|使用说明:http://doc.zhanyc.cn/pages/hys2/ // @namespace free // @version 1.0 // @description 当前是免费版本,只包含了视频自动播放、解除暂停限制功能。如需秒过视频、自动答题、自动下一集、自动换课程、全自动无人值守等高级功能可升级付费版本|接各类脚本开发、代挂任务,微信:zhanyc_cn 个人网站:http://doc.zhanyc.cn // @include *://*.haoyisheng.com/* // @include *://*.cmechina.net/* // @require http://libs.baidu.com/jquery/2.0.0/jquery.min.js // @run-at document-end // @antifeature payment // @license Creative Commons // ==/UserScript== (function () { let $jq = $; unsafeWindow.$jq = $jq; let docLink = "http://doc.zhanyc.cn/pages/hys2/"; let isDebug = false; let hysFree = { pageData: { videoTimer: null, lastCurTime: null, stuckCount: 60, waitSec: 0, }, async init() { console.log("%c hysFree init", "background:rgb(0,0,0);color:#fff"); await hysFree.sleep(1500); hysFree.showPanel(); hysFree.routePage(); }, routePage() { let url = location.href.toLowerCase(); if (url.includes('/cme/study2.jsp') || url.includes('/cme/course.jsp')) { hysFree.startMonitor(); } else if (url.includes('/courseindex') || url.includes('/coursedetials')) { hysFree.startMonitor(); } else { hysFree.startMonitor(); } }, async startMonitor() { console.log("%c hysFree startMonitor", "background:rgb(0,0,0);color:#fff"); hysFree.updatePanelStatus('等待视频加载...'); try { await hysFree.waitEl(() => hysFree.getVideoEl(), 1000, 60); } catch (e) { hysFree.updatePanelStatus('当前页面无视频'); return; } await hysFree.sleep(1000); hysFree.updatePanelStatus('视频已加载,开始播放'); if (hysFree.pageData.videoTimer) return; let stuckBak = hysFree.pageData.stuckCount; hysFree.pageData.videoTimer = setInterval(async () => { try { if (hysFree.pageData.waitSec > 0) { hysFree.pageData.waitSec -= 2; return; } let vid = hysFree.getVideoEl(); if (!vid) { hysFree.updatePanelStatus('等待视频加载...'); return; } vid.volume = 0; let cur = hysFree.getCurTime(); let total = hysFree.getTotalTime(); if (cur > 0 && total > 0) { hysFree.updatePanelProgress(cur, total); } // 检测是否卡住 if (cur == hysFree.pageData.lastCurTime && cur > 0) { hysFree.pageData.stuckCount -= 2; if (hysFree.pageData.stuckCount <= 0) { hysFree.pageData.stuckCount = stuckBak; hysFree.updatePanelStatus('视频卡住,即将刷新页面...'); setTimeout(() => { location.reload(); }, 5000); clearInterval(hysFree.pageData.videoTimer); hysFree.pageData.videoTimer = null; return; } } else { hysFree.pageData.lastCurTime = cur; hysFree.pageData.stuckCount = stuckBak; } // 检查是否播放完成 let done = hysFree.isPlayDone(); if (done) { hysFree.updatePanelStatus('视频播放完成,即将进入下一节...'); clearInterval(hysFree.pageData.videoTimer); hysFree.pageData.videoTimer = null; hysFree.goNext(10); return; } // 检查是否在播放 let playing = await hysFree.checkPlaying(); if (!playing && !done) { hysFree.doPlay(); } } catch (e) { console.error('hysFree monitor error', e); } }, 2000); }, getVideoEl() { try { return $('video')[0]; } catch (e) { return null; } }, getCurTime() { try { return hysFree.getVideoEl().currentTime; } catch (e) { return 0; } }, getTotalTime() { try { return hysFree.getVideoEl().duration; } catch (e) { return 0; } }, isPlayDone() { try { let total = hysFree.getTotalTime(); let cur = hysFree.getCurTime(); return total > 0 && cur + 5 >= total; } catch (e) { return false; } }, checkPlaying() { return new Promise((resolve) => { try { let t1 = $('video')[0].currentTime; setTimeout(() => { let t2 = $('video')[0].currentTime; resolve(t2 > t1); }, 200); } catch (e) { resolve(false); } }); }, doPlay() { try { let vid = hysFree.getVideoEl(); if (vid) { vid.volume = 0; setTimeout(() => { vid.play(); }, 200); hysFree.updatePanelStatus('视频播放中...'); } } catch (e) { console.error('hysFree doPlay error', e); } }, goNext(sec = 10) { setTimeout(() => { top.location.reload(); }, sec * 1000); }, sleep(ms) { return new Promise((r) => { setTimeout(r, ms); }); }, waitEl(fn, interval = 1000, timeout = 30) { return new Promise((resolve, reject) => { let left = timeout * 1000; try { if (fn()) return resolve(); } catch (e) { } let idx = setInterval(() => { left -= interval; if (left < 0) { clearInterval(idx); return reject(); } try { if (fn()) { clearInterval(idx); return resolve(); } } catch (e) { } }, interval); }); }, fmtTime(s) { s = Math.floor(Math.abs(s)); let h = Math.floor(s / 3600); let m = Math.floor((s % 3600) / 60); let sec = s % 60; return (h < 10 ? '0' + h : h) + ':' + (m < 10 ? '0' + m : m) + ':' + (sec < 10 ? '0' + sec : sec); }, showPanel() { if ($jq('#hysFreePanel').length > 0) return; let panelHtml = `
📺 好医生 - 免费版
初始化中...
🔥 付费版功能(一次付费,永久使用,免费维护)
秒过视频 - 无需等待,瞬间完成课程学习
自动答题 - 智能题库匹配,自动完成考试
✅ 自动换课程 - 全自动无人值守学习
👉 升级付费版本
如需使用全功能版本,请通过地址安装付费版本购买授权后可使用
接各类脚本开发、代挂任务,微信:zhanyc_cn
个人网站:doc.zhanyc.cn
`; $jq('body').append(panelHtml); $jq('#hysFreePanelClose').on('click', function () { $jq('#hysFreePanel').hide(); }); }, updatePanelStatus(msg) { $jq('#hysFreeStatus').text('状态:' + msg); }, updatePanelProgress(cur, total) { $jq('#hysFreeVideoBox').show(); $jq('#hysFreeProgress').text(hysFree.fmtTime(cur) + ' / ' + hysFree.fmtTime(total)); }, }; setTimeout(() => { if (typeof (zfk) == 'undefined') { hysFree.init(); } else { console.log('skip init'); } }, 3000); })();