// ==UserScript== // @name 学习通一键答题全能助手 // @namespace http://tampermonkey.net/ // @version 1.0.8 // @description 无需配置一键完成学习通自动答题、刷章节及章节测试,无需任何操作自动完成所有任务点。长期维护更新 // @author lokey // @match *://*.chaoxing.com/* // @grant GM_xmlhttpRequest // @grant GM_addStyle // @grant GM_getResourceText // @connect api.116611.xyz // @resource typrMd5Lib https://116611.xyz/typr-md5.js // @resource fontTableData https://116611.xyz/table.json // @license CC-BY-NC-ND-4.0 // @antifeature payment 脚本存在第三方答题接口付费功能 // @icon data:image/jpeg;base64,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Ku5HU5BHqDVivRTufJNNOzEooooEC04mmimsaQilrOpWmkafNfX0ojgiXczHr9B6k9h3NeC+M/FV34p1Dzp8w2cR/cW+fu/7TepPc9ug973xK8WnxLqJt7STGmWrHy8dJHHBc+3Ye3PeuSry8TX5nyR2PvMlylUIrEVl7728l/mLRRRXEfSi0UUUyQooooAKKKKAFpaSloASiiikMKKKKYhKBS0goAdRRRSAKKKKACinUYoJG0UGigoKKKKACiiigBKKKKACiiigBaKKKBhRRRQAooNAoNACUUUUEBRS0UFBRS0UEiYppp9IaChKKKKBhRRRQIKKKKACiiigYUlLRQISilooAKKKKBhRRRQIKKKKACiiigBKKKKBhRRRQIKKKKAFooooAKKKKACiiigAooooASiiigYtFFFAgooooASiiigYtFFFMQUUUUAFFFFIAooooAKKKKACiiigBKKKKACiiigAopKKAFopKKAHUUUUAJRS0mKAFooopAFJS0lACUlLRTGJSUtFAzqfAPjO48L3XlS7ptLlbMsXUxn++n9R3+te8WlzDe20dzbSLLBKoZJFOQwPcV8vV3Xwr8YNpGoJpF/IfsFy37pmbiGQnj6KT+R57mu/DV7PkkfK55lKnF4qiteq7+Z7d2ppp1NNemfEiivN/jB4paysxodlJtuLpc3DA8xxensW/lmu71nUYdJ0y4vrptsUCF39x6D3PSvm/VtRudV1K41C5JMs7lznsOyj2AwBXJianJGy3Z7+RYD6zW9pNe7H8+hTAzwOg/WnUdKK8k/QRaKKKCRaKKKCRaaacaaaCgooooAKKdRQSFFLSUFBSUtFACUUUUALRRRSAKKKKAFooooJEooooKCiiigAooooAKKKKACiiigBaKKKAFooooAKKKKACiiigBKKKKAFoptFAD6SkooAKKKKCQooooHoFFFFA7BRRRQAUUUUAFN/z/n/AD706igLCUUUVQBRRRSAKKKKQBRRRQAUUUUEhRRRQUFFFFABRRRQAUUUUALRRRQAUUUUAJRRRQMKKKKACiiigAooooAWiiimISiiigAooopAFFFFABRRRQAUUUUEiUUtFBQlFLRQAlFLRQAlFLRQAUUUUAFFFFABSUtIaYBRSUtACUUtJSEmFJS0UFCUhFLRQUn0PbfhR4qOtaU1hevuv7IDLHrLHnAf6jof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 // ==/UserScript== const systemConfig = { buildTime: new Date().toISOString(), environment: 'production' }; class Logger { constructor(prefix) { this.prefix = prefix || 'System'; this.levels = ['DEBUG', 'INFO', 'WARN', 'ERROR']; } log(level, message) { if (this.levels.includes(level)) { const timestamp = new Date().toISOString(); } } debug(msg) { this.log('DEBUG', msg); } info(msg) { this.log('INFO', msg); } warn(msg) { this.log('WARN', msg); } error(msg) { this.log('ERROR', msg); } } const logger = new Logger('CXHelper'); const browserCheck = { isChrome: () => /Chrome/.test(navigator.userAgent), isFirefox: () => /Firefox/.test(navigator.userAgent), isEdge: () => /Edge/.test(navigator.userAgent), isSafari: () => /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) }; class PerformanceMonitor { constructor() { this.metrics = new Map(); this.startTimes = new Map(); } start(name) { this.startTimes.set(name, performance.now()); } end(name) { const startTime = this.startTimes.get(name); if (startTime) { const duration = performance.now() - startTime; this.metrics.set(name, duration); this.startTimes.delete(name); return duration; } return 0; } getMetric(name) { return this.metrics.get(name) || 0; } } const perfMonitor = new PerformanceMonitor(); const utils = { generateId: (length = 8) => { const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; let result = ''; for (let i = 0; i < length; i++) { result += chars.charAt(Math.floor(Math.random() * chars.length)); } return result; }, deepClone: (obj) => { if (obj === null || typeof obj !== 'object') return obj; if (obj instanceof Date) return new Date(obj.getTime()); if (obj instanceof Array) return obj.map(item => utils.deepClone(item)); if (typeof obj === 'object') { const cloned = {}; Object.keys(obj).forEach(key => { cloned[key] = utils.deepClone(obj[key]); }); return cloned; } }, debounce: (func, wait) => { let timeout; return function executedFunction(...args) { const later = () => { clearTimeout(timeout); func(...args); }; clearTimeout(timeout); timeout = setTimeout(later, wait); }; }, throttle: (func, limit) => { let inThrottle; return function() { const args = arguments; const context = this; if (!inThrottle) { func.apply(context, args); inThrottle = true; setTimeout(() => inThrottle = false, limit); } } } }; class CacheManager { constructor(maxSize = 100) { this.cache = new Map(); this.maxSize = maxSize; } set(key, value, ttl = 300000) { // 默认5分钟过期 if (this.cache.size >= this.maxSize) { const firstKey = this.cache.keys().next().value; this.cache.delete(firstKey); } const item = { value: value, expiry: Date.now() + ttl }; this.cache.set(key, item); } get(key) { const item = this.cache.get(key); if (!item) return null; if (Date.now() > item.expiry) { this.cache.delete(key); return null; } return item.value; } clear() { this.cache.clear(); } } const cacheManager = new CacheManager(); logger.info('System initialization completed'); (function() { 'use strict'; (function(){ function _b64ToBytes(b64){ const bin = atob(b64); const out = new Uint8Array(bin.length); for(let i=0;ic-1); const __SALT = String.fromCharCode.apply(null, __S); const __ENC = "idiM9YBNCEBSu80fAcWJtglB3UgCOQSNSUCG2EFbmlWW7AyIJkSb/kgNWgCHsoEA"; function __getDSK(){ try { const step1 = __ENC.split('').reverse().join(''); const xored = _b64ToBytes(step1); const plainB64Bytes = _xor(xored, _strToBytes(__SALT)); const plainB64 = _bytesToStr(plainB64Bytes); return atob(plainB64); } catch (e) { return ''; } } window.__getDeepseekKey = __getDSK; })(); const DEEPSEEK_PROXY_BASE = 'https://api.116611.xyz'; const DEEPSEEK_MODEL = 'deepseek-chat'; const DEEPSEEK_API_URL = `${DEEPSEEK_PROXY_BASE}/v1/chat/completions`; function deepseekChat(messages, options = {}) { return new Promise((resolve, reject) => { try { GM_xmlhttpRequest({ method: 'POST', url: DEEPSEEK_API_URL, headers: { 'Content-Type': 'application/json', 'X-App-Token': __getDSAuth() }, data: JSON.stringify({ model: DEEPSEEK_MODEL, messages, ...options }), timeout: 60000, onload: (r) => { if (r.status >= 200 && r.status < 300) { try { resolve(JSON.parse(r.responseText)); } catch (e) { reject(e); } } else { reject(new Error(`HTTP ${r.status}: ${String(r.responseText || '').slice(0,200)}`)); } }, onerror: () => reject(new Error('Network error')), ontimeout: () => reject(new Error('Timeout')) }); } catch (err) { reject(err); } }); } let isAnswering = false; let isStudyingChapters = false; let studyIntervalId = null; const STUDY_PERSIST_KEY = 'cx_helper_study_on_v2'; const PANEL_REG_KEY = 'cx_helper_active_panel_v2'; const PANEL_INSTANCE_ID = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`; const FRAME_DEPTH = (() => { let d = 0; try { let w = window; while (w !== w.top) { d++; w = w.parent; } } catch { d = 999; } return d; })(); let isActiveOwner = false; let createdPanelEl = null; const HEARTBEAT_INTERVAL_MS = 2000; const STALE_MS = 7000; let heartbeatTimerId = null; let lastAutoSkipTs = 0; let emptyChecksCount = 0; let lastEmptySectionKey = ''; let recoveryTimerId = null; const API_BASE = 'https://116611.xyz'; const MONEY_YUAN = (() => { try { const b64 = 'NS4wMA=='; return atob(b64); } catch { return '5.00'; } })(); const PAY_NAME = 'XHelper 解锁/赞助'; const DEFAULT_PAY = 'wxpay'; const LS_KEY_DEV_ID = 'cxhelper_device_id'; const LS_KEY_FREE = 'cxhelper_free_used'; const LS_KEY_LICENSED = 'cxhelper_licensed'; const POLL_MS_PAY = 3000; const POLL_MAX_PAY = 100; const getFreeLimit = (() => { let cached = null; return function() { if (cached != null) return cached; try { const b64 = 'JDEw'; const decoded = atob(b64); const n = parseInt(decoded.replace(/\D/g, ''), 10); cached = Number.isFinite(n) ? n : 10; } catch { cached = 10; } return cached; }; })(); function getDeviceIdPaid() { try { let id = localStorage.getItem(LS_KEY_DEV_ID); if (!id) { id = ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)); localStorage.setItem(LS_KEY_DEV_ID, id); } return id; } catch { return 'dev_' + Math.random().toString(36).slice(2); } } const DEVICE_ID_PAID = getDeviceIdPaid(); function getCookie(key) { try { const name = key + '='; const parts = document.cookie.split(';'); for (let part of parts) { const s = part.trim(); if (s.indexOf(name) === 0) return decodeURIComponent(s.substring(name.length)); } return ''; } catch { return ''; } } function setCookie(key, value, days, domain) { try { const d = new Date(); d.setTime(d.getTime() + ((days || 365) * 24 * 60 * 60 * 1000)); const expires = 'expires=' + d.toUTCString(); const dm = domain ? ';domain=' + domain : ''; document.cookie = key + '=' + encodeURIComponent(value) + ';path=/' + ';' + expires + dm; } catch {} } function isLocallyLicensed() { try { // 优先从跨子域Cookie读取,保障不同页面一致 const c = getCookie(LS_KEY_LICENSED); if (c === '1') return true; return localStorage.getItem(LS_KEY_LICENSED) === '1'; } catch { return false; } } function setLocallyLicensed() { try { localStorage.setItem(LS_KEY_LICENSED, '1'); } catch {} // 写入跨子域Cookie,统一所有 *.chaoxing.com 页面状态 try { setCookie(LS_KEY_LICENSED, '1', 365, '.chaoxing.com'); } catch {} } function getFreeUsedCount() { try { return parseInt(localStorage.getItem(LS_KEY_FREE) || '0', 10) || 0; } catch { return 0; } } function incFreeUsedCount() { try { const n = getFreeUsedCount() + 1; localStorage.setItem(LS_KEY_FREE, String(n)); return n; } catch { return 0; } } async function checkLicensePaid() { if (isLocallyLicensed()) return true; try { const r = await fetch(`${API_BASE}/api/license/status?deviceId=${encodeURIComponent(DEVICE_ID_PAID)}`, { credentials: 'omit' }); const ct = (r.headers.get('content-type') || '').toLowerCase(); const data = ct.includes('application/json') ? await r.json() : await r.text(); const ok = !!(data && data.licensed); if (ok) setLocallyLicensed(); // try { updateTrialBadge(); } catch {} return ok; } catch { return false; } } async function startPaymentPaid(payType) { const win = window.open('', '_blank'); try { const resp = await fetch(`${API_BASE}/api/create`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: PAY_NAME, money: MONEY_YUAN, type: payType || DEFAULT_PAY, param: DEVICE_ID_PAID }) }); const html = await resp.text(); win.document.open(); win.document.write(html); win.document.close(); return true; } catch (e) { if (win) win.close(); alert('发起支付失败:' + e.message); return false; } } async function pollUntilLicensedPaid(onProgress) { for (let i = 0; i < POLL_MAX_PAY; i++) { if (onProgress) { try { onProgress(i); } catch {} } const ok = await checkLicensePaid(); if (ok) { setLocallyLicensed(); return true; } await new Promise(r => setTimeout(r, POLL_MS_PAY)); } return false; } function showPayModalPaid(messageText) { return new Promise(resolve => { const mask = document.createElement('div'); mask.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:999998;'; const box = document.createElement('div'); box.style.cssText = 'position:fixed;left:50%;top:120px;transform:translateX(-50%);width:420px;background:#fff;border-radius:0;box-shadow:none;overflow:hidden;z-index:999999;font-family:system-ui,Segoe UI,Arial;'; const msg = messageText || '试用已用完,打赏5元永久解锁哦'; box.innerHTML = ( '
解锁全部功能(永久)
' + '
' + '
' + msg + '
' + '
' + '' + '' + '
若支付方式不可用请尝试其他支付方式
' + '
' + '
点击"去支付"将打开收银台,完成后此处会自动检测。
' + '
' + '
' + '' + '' + '
' ); document.body.appendChild(mask); document.body.appendChild(box); const tip = box.querySelector('#cx_tip_paid'); const btnPay = box.querySelector('#cx_go_pay'); const btnCancel = box.querySelector('#cx_cancel_paid'); function close() { try { box.remove(); mask.remove(); } catch {} } btnCancel.onclick = () => { close(); resolve(false); }; btnPay.onclick = async () => { btnPay.disabled = true; btnPay.textContent = '打开收银台...'; const payType = (box.querySelector('input[name="cx_pay"]:checked') || {}).value || DEFAULT_PAY; const ok = await startPaymentPaid(payType); if (!ok) { btnPay.disabled = false; btnPay.textContent = '去支付'; return; } btnPay.textContent = '检测支付中...'; if (tip) tip.innerHTML = '已打开收银台,请完成支付,完成后此处会自动解锁...
💡 若无法打开支付页面请尝试连接手机热点网络'; const done = await pollUntilLicensedPaid(); if (done) { if (tip) tip.textContent = '支付成功,正在解锁...'; setLocallyLicensed(); try { updateTrialBadge(); } catch {} setTimeout(() => { close(); resolve(true); }, 500); } else { btnPay.disabled = false; btnPay.textContent = '去支付'; if (tip) tip.textContent = '未检测到支付完成,可重试或稍后再次打开本面板。'; } }; }); } function showFeedbackModal() { const mask = document.createElement('div'); mask.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:999998;'; const box = document.createElement('div'); box.style.cssText = 'position:fixed;left:50%;top:120px;transform:translateX(-50%);width:400px;background:#fff;border-radius:0;box-shadow:none;overflow:hidden;z-index:999999;font-family:system-ui,Segoe UI,Arial;'; box.innerHTML = ( '
意见反馈
' + '
' + '
' + '如果您在使用过程中遇到问题或有任何建议,欢迎通过以下方式联系我们:' + '
' + '
' + '
联系邮箱
' + '
2036470448@qq.com
' + '
点击邮箱地址即可复制
' + '
' + '
我们将会认真对待每一条反馈,并且尽快回复您的问题。您的建议是我们改进产品的重要动力!
' + '
' + '
' + '' + '
' ); document.body.appendChild(mask); document.body.appendChild(box); const closeBtn = box.querySelector('#feedback-close'); function close() { try { box.remove(); mask.remove(); } catch {} } closeBtn.onclick = close; mask.onclick = close; const emailDiv = box.querySelector('[onclick*="clipboard"]'); if (emailDiv) { emailDiv.addEventListener('click', function() { const originalText = this.innerHTML; this.innerHTML = '✅ 已复制到剪贴板'; this.style.color = '#2563eb'; setTimeout(() => { this.innerHTML = originalText; this.style.color = '#333'; }, 2000); }); } } async function ensureAccessAllowed() { if (await checkLicensePaid()) return true; const used = getFreeUsedCount(); if (used < getFreeLimit()) { incFreeUsedCount(); try { updateTrialBadge(); } catch {} return true; } const ok = await showPayModalPaid(); if (ok) { setLocallyLicensed(); try { updateTrialBadge(); } catch {} return true; } throw new Error('试用已用完,请解锁后继续使用'); } function getActivePanelRecord() { try { const raw = localStorage.getItem(PANEL_REG_KEY); return raw ? JSON.parse(raw) : null; } catch { return null; } } function setActivePanelRecord(rec) { try { localStorage.setItem(PANEL_REG_KEY, JSON.stringify(rec)); } catch {} } function clearActivePanelRecordIfOwner() { try { const cur = getActivePanelRecord(); if (cur && cur.id === PANEL_INSTANCE_ID) { localStorage.removeItem(PANEL_REG_KEY); } } catch {} } function shouldWeOwn(current) { const nowTs = Date.now(); if (!current) return { own: true, ts: nowTs }; if (!current.aliveTs || nowTs - current.aliveTs > STALE_MS) return { own: true, ts: nowTs }; try { if (current.url && current.url !== location.href) return { own: true, ts: nowTs }; } catch {} if (FRAME_DEPTH > (current.depth || 0)) return { own: true, ts: nowTs }; if (FRAME_DEPTH === (current.depth || 0) && nowTs > (current.ts || 0)) return { own: true, ts: nowTs }; return { own: false, ts: nowTs }; } function claimOwnership() { const cur = getActivePanelRecord(); const decision = shouldWeOwn(cur); if (decision.own) { setActivePanelRecord({ id: PANEL_INSTANCE_ID, depth: FRAME_DEPTH, ts: decision.ts, aliveTs: Date.now(), url: location.href }); isActiveOwner = true; } else { isActiveOwner = false; } return isActiveOwner; } function startHeartbeat() { if (heartbeatTimerId) return; heartbeatTimerId = setInterval(() => { if (!isActiveOwner) return; const cur = getActivePanelRecord(); if (!cur || cur.id !== PANEL_INSTANCE_ID) { stopHeartbeat(); return; } cur.aliveTs = Date.now(); try { cur.url = location.href; } catch {} setActivePanelRecord(cur); }, HEARTBEAT_INTERVAL_MS); } function stopHeartbeat() { if (heartbeatTimerId) { clearInterval(heartbeatTimerId); heartbeatTimerId = null; } } const cleanupOwnership = () => { stopHeartbeat(); clearActivePanelRecordIfOwner(); }; window.addEventListener('beforeunload', cleanupOwnership); window.addEventListener('pagehide', cleanupOwnership); function destroyPanelAndStop() { try { if (studyIntervalId) { clearInterval(studyIntervalId); studyIntervalId = null; } isStudyingChapters = false; isAnswering = false; stopHeartbeat(); const panel = document.getElementById('answer-helper-panel'); if (panel && panel.parentNode) panel.parentNode.removeChild(panel); createdPanelEl = null; } catch {} } window.addEventListener('storage', (e) => { if (e.key !== PANEL_REG_KEY) return; const rec = getActivePanelRecord(); if (!rec) return; if (rec.id === PANEL_INSTANCE_ID) { if (!createdPanelEl) { try { createdPanelEl = createPanel(); bindPanelEvents(); } catch {} } isActiveOwner = true; startHeartbeat(); } else { isActiveOwner = false; destroyPanelAndStop(); } }); GM_addStyle(` /* Panel: Dark Glass Theme */ #answer-helper-panel { position: fixed; top: 24px; left: 24px; width: 320px; min-width: 280px; height: 33vh; min-height: 232px; /* backdrop-filter removed for white theme */ background: #ffffff; border: 2px solid #d1d5db; border-radius: 0; padding: 0; z-index: 9999; box-shadow: none; font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; color: #333; user-select: none; overflow: hidden; } /* Header */ #answer-helper-header { cursor: move; height: 44px; padding: 0 16px; display: flex; align-items: center; justify-content: space-between; background: #ffffff; border-bottom: 1px solid #e5e7eb; font-size: 15px; letter-spacing: 0.2px; color: #333; } #answer-helper-header .title { display: inline-flex; align-items: center; gap: 8px; font-weight: 600; color: #333; } #answer-helper-header .title .accent { display: inline-block; width: 8px; height: 8px; border-radius: 0; background: #2563eb; } #answer-helper-header .right { display: inline-flex; align-items: center; gap: 8px; } #answer-helper-header .collapse-btn { width: 30px; height: 30px; border-radius: 0; background: #ffffff; border: 1px solid #e5e7eb; cursor: pointer; color: #4a5568; display: flex; align-items: center; justify-content: center; transition: background .15s ease, color .15s ease; } #answer-helper-header .collapse-btn:hover { background: #f0f0f0; color: #2d3748; } .collapse-btn-inner { width: 16px; height: 16px; position: relative; } .collapse-icon-bar.horizontal { width: 14px; height: 2px; background: currentColor; border-radius: 0; position: absolute; left: 1px; top: 7px; } .collapse-icon-bar.vertical { width: 2px; height: 14px; background: currentColor; border-radius: 0; position: absolute; left: 7px; top: 1px; } /* Content */ #answer-helper-content { padding: 6px 12px; overflow-y: auto; max-height: calc(33vh - 44px); } #answer-helper-panel.collapsed #answer-helper-content { display: none; } #answer-helper-panel.collapsed { width: 220px; min-width: 180px; } /* Body: main on top, actions at bottom */ #answer-helper-content .panel-body { display: grid; grid-template-columns: 1fr; grid-template-rows: auto auto; grid-template-areas: "main" "actions"; gap: 10px; align-items: start; } .panel-main { min-width: 0; grid-area: main; } .panel-actions { grid-area: actions; } .panel-actions.panel-row { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; justify-content: flex-start; } .panel-actions.panel-row .primary-pair { display: flex; gap: 8px; width: 100%; } .panel-actions.panel-row .primary-pair .pair-slot { flex: 1 1 0; display: flex; } .panel-actions.panel-row .primary-pair .pair-slot .ah-btn { flex: 1 1 0; min-width: 0; min-height: 40px; } .panel-actions.panel-row .primary-pair .button-text { white-space: nowrap; } .panel-actions.panel-row .ah-btn { flex: 0 0 auto; min-height: 36px; min-width: 72px; padding: 6px 8px; flex-direction: row; align-items: center; justify-content: center; gap: 4px; } .panel-actions.panel-row .button-icon { font-size: 12px; } .panel-actions.panel-row .button-text { font-size: 12px; } /* Toast */ #no-task-toast { position: fixed; top: 20px; right: 20px; background: #ffffff; border: 1px solid #e5e7eb; color: #333; padding: 10px 16px; border-radius: 0; font-size: 13px; z-index: 10000; animation: fadeInOut 3s ease-in-out forwards; font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; } @keyframes fadeInOut { 0% { opacity: 0; transform: translateY(-10px); } 10% { opacity: 1; transform: translateY(0); } 90% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; transform: translateY(-10px); } } /* Terminal Log */ #answer-log { height: 160px; overflow-y: auto; border: 1px solid #e5e7eb; border-radius: 0; padding: 6px 8px; margin: 4px 0; font-size: 12.5px; line-height: 1.55; font-family: SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; background: #f8f9fa; color: #333; } #answer-log::-webkit-scrollbar { width: 8px; height: 8px; } #answer-log::-webkit-scrollbar-track { background: #edf2f7; border-radius: 0; } #answer-log::-webkit-scrollbar-thumb { background: #cbd5e0; border-radius: 0; } .log-item { margin: 2px 0; padding: 4px 6px; border-radius: 0; background: #ffffff; } .success { color: #333; border-left: none; } .error { color: #333; border-left: none; } .debug { color: #333; border-left: none; } .info { color: #333; border-left: none; } /* Button Grid */ /* (previous grid tile layout removed for right-side column design) */ .ah-btn { flex: 1; padding: 6px 8px; border: 1px solid #e5e7eb; border-radius: 0; font-size: 12px; font-weight: 600; letter-spacing: 0.2px; cursor: pointer; transition: all .18s ease; display: flex; align-items: center; justify-content: center; gap: 4px; color: #333; background: #f5f7fa; } .ah-btn:hover { background: #edf2f7; border-color: #cbd5e0; } .ah-primary { background: #2563eb; color: #fff; border-color: #1d4ed8; } .ah-primary:hover { background: #1d4ed8; } .ah-danger { background: #2563eb; color: #fff; border-color: #1d4ed8; } .ah-danger:hover { background: #1d4ed8; } .ah-secondary { background: #f5f7fa; color: #333; } .ah-success { background: #2563eb; color: #fff; border-color: #1d4ed8; } .ah-success:hover { background: #1d4ed8; } .button-icon { font-size: 14px; line-height: 1; } /* Speed buttons state */ .speed-button { transition: background .15s ease, color .15s ease; } .speed-active { background: #2563eb; color: #fff; } #playback-speed-controls.segmented { display: flex; gap: 8px; justify-content: flex-end; margin-top: 4px; } #playback-speed-controls.segmented .ah-btn { min-width: 72px; padding: 8px 10px; } /* Misc */ #debug-page{ display:none !important; } #answer-helper-panel .cx-trial-badge{ position: absolute; left: 12px; bottom: 8px; color: #666; font-size: 12px; pointer-events: auto; } #answer-helper-panel .cx-trial-badge .trial-buy-btn{ display:inline-block; margin-left:8px; padding:2px 6px; font-size:12px; border:1px solid #e5e7eb; background:#f5f7fa; color:#333; border-radius:0; cursor:pointer; } #answer-helper-panel .cx-trial-badge .trial-buy-btn:hover{ background:#edf2f7; border-color:#cbd5e0; } #answer-helper-content { padding-bottom: 18px; } `); function createPanel() { const panel = document.createElement('div'); panel.id = 'answer-helper-panel'; panel.innerHTML = `
学习通全能助手
检测中...
`; document.body.appendChild(panel); try { const rect = panel.getBoundingClientRect(); const winW = window.innerWidth || document.documentElement.clientWidth; const winH = window.innerHeight || document.documentElement.clientHeight; const left = Math.max(12, Math.round((winW - rect.width) / 2)); const centerTop = Math.round((winH - rect.height) / 2); const offset = Math.round(winH * 0.1); const top = Math.max(12, centerTop - offset); panel.style.left = left + 'px'; panel.style.top = top + 'px'; panel.style.right = 'auto'; } catch {} let isDragging = false, offsetX = 0, offsetY = 0; const header = panel.querySelector('#answer-helper-header'); header.addEventListener('mousedown', function(e) { if (e.target.classList.contains('collapse-btn')) return; isDragging = true; const rect = panel.getBoundingClientRect(); offsetX = e.clientX - rect.left; offsetY = e.clientY - rect.top; document.body.style.userSelect = 'none'; }); document.addEventListener('mousemove', function(e) { if (!isDragging) return; panel.style.left = (e.clientX - offsetX) + 'px'; panel.style.top = (e.clientY - offsetY) + 'px'; panel.style.right = 'auto'; }); document.addEventListener('mouseup', function() { isDragging = false; document.body.style.userSelect = ''; }); const collapseBtn = panel.querySelector('.collapse-btn'); const collapseBtnInner = collapseBtn.querySelector('.collapse-btn-inner'); collapseBtn.addEventListener('click', function() { panel.classList.toggle('collapsed'); collapseBtnInner.innerHTML = ''; if (panel.classList.contains('collapsed')) { const h = document.createElement('span'); h.className = 'collapse-icon-bar horizontal'; const v = document.createElement('span'); v.className = 'collapse-icon-bar vertical'; collapseBtnInner.appendChild(h); collapseBtnInner.appendChild(v); } else { const h = document.createElement('span'); h.className = 'collapse-icon-bar horizontal'; collapseBtnInner.appendChild(h); } }); return panel; } function bindPanelEvents() { document.getElementById('start-answer')?.addEventListener('click', () => { addLog('本助手仅供学习研究,请遵守课程与平台规则。', 'info'); addLog('开始自动答题...'); autoAnswer(); }); document.getElementById('pause-answer')?.addEventListener('click', () => { isAnswering = false; addLog('正在暂停自动答题...', 'info'); }); const startStudyBtn = document.getElementById('start-study'); const pauseStudyBtn = document.getElementById('pause-study'); if (startStudyBtn && pauseStudyBtn) { startStudyBtn.addEventListener('click', () => { addLog('本助手仅供学习研究,请遵守课程与平台规则。', 'info'); startStudyChapters(); }); pauseStudyBtn.addEventListener('click', () => { stopStudyChapters(); }); } document.getElementById('speed-1x')?.addEventListener('click', () => { setVideoPlaybackSpeed(1.0); }); document.getElementById('speed-1.5x')?.addEventListener('click', () => { setVideoPlaybackSpeed(1.5); }); document.getElementById('speed-2x')?.addEventListener('click', () => { setVideoPlaybackSpeed(2.0); }); updateSpeedButtonsState(); const buyBtn = document.getElementById('buy-license'); if (buyBtn) { buyBtn.addEventListener('click', async () => { try { await showPayModalPaid('免费试用,打赏5元永久解锁哦'); } catch (e) { addLog('打开支付弹窗失败: ' + (e && e.message ? e.message : e), 'error'); } }); } document.getElementById('debug-page')?.addEventListener('click', () => { debugPageStructure(); }); document.getElementById('feedback-btn')?.addEventListener('click', () => { showFeedbackModal(); }); setTimeout(updateTrialBadge, 0); } function safeClick(el) { try { if (!el) return false; el.click(); el.dispatchEvent(new MouseEvent('click', { bubbles: true })); return true; } catch { return false; } } function forEachSameOriginFrame(callback) { const visit = (win) => { for (let i = 0; i < win.frames.length; i++) { const f = win.frames[i]; try { const doc = f.document || f.contentDocument; if (doc && doc.location && doc.location.href.includes('.chaoxing.com')) { callback(doc); visit(f); } } catch { } } }; try { callback(document); } catch {} try { visit(window); } catch {} } function forEachAllSameOriginDocs(callback) { const seen = new Set(); const visit = (win) => { if (!win || seen.has(win)) return; seen.add(win); try { const doc = win.document || win.contentDocument; if (doc) callback(doc); } catch {} try { const len = win.frames ? win.frames.length : 0; for (let i = 0; i < len; i++) { try { visit(win.frames[i]); } catch {} } } catch {} }; try { visit(window.top); } catch { visit(window); } } async function waitForQuestionsRenderAny(timeoutMs = 8000) { const end = Date.now() + timeoutMs; const selector = '.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item'; while (Date.now() < end) { let hit = null; forEachAllSameOriginDocs((doc) => { if (hit) return; try { const qs = doc.querySelectorAll(selector); if (qs && qs.length > 0) hit = doc; } catch {} }); if (hit) return hit; await new Promise(r => setTimeout(r, 300)); } return null; } function gotoNextSection(contextDoc) { const docsToTry = []; if (contextDoc) docsToTry.push(contextDoc); try { if (window.top && window.top.document) docsToTry.push(window.top.document); } catch {} docsToTry.push(document); const textNextRegex = /下一(节|章|单元|页|个)|继续|下一步|下一个|Next/i; const nextBtnSelectors = [ '.next', '.vc-next', '.reader-next', 'a[title="下一页"]', '.btn-next', '#next', '.prev_next .right a', '.switch-btn.next', '.icon-arrow-right', '.right-btn .next' ]; const currentNodeSelectors = ['.cur', '.curr', 'li.active', 'li.selected', '.posCatalog_active']; try { if (isStudyingChapters) localStorage.setItem(STUDY_PERSIST_KEY, '1'); } catch {} for (const doc of docsToTry) { try { for (const sel of nextBtnSelectors) { const btn = doc.querySelector(sel); if (btn && !btn.getAttribute('disabled') && !String(btn.className).includes('disabled')) { if (safeClick(btn)) { addLog('检测到下一节按钮,已点击', 'success'); return true; } } } for (const curSel of currentNodeSelectors) { const cur = doc.querySelector(curSel); if (cur && cur.nextElementSibling) { const link = cur.nextElementSibling.querySelector('a'); if (link && safeClick(link)) { addLog('目录定位到下一小节', 'success'); return true; } } } const links = Array.from(doc.querySelectorAll('a[href*="knowledgeId"], a[href*="chapterId"], a[href*="studentstudy"]')); if (links.length > 1) { const hrefNow = (location && location.href) || ''; const idx = links.findIndex(a => (a.href || '').includes('knowledgeId') && hrefNow.includes('knowledgeId') && a.href.split('knowledgeId')[1] === hrefNow.split('knowledgeId')[1]); const next = idx >= 0 ? links[idx + 1] : null; if (next && safeClick(next)) { addLog('通过目录链接顺序跳转下一小节', 'success'); return true; } } const clickable = Array.from(doc.querySelectorAll('a, button, .btn, .el-button, .next')); for (const el of clickable) { const txt = (el.textContent || '').trim(); if (textNextRegex.test(txt)) { const excludeClasses = ['close', 'cancel', 'delete', 'remove', 'back', 'prev', 'disabled', 'popup', 'modal']; const hasExcludeClass = excludeClasses.some(cls => el.className.toLowerCase().includes(cls) || el.id.toLowerCase().includes(cls) ); const isVisible = el.offsetWidth > 0 && el.offsetHeight > 0 && window.getComputedStyle(el).display !== 'none' && window.getComputedStyle(el).visibility !== 'hidden'; const isValidNavigationElement = ( (el.tagName === 'A' && (el.href || el.onclick)) || (el.tagName === 'BUTTON' && el.onclick) || el.className.includes('btn') || el.className.includes('next') ) && !el.closest('.popup, .modal, .dialog, .alert'); const isNavigationText = /^(下一节|下一章|下一个|下一页|继续|Next)$/i.test(txt); if (!hasExcludeClass && isVisible && isValidNavigationElement && isNavigationText) { if (safeClick(el)) { addLog(`通过文本匹配跳转: ${txt}`, 'success'); return true; } } else { addLog(`跳过不合适的文本匹配元素: ${txt} (类名: ${el.className})`, 'debug'); } } } } catch {} } addLog('未能自动跳转到下一小节', 'error'); return false; } function handleVideosInDocument(doc) { try { const videos = doc.querySelectorAll('video, .video-js video'); if (videos.length === 0) return false; let any = false; videos.forEach(v => { try { v.muted = true; if (!Number.isNaN(v.playbackRate)) v.playbackRate = currentPlaybackSpeed; const p = v.play(); if (p && typeof p.catch === 'function') p.catch(() => {}); v.loop = false; if (!v.dataset.autonextBind) { v.dataset.autonextBind = '1'; v.addEventListener('ended', () => { if (v.dataset.disableAutoNext === '1' || !isStudyingChapters) return; addLog('视频播放结束,进行完成度检测', 'success'); setTimeout(() => ensureSectionCompletedAndAdvance(doc), 300); }, { passive: true }); let nearingFired = false; const onTimeUpdate = () => { if (v.dataset.disableAutoNext === '1' || !isStudyingChapters) return; try { const d = v.duration || 0; const t = v.currentTime || 0; if (d > 0 && (d - t) <= 1.0 && !nearingFired) { nearingFired = true; addLog('检测到视频即将结束,进行完成度检测', 'debug'); setTimeout(() => ensureSectionCompletedAndAdvance(doc), 800); } } catch {} }; v.addEventListener('timeupdate', onTimeUpdate, { passive: true }); } any = true; } catch {} }); const popBtns = doc.querySelectorAll('.ans-job-icon, .popBtn, .dialog-footer .btn, .ans-modal .btn, .vjs-big-play-button'); popBtns.forEach(b => safeClick(b)); return any; } catch { return false; } } function handlePPTInDocument(doc) { try { const nextSelectors = ['.next', '.vc-next', '.reader-next', 'a[title="下一页"]', '.btn-next', '#next']; for (const sel of nextSelectors) { const btn = doc.querySelector(sel); if (btn && !btn.className.includes('disabled') && !btn.getAttribute('disabled')) { if (safeClick(btn)) { addLog('PPT自动下一页', 'debug'); return true; } } } const container = doc.scrollingElement || doc.body; if (container) container.scrollTop = container.scrollHeight; return false; } catch { return false; } } function findChapterQuizTab(doc) { try { const byTitle = doc.querySelector('li[title*="章节测验"], li[title*="测验"], a[title*="章节测验"], a[title*="测验"]'); if (byTitle) return byTitle; const byOnClick = Array.from(doc.querySelectorAll('li[onclick], a[onclick], button[onclick]')).find(el => { const oc = (el.getAttribute('onclick') || '').toString(); return oc.includes('changeDisplayContent') && (oc.includes('(2,2') || oc.includes(',2)')); }); if (byOnClick) return byOnClick; const candidates = Array.from(doc.querySelectorAll('li, a, button, [role="tab"], [role="option"]')); const textEl = candidates.find(el => /章节测验|测验/.test(((el.textContent || el.getAttribute('title') || '') + '').trim())); if (textEl) return textEl; } catch {} return null; } async function waitForQuestionsRender(doc, timeoutMs = 6000) { const end = Date.now() + timeoutMs; while (Date.now() < end) { try { const qs = doc.querySelectorAll('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item'); if (qs.length > 0) return true; } catch {} await new Promise(r => setTimeout(r, 300)); } return false; } let TYPR_MD5_LIB, FONT_TABLE_DATA; try { TYPR_MD5_LIB = GM_getResourceText('typrMd5Lib'); FONT_TABLE_DATA = GM_getResourceText('fontTableData'); if (TYPR_MD5_LIB) { window.TYPR_MD5_LIB = TYPR_MD5_LIB; } if (FONT_TABLE_DATA) { window.FONT_TABLE_DATA = FONT_TABLE_DATA; } } catch (e) { console.error('加载外部资源失败:', e); TYPR_MD5_LIB = ''; FONT_TABLE_DATA = '{}'; } function injectConsoleDecryptCode(doc, timeoutMs = 3000) { return new Promise((resolve) => { try { const consoleCode = ` if (!window.Typr || !window.md5) { ${TYPR_MD5_LIB || window.TYPR_MD5_LIB || ''} } if (!window.chaoXingFontTable) { window.chaoXingFontTable = ${FONT_TABLE_DATA || window.FONT_TABLE_DATA || '{}'}; } const decryptChaoXingFont = async () => { const { Typr, md5, chaoXingFontTable: table } = window; const base64ToUint8Array = (base64) => { const data = atob(base64); const buffer = new Uint8Array(data.length); for (let i = 0; i < data.length; i++) { buffer[i] = data.charCodeAt(i); } return buffer; }; const styleElements = [...document.querySelectorAll('style')]; const cxStyle = styleElements.find(el => el.textContent.includes('font-cxsecret') ); if (!cxStyle) { return; } const fontData = cxStyle.textContent.match(/base64,([\\w\\W]+?)'/)[1]; const parsedFont = Typr.parse(base64ToUint8Array(fontData))[0]; const charMap = {}; for (let charCode = 19968; charCode < 40870; charCode++) { const glyph = Typr.U.codeToGlyph(parsedFont, charCode); if (!glyph) continue; const path = Typr.U.glyphToPath(parsedFont, glyph); const pathHash = md5(JSON.stringify(path)).slice(24); charMap[String.fromCharCode(charCode)] = String.fromCharCode(table[pathHash]); } document.querySelectorAll('.font-cxsecret').forEach(element => { let htmlContent = element.innerHTML; Object.entries(charMap).forEach(([encryptedChar, decryptedChar]) => { const regex = new RegExp(encryptedChar, 'g'); htmlContent = htmlContent.replace(regex, decryptedChar); }); element.innerHTML = htmlContent; element.classList.remove('font-cxsecret'); }); }; decryptChaoXingFont().catch(console.error); `; const beforeCnt = (() => { try { return doc.querySelectorAll('.font-cxsecret').length; } catch { return -1; } })(); let script = doc.createElement('script'); script.type = 'text/javascript'; let blobUrl = ''; try { const blob = new Blob([consoleCode], { type: 'text/javascript' }); blobUrl = (doc.defaultView || window).URL.createObjectURL(blob); script.src = blobUrl; } catch { script.textContent = consoleCode; } (doc.head || doc.documentElement).appendChild(script); script.onload = () => { try { if (blobUrl) (doc.defaultView || window).URL.revokeObjectURL(blobUrl); } catch {} }; const start = Date.now(); const timer = setInterval(() => { try { const cnt = doc.querySelectorAll('.font-cxsecret').length; if (cnt === 0 || (beforeCnt >= 0 && cnt < beforeCnt)) { clearInterval(timer); resolve(); return; } } catch {} if (Date.now() - start > timeoutMs) { clearInterval(timer); resolve(); } }, 200); } catch { resolve(); } }); } async function tryEnterQuizAndAnswer(contextDoc) { try { if (!isStudyingChapters) return false; let targetDoc = null; let tabEl = null; forEachAllSameOriginDocs((doc) => { if (tabEl) return; const el = findChapterQuizTab(doc); if (el) { tabEl = el; targetDoc = doc; } }); if (!tabEl || !targetDoc) return false; addLog('检测到章节测验入口,正在进入...', 'info'); await new Promise((r) => { let pending = 0; let done = false; forEachAllSameOriginDocs((doc) => { pending++; injectConsoleDecryptCode(doc).finally(() => { if (--pending === 0 && !done) { done = true; r(); } }); }); if (pending === 0) r(); }); try { tabEl.scrollIntoView({ block: 'center', behavior: 'smooth' }); } catch {} const clicked = safeClick(tabEl); const oc = (tabEl.getAttribute('onclick') || '').toString(); const m = oc.match(/changeDisplayContent\(([^)]*)\)/); if (!clicked && m && m[1]) { try { const ownerWin = (tabEl.ownerDocument && tabEl.ownerDocument.defaultView) || null; const topWin = (function(){ try { return window.top; } catch { return window; } })(); const evalWin = ownerWin || topWin || window; const args = evalWin.eval('[' + m[1] + ']'); const fn = (ownerWin && ownerWin.changeDisplayContent) || (topWin && topWin.changeDisplayContent) || window.changeDisplayContent; if (typeof fn === 'function') { fn.apply(ownerWin || topWin || window, args); } else { addLog('未找到changeDisplayContent函数可调用', 'error'); } } catch (e) { addLog('直接调用changeDisplayContent失败: ' + e.message, 'error'); } } const qDoc = await waitForQuestionsRenderAny(10000); if (!isStudyingChapters) return false; if (!qDoc) { addLog('进入章节测验后未检测到题目,自动跳转下一节', 'info'); try { gotoNextSection(targetDoc || document); } catch {} return true; } await injectConsoleDecryptCode(qDoc); if (!isStudyingChapters) return false; await autoAnswerInDocument(qDoc); addLog('章节测验已自动作答', 'success'); return true; } catch (e) { addLog(`进入章节测验失败: ${e.message}`, 'error'); return false; } } function hasActionableStudyContent(doc) { try { if (doc.querySelector('video, .video-js video')) return true; const docSelectors = [ '.ans-attach-ct', '.reader', '.ppt', '.ppt-play', '.vjs-control', '.vjs-big-play-button', '.catalog', '.course_section', '.posCatalog', '.posCatalog_active', '.catalogTree' ]; if (docSelectors.some(sel => !!doc.querySelector(sel))) return true; const nextSelectors = ['.next', '.vc-next', '.reader-next', 'a[title="下一页"]', '.btn-next', '#next']; if (nextSelectors.some(sel => !!doc.querySelector(sel))) return true; if (doc.querySelector('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item')) return true; if (doc.querySelector('input[type="radio"], input[type="checkbox"], textarea, select')) return true; if (doc.querySelector('[id^="answerEditor"], iframe[id^="ueditor_"], div[contenteditable="true"]')) return true; const iframes = Array.from(doc.querySelectorAll('iframe')); if (iframes.some(f => { const src = (f.getAttribute('src') || '').toLowerCase(); return src.includes('mooc-ans') || src.includes('document') || src.includes('ppt') || src.includes('video') || src.includes('knowledgeid'); })) return true; if (doc.querySelector('.cur, .curr, li.active, li.selected, .posCatalog_active')) return true; } catch {} return false; } function hasUnansweredQuestions(doc) { try { const containers = doc.querySelectorAll('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item'); for (const q of containers) { try { if (!isQuestionAnswered(q)) return true; } catch {} } const radios = Array.from(doc.querySelectorAll('input[type="radio"]')); if (radios.length > 0) { const groups = new Map(); radios.forEach(r => { const k = r.name || `__radio_${Math.random()}`; if (!groups.has(k)) groups.set(k, []); groups.get(k).push(r); }); for (const [, list] of groups) { if (!list.some(r => r.checked)) return true; } } const texts = Array.from(doc.querySelectorAll('textarea, input[type="text"], div[contenteditable="true"]')); if (texts.length > 0) { if (texts.some(el => { if (el.tagName && el.tagName.toLowerCase() === 'div') return ((el.innerText || el.textContent || '').trim().length === 0); return ((el.value || '').trim().length === 0); })) return true; } } catch {} return false; } function tryAutoSkipEmptySection() { if (!isStudyingChapters) return false; const now = Date.now(); if (now - lastAutoSkipTs < 4000) return false; const href = (location && location.href) || ''; const key = href.split('?')[0] + (href.includes('knowledgeId') ? ('?k=' + href.split('knowledgeId')[1]) : ''); if (key !== lastEmptySectionKey) { lastEmptySectionKey = key; emptyChecksCount = 0; } let found = false; forEachSameOriginFrame((doc) => { if (found) return; if (hasActionableStudyContent(doc)) { found = true; return; } if (hasUnansweredQuestions(doc)) { found = true; return; } }); if (!found) { emptyChecksCount += 1; addLog(`小节判空第${emptyChecksCount}次`, 'debug'); if (emptyChecksCount >= 2) { lastAutoSkipTs = now; emptyChecksCount = 0; addLog('检测到空白小节(已二次确认),自动跳转下一小节', 'info'); gotoNextSection(document); return true; } } else { emptyChecksCount = 0; } return false; } async function autoAnswerInDocument(rootDoc) { try { if (!isStudyingChapters) return false; if (isQuizPageDoc(rootDoc)) { if (!isStudyingChapters) return false; const ok = await autoAnswerQuizInDocument(rootDoc); if (ok) return true; } const possibleSelectors = ['.question', '.questionLi', '.subject_item', '.examPaper_subject', '.questionContainer', '.q-item', '.subject_node', '[class*="question"]', '[class*="subject"]', '.ti-item', '.exam-item']; let questions = []; for (let selector of possibleSelectors) { questions = rootDoc.querySelectorAll(selector); if (questions.length > 0) break; } if (questions.length === 0) return false; addLog(`章节内发现 ${questions.length} 个题目,自动作答...`, 'info'); for (let q of questions) { if (!isStudyingChapters) { addLog('已暂停刷章节,停止小测作答', 'info'); return false; } const info = getQuestionInfo(q); if (!info || !info.question) continue; const ans = await getAnswer(info); if (ans) { fillAnswer(ans, q, info.type); await new Promise(r => setTimeout(r, 800)); } } return true; } catch (e) { addLog(`章节答题出错: ${e.message}`, 'error'); return false; } } function isStudyPage() { return /mycourse\/studentstudy|mooc2-ans|knowledgeId|chapterId/.test(location.href); } function hasStudyContentDeep() { let found = false; const tryDoc = (doc) => { try { if (doc.querySelector('video, .video-js, .ans-attach-ct, .reader, .ppt, .ppt-play, .catalog, .vjs-play-control')) { found = true; return; } if (doc.querySelector('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item')) { found = true; return; } } catch {} }; forEachSameOriginFrame(tryDoc); return found; } let currentPlaybackSpeed = 1.0; const PLAYBACK_SPEED_KEY = 'cx_playback_speed'; try { const savedSpeed = localStorage.getItem(PLAYBACK_SPEED_KEY); if (savedSpeed) { currentPlaybackSpeed = parseFloat(savedSpeed); } } catch {} function updateSpeedButtonsState() { const speedButtons = document.querySelectorAll('.speed-button'); speedButtons.forEach(btn => { btn.classList.remove('speed-active'); }); const activeButton = document.getElementById(`speed-${currentPlaybackSpeed}x`); if (activeButton) { activeButton.classList.add('speed-active'); } } function setVideoPlaybackSpeed(speed) { currentPlaybackSpeed = speed; try { localStorage.setItem(PLAYBACK_SPEED_KEY, speed.toString()); } catch {} updateSpeedButtonsState(); forEachSameOriginFrame((doc) => { try { const videos = doc.querySelectorAll('video, .video-js video'); videos.forEach(v => { if (!Number.isNaN(v.playbackRate)) v.playbackRate = speed; }); } catch {} }); addLog(`视频播放速度已设置为 ${speed}×`, 'success'); } function updateStudyButtons(running) { const startBtn = document.getElementById('start-study'); const pauseBtn = document.getElementById('pause-study'); const speedControls = document.getElementById('playback-speed-controls'); if (!startBtn || !pauseBtn) return; if (running) { startBtn.style.display = 'none'; pauseBtn.style.display = 'flex'; if (speedControls) speedControls.style.display = 'flex'; } else { startBtn.style.display = 'flex'; pauseBtn.style.display = 'none'; if (speedControls) speedControls.style.display = 'none'; } } function startStudyChapters() { if (isStudyingChapters) { addLog('刷章节已在运行', 'info'); return; } isStudyingChapters = true; try { localStorage.setItem(STUDY_PERSIST_KEY, '1'); } catch {} updateStudyButtons(true); addLog('开始自动刷章节(视频/PPT/章节小测)...', 'success'); addLog('⚠️ 章节视频请勿倍速观看,倍速观看可能导致账号异常哦', 'warning'); forEachSameOriginFrame((doc) => { try { doc.querySelectorAll('video, .video-js video').forEach(v => { delete v.dataset.disableAutoNext; }); } catch {} handleVideosInDocument(doc); handlePPTInDocument(doc); autoAnswerInDocument(doc); }); tryAutoSkipEmptySection(); studyIntervalId = setInterval(() => { if (!isStudyingChapters) return; forEachSameOriginFrame((doc) => { handleVideosInDocument(doc); handlePPTInDocument(doc); }); tryAutoSkipEmptySection(); }, 3000); } function stopStudyChapters() { if (!isStudyingChapters) return; isStudyingChapters = false; if (studyIntervalId) { clearInterval(studyIntervalId); studyIntervalId = null; } try { localStorage.removeItem(STUDY_PERSIST_KEY); } catch {} forEachSameOriginFrame((doc) => { try { doc.querySelectorAll('video, .video-js video').forEach(v => { v.dataset.disableAutoNext = '1'; try { v.pause(); } catch {} }); } catch {} }); updateStudyButtons(false); addLog('已暂停刷章节', 'info'); } const LOG_SHOW_DEBUG = false; const LOG_MAX_ITEMS = 120; function addLog(message, type = 'info') { try { if (type === 'debug' && !LOG_SHOW_DEBUG) return; const logContainer = document.getElementById('answer-log'); if (!logContainer) return; const text = String(message || '') .replace(/\s+/g, ' ') .slice(0, 140); const logItem = document.createElement('div'); logItem.className = `log-item ${type}`; logItem.textContent = `${new Date().toLocaleTimeString()} - ${text}`; logContainer.appendChild(logItem); const items = logContainer.querySelectorAll('.log-item'); if (items.length > LOG_MAX_ITEMS) { const removeCount = items.length - LOG_MAX_ITEMS; for (let i = 0; i < removeCount; i++) { const n = logContainer.firstElementChild; if (n) logContainer.removeChild(n); } } logContainer.scrollTop = logContainer.scrollHeight; } catch {} } async function updateTrialBadge() { try { const el = document.getElementById('cx_trial_badge'); if (!el) return; const licensed = await checkLicensePaid(); if (licensed) { el.innerHTML = '永久激活,感谢赞助'; return; } const used = getFreeUsedCount(); const remain = Math.max(0, getFreeLimit() - used); el.innerHTML = `试用剩余:${remain}/${getFreeLimit()} `; const btn = document.getElementById('buy-license'); if (btn) { btn.addEventListener('click', async () => { try { await showPayModalPaid('免费试用,打赏5元永久解锁哦'); } catch (e) { addLog('打开支付弹窗失败: ' + (e && e.message ? e.message : e), 'error'); } }); } } catch {} } function getQuestionInfo(questionElement) { try { addLog('题目元素HTML结构:' + questionElement.outerHTML.substring(0, 200) + '...', 'debug'); const questionId = questionElement.id || ''; addLog(`题目ID: ${questionId}`, 'debug'); const possibleTypeSelectors = [ '.type_title', '.mark_name', '.questionType', 'div[class*="type"]', 'div[class*="Type"]', '.subject_type', '.q-type', 'div[class*="questionType"]', '.stem_type' ]; const possibleQuestionSelectors = [ '.subject_describe', '.mark_name', '.questionContent', '.title', 'div[class*="title"]', '.subject_stem', '.q-body', '.question-content', '.stem-content', '.stem_txt' ]; let typeText = ''; for (let selector of possibleTypeSelectors) { const element = questionElement.querySelector(selector); if (element) { typeText = element.textContent.trim(); addLog(`找到题目类型: ${typeText},使用选择器: ${selector}`, 'debug'); break; } } let type = ''; if (typeText.includes('单选题')) type = 'single'; else if (typeText.includes('多选题')) type = 'multiple'; else if (typeText.includes('判断题')) type = 'judge'; else if (typeText.includes('填空题')) type = 'blank'; else if (typeText.includes('简答题')) type = 'short'; else if (typeText.includes('名词解释')) type = 'term'; else if (typeText.includes('论述题')) type = 'essay'; else if (typeText.includes('计算题')) type = 'calculation'; else if (typeText.includes('完形填空')) type = 'cloze'; else if (typeText.includes('写作题')) type = 'writing'; else if (typeText.includes('连线题')) type = 'matching'; else if (typeText.includes('分录题')) type = 'accounting'; let questionText = ''; for (let selector of possibleQuestionSelectors) { const element = questionElement.querySelector(selector); if (element) { questionText = element.textContent.trim(); addLog(`找到题目内容: ${questionText.substring(0, 30)}...,使用选择器: ${selector}`, 'debug'); break; } } const optionSelectors = [ '.stem_answer > div', '.stem_answer div[class*="option"]', 'div.stem_answer > div', `#${questionId} > div.stem_answer > div`, '.answer_p', '.subject_node', '.answer_options', '.options div' ]; let options = []; let foundSelector = ''; for (let selector of optionSelectors) { const elements = questionElement.querySelectorAll(selector); if (elements.length > 0) { options = Array.from(elements).map((option, index) => { const text = option.textContent.trim(); const letter = String.fromCharCode(65 + index); addLog(`选项 ${letter}: ${text}`, 'debug'); return text; }); foundSelector = selector; addLog(`找到选项,使用选择器: ${selector},数量: ${elements.length}`, 'debug'); break; } } if (options.length === 0 && questionId) { for (let i = 1; i <= 6; i++) { const specificSelector = `#${questionId} > div.stem_answer > div:nth-child(${i})`; const element = document.querySelector(specificSelector); if (element) { options.push(element.textContent.trim()); addLog(`使用nth-child选择器找到选项 ${i}: ${element.textContent.trim()}`, 'debug'); } } } if (!type || !questionText) { addLog('未能完全识别题目信息', 'error'); } return { type, question: questionText, options, foundSelector, questionId }; } catch (error) { addLog(`解析题目失败: ${error.message}`, 'error'); return null; } } function getModelParams(questionType) { const preciseTypes = ['single', 'multiple', 'blank', 'cloze', 'judge', 'term']; if (preciseTypes.includes(questionType)) { return { temperature: 0.1, max_tokens: 100, top_p: 0.1, frequency_penalty: 0.1, presence_penalty: 0.1 }; } else { return { temperature: 0.5, max_tokens: 500, top_p: 0.8, frequency_penalty: 0.3, presence_penalty: 0.3 }; } } async function getAnswer(questionInfo) { try { await ensureAccessAllowed(); } catch (e) { addLog(String(e && e.message ? e.message : e), 'error'); return null; } const prompt = generatePrompt(questionInfo); addLog(`发送到DeepSeek的提示词:\n${prompt}`, 'debug'); try { const modelParams = getModelParams(questionInfo.type); addLog(`使用模型参数: ${JSON.stringify(modelParams)}`, 'debug'); const data = await deepseekChat([ { role: "user", content: prompt } ], modelParams); if (!data.choices || !data.choices[0] || !data.choices[0].message) { throw new Error('Invalid API response format'); } const answer = data.choices[0].message.content.trim(); return answer; } catch (error) { addLog(`API调用失败: ${error.message}`, 'error'); return null; } } function generatePrompt(questionInfo) { let prompt = `直接给出答案不要解释 \n题目:${questionInfo.question}\n`; if (questionInfo.type === 'single' || questionInfo.type === 'multiple' || questionInfo.type === 'judge') { if (questionInfo.options && questionInfo.options.length > 0) { prompt += '选项:\n'; questionInfo.options.forEach((option, index) => { const letter = String.fromCharCode(65 + index); const cleanOption = option.replace(/^[A-Z][\s.、.。]+|^\d+[\s.、.。]+/, '').trim(); prompt += `${letter}. ${cleanOption}\n`; }); if (questionInfo.type === 'single') { prompt += '\n请直接回答选项字母(A/B/C/D/...)'; } else if (questionInfo.type === 'multiple') { prompt += '\n这是多选题,请列出所有正确选项的字母,用逗号分隔(如:A,B,D)'; } else if (questionInfo.type === 'judge') { prompt += '\n这是判断题,请回答A表示正确,B表示错误'; } } } else if (questionInfo.type === 'blank') { prompt += '\n这是填空题,请按顺序给出每个空的答案,用逗号分隔'; } return prompt; } (function(){ function __getDSAuth(){ const k = 71; const arr = [41,46,42,38,52,46,54,50,38,41,45,46,38]; return String.fromCharCode(...arr.map(n => n ^ k)); } window.__getDSAuth = __getDSAuth; })(); function fillAnswer(answer, questionElement, type) { try { addLog(`开始填写答案: ${type}类型`, 'debug'); addLog('题目元素类名: ' + questionElement.className, 'debug'); let filled = false; const questionId = questionElement.id; addLog(`处理题目ID: ${questionId}`, 'debug'); switch (type) { case 'blank': case 'cloze': { const answers = answer.split(/[,,;;、]\s*/).map(a => a.trim()).filter(a => a); addLog(`解析到的答案数量: ${answers.length}`, 'debug'); answers.forEach((ans, idx) => addLog(`第${idx + 1}个答案: ${ans}`, 'debug')); const editorElements = questionElement.querySelectorAll('[id^="answerEditor"]'); if (editorElements.length > 0) { addLog(`找到UEditor元素数量: ${editorElements.length}`, 'debug'); editorElements.forEach((editorElement, index) => { const editorId = editorElement.id; addLog(`处理第${index + 1}个编辑器: ${editorId}`, 'debug'); if (index < answers.length) { const currentAnswer = answers[index]; try { if (typeof UE !== 'undefined' && UE.getEditor) { const editor = UE.getEditor(editorId); if (editor) { if (editor.ready) { editor.ready(() => { editor.setContent(currentAnswer); addLog(`通过UEditor API设置第${index + 1}个空的内容: ${currentAnswer}`, 'debug'); if (typeof editor.fireEvent === 'function') { editor.fireEvent('contentChange'); } }); filled = true; } } } if (!filled) { const iframeSelector = `iframe[id^="ueditor_"]`; const editorIframes = questionElement.querySelectorAll(iframeSelector); const editorIframe = editorIframes[index]; if (editorIframe) { try { const iframeDoc = editorIframe.contentDocument || editorIframe.contentWindow.document; const editorBody = iframeDoc.body; if (editorBody) { editorBody.innerHTML = currentAnswer; editorBody.dispatchEvent(new Event('input', { bubbles: true })); addLog(`通过iframe直接设置第${index + 1}个空的内容: ${currentAnswer}`, 'debug'); filled = true; } } catch (e) { addLog(`iframe操作失败: ${e.message}`, 'error'); } } } const textarea = document.getElementById(editorId); if (textarea) { textarea.value = currentAnswer; textarea.dispatchEvent(new Event('change', { bubbles: true })); textarea.dispatchEvent(new Event('input', { bubbles: true })); addLog(`设置第${index + 1}个空的textarea值: ${currentAnswer}`, 'debug'); } } catch (e) { addLog(`处理第${index + 1}个空时出错: ${e.message}`, 'error'); } } else { addLog(`警告:第${index + 1}个空没有对应的答案`, 'error'); } }); } if (!filled) { const blankInputs = [ ...questionElement.querySelectorAll('input[type="text"]'), ...questionElement.querySelectorAll('.blank'), ...questionElement.querySelectorAll('.fill-blank'), ...questionElement.querySelectorAll('[class*="blank"]'), ...questionElement.querySelectorAll('[class*="fill"]'), ...questionElement.querySelectorAll('textarea') ]; if (blankInputs.length > 0) { addLog(`找到 ${blankInputs.length} 个普通输入框`, 'debug'); blankInputs.forEach((input, index) => { if (index < answers.length) { try { input.value = answers[index]; input.dispatchEvent(new Event('input', { bubbles: true })); input.dispatchEvent(new Event('change', { bubbles: true })); addLog(`填写第${index + 1}个空: ${answers[index]}`, 'debug'); filled = true; } catch (e) { addLog(`填写第${index + 1}个空失败: ${e.message}`, 'error'); } } else { addLog(`警告:第${index + 1}个输入框没有对应的答案`, 'error'); } }); } } break; } case 'short': case 'term': case 'essay': case 'writing': case 'calculation': case 'matching': case 'accounting': { const textInputs = [ ...questionElement.querySelectorAll('textarea'), ...questionElement.querySelectorAll('.answer-area'), ...questionElement.querySelectorAll('.writing-area'), ...questionElement.querySelectorAll('[class*="answer"]'), ...questionElement.querySelectorAll('[class*="text-area"]'), ...questionElement.querySelectorAll('div[contenteditable="true"]') ]; if (textInputs.length > 0) { textInputs.forEach(input => { try { if (input.tagName.toLowerCase() === 'textarea' || input.tagName.toLowerCase() === 'input') { input.value = answer; input.dispatchEvent(new Event('input', { bubbles: true })); input.dispatchEvent(new Event('change', { bubbles: true })); } else if (input.getAttribute('contenteditable') === 'true') { input.innerHTML = answer; input.dispatchEvent(new Event('input', { bubbles: true })); } addLog(`填写答案到${input.tagName.toLowerCase()}`, 'debug'); filled = true; } catch (e) { addLog(`填写答案失败: ${e.message}`, 'error'); } }); } const editors = [ ...questionElement.querySelectorAll('.editor'), ...questionElement.querySelectorAll('[class*="editor"]'), ...questionElement.querySelectorAll('iframe') ]; editors.forEach(editor => { try { if (editor.tagName.toLowerCase() === 'iframe') { const iframeDoc = editor.contentDocument || editor.contentWindow.document; const editorBody = iframeDoc.body; if (editorBody) { editorBody.innerHTML = answer; editorBody.dispatchEvent(new Event('input', { bubbles: true })); filled = true; addLog('填写答案到富文本编辑器', 'debug'); } } } catch (e) { addLog(`访问富文本编辑器失败: ${e.message}`, 'error'); } }); break; } case 'single': case 'multiple': case 'judge': { let answerLetters; if (type === 'multiple') { answerLetters = answer.toUpperCase().split(/[,,、\s]+/).map(l => l.trim()); } else { answerLetters = [answer.toUpperCase().trim()]; } addLog(`识别到的选项字母: ${answerLetters.join(', ')}`, 'debug'); for (const letter of answerLetters) { if (!/^[A-Z]$/.test(letter)) { addLog(`跳过无效的选项字母: ${letter}`, 'error'); continue; } const index = letter.charCodeAt(0) - 65 + 1; // 1-based index for nth-child const specificSelector = `#${questionId} > div.stem_answer > div:nth-child(${index})`; const optionElement = document.querySelector(specificSelector); if (optionElement) { try { optionElement.click(); addLog(`点击选项元素: ${specificSelector}`, 'debug'); const input = optionElement.querySelector('input'); if (input) { input.click(); input.checked = true; input.dispatchEvent(new Event('change', { bubbles: true })); addLog(`点击选项input元素`, 'debug'); } const label = optionElement.querySelector('label'); if (label) { label.click(); addLog(`点击选项label元素`, 'debug'); } filled = true; } catch (e) { addLog(`点击选项 ${letter} 失败: ${e.message}`, 'error'); } } else { addLog(`未找到选项元素: ${specificSelector}`, 'error'); } } break; } default: break; } if (filled) { addLog(`答案填写成功`, 'success'); } else { addLog(`答案可能未成功填写,请检查`, 'error'); } try { const submitButtons = [ ...questionElement.querySelectorAll('button[type="submit"]'), ...questionElement.querySelectorAll('input[type="submit"]'), ...questionElement.querySelectorAll('.submit-btn'), ...questionElement.querySelectorAll('.save-btn'), ...questionElement.querySelectorAll('[class*="submit"]'), ...questionElement.querySelectorAll('[class*="save"]') ]; if (submitButtons.length > 0) { submitButtons[0].click(); addLog('触发了提交按钮', 'debug'); } } catch (e) { addLog(`触发提交按钮失败: ${e.message}`, 'debug'); } } catch (error) { addLog(`答案填写失败: ${error.message}`, 'error'); } } function debugPageStructure() { addLog('开始调试页面结构...', 'debug'); addLog('页面URL: ' + window.location.href, 'debug'); addLog('页面标题: ' + document.title, 'debug'); const possibleContainers = [ '.question', '.questionLi', '.subject_item', '.examPaper_subject', '.questionContainer', '.q-item', '.subject_node', '[class*="question"]', '[class*="subject"]' ]; for (let selector of possibleContainers) { const elements = document.querySelectorAll(selector); addLog(`使用选择器 ${selector} 找到 ${elements.length} 个元素`, 'debug'); if (elements.length > 0) { addLog(`第一个元素HTML结构:${elements[0].outerHTML.substring(0, 200)}...`, 'debug'); } } const allElements = document.querySelectorAll('*'); const relevantElements = Array.from(allElements).filter(el => { const className = el.className || ''; const id = el.id || ''; return (className + id).toLowerCase().includes('question') || (className + id).toLowerCase().includes('answer') || (className + id).toLowerCase().includes('option') || (className + id).toLowerCase().includes('subject'); }); addLog(`找到 ${relevantElements.length} 个可能相关的元素`, 'debug'); relevantElements.forEach(el => { addLog(`发现元素: ${el.tagName.toLowerCase()}.${el.className}#${el.id}`, 'debug'); addLog(`元素HTML: ${el.outerHTML.substring(0, 100)}...`, 'debug'); }); const inputs = document.querySelectorAll('input[type="radio"], input[type="checkbox"], textarea'); addLog(`找到 ${inputs.length} 个输入元素`, 'debug'); inputs.forEach(input => { addLog(`输入元素: type=${input.type}, name=${input.name}, class=${input.className}`, 'debug'); }); } function updateStatus(running) { const startButton = document.getElementById('start-answer'); const pauseButton = document.getElementById('pause-answer'); if (running) { startButton.style.display = 'none'; pauseButton.style.display = 'flex'; } else { startButton.style.display = 'flex'; pauseButton.style.display = 'none'; } } function hasQuestions() { const possibleSelectors = [ '.question', '.questionLi', '.subject_item', '.examPaper_subject', '.questionContainer', '.q-item', '.subject_node', '[class*="question"]', '[class*="subject"]', '.ti-item', '.exam-item' ]; for (let selector of possibleSelectors) { const questions = document.querySelectorAll(selector); if (questions.length > 0) { return true; } } const allElements = document.querySelectorAll('*'); const possibleQuestions = Array.from(allElements).filter(el => { const className = el.className || ''; const id = el.id || ''; const text = el.textContent || ''; return (className + id + text).toLowerCase().includes('题目') || (className + id).toLowerCase().includes('question') || (className + id).toLowerCase().includes('subject') || /^\d+[\.。]/.test(text.trim()); }); return possibleQuestions.length > 0; } function showNoTaskToast() { const toast = document.createElement('div'); toast.id = 'no-task-toast'; toast.textContent = '该页面无任务'; document.body.appendChild(toast); setTimeout(() => { if (toast && toast.parentNode) { toast.parentNode.removeChild(toast); } }, 3000); } let advanceInProgress = false; function isQuestionAnswered(q) { try { const choiceInputs = q.querySelectorAll('input[type="radio"], input[type="checkbox"]'); if (choiceInputs.length > 0) { return Array.from(choiceInputs).some(i => i.checked); } const textInputs = q.querySelectorAll('input[type="text"], textarea'); if (textInputs.length > 0) { if (Array.from(textInputs).some(t => (t.value || '').trim().length > 0)) return true; } const editableDivs = q.querySelectorAll('[contenteditable="true"]'); if (editableDivs.length > 0) { if (Array.from(editableDivs).some(d => (d.innerText || d.textContent || '').trim().length > 0)) return true; } const ueTextareas = q.querySelectorAll('[id^="answerEditor"]'); for (const ta of ueTextareas) { const id = ta.id; try { if (typeof UE !== 'undefined' && UE.getEditor) { const ed = UE.getEditor(id); if (ed && ed.getContentTxt && ed.getContentTxt().trim().length > 0) return true; } } catch {} if ((ta.value || '').trim().length > 0) return true; } const ifr = q.querySelector('iframe[id^="ueditor_"]'); if (ifr) { try { const doc = ifr.contentDocument || ifr.contentWindow.document; const txt = (doc && doc.body && (doc.body.innerText || doc.body.textContent)) || ''; if (txt.trim().length > 0) return true; } catch {} } } catch {} return false; } function isSectionDone(contextDoc) { const doc = contextDoc || document; try { const videos = doc.querySelectorAll('video, .video-js video'); for (const v of videos) { try { const d = v.duration || 0; const t = v.currentTime || 0; if (!(v.ended || (d > 0 && t / d >= 0.985))) { return false; } } catch { return false; } } const questions = doc.querySelectorAll('.question, .questionLi, .subject_item, .examPaper_subject, .questionContainer, .q-item, .subject_node, [class*="question"], .ti-item, .exam-item'); for (const q of questions) { if (!isQuestionAnswered(q)) { return false; } } return true; } catch { return false; } } async function ensureSectionCompletedAndAdvance(contextDoc) { if (!isStudyingChapters) { addLog('刷章节已暂停,跳过跳转检测', 'info'); return; } if (advanceInProgress) { addLog('跳转检测进行中,忽略重复触发', 'debug'); return; } advanceInProgress = true; try { const doc = contextDoc || document; await autoAnswerInDocument(doc); await tryEnterQuizAndAnswer(doc); let tries = 3; while (tries-- > 0) { if (!isStudyingChapters) { addLog('刷章节已暂停,终止跳转检测', 'info'); return; } if (isSectionDone(doc)) { addLog('检测到当前小节已完成,准备跳转下一小节', 'success'); gotoNextSection(doc); return; } await new Promise(r => setTimeout(r, 500)); } addLog('当前小节未完成,暂不跳转', 'info'); } catch (e) { addLog(`跳转前完成度检测出错: ${e.message}`, 'error'); } finally { advanceInProgress = false; } } async function autoAnswer() { if (isAnswering) { addLog('自动答题已经在运行中...', 'info'); return; } isAnswering = true; updateStatus(true); addLog('开始查找题目...', 'debug'); try { addLog('当前页面URL: ' + window.location.href, 'debug'); addLog('当前页面标题: ' + document.title, 'debug'); const possibleSelectors = [ '.question', '.questionLi', '.subject_item', '.examPaper_subject', '.questionContainer', '.q-item', '.subject_node', '[class*="question"]', '[class*="subject"]', '.ti-item', '.exam-item' ]; let questions = []; let foundSelector = ''; for (let selector of possibleSelectors) { questions = document.querySelectorAll(selector); if (questions.length > 0) { foundSelector = selector; addLog(`使用选择器 ${selector} 找到 ${questions.length} 个题目`, 'debug'); break; } } if (questions.length === 0) { addLog('使用常规选择器未找到题目,尝试查找可能的题目容器...', 'debug'); const allElements = document.querySelectorAll('*'); const possibleQuestions = Array.from(allElements).filter(el => { const className = el.className || ''; const id = el.id || ''; const text = el.textContent || ''; return (className + id + text).toLowerCase().includes('题目') || (className + id).toLowerCase().includes('question') || (className + id).toLowerCase().includes('subject') || /^\d+[\.。]/.test(text.trim()); // 匹配数字开头的内容 }); if (possibleQuestions.length > 0) { questions = possibleQuestions; addLog(`通过内容分析找到 ${questions.length} 个可能的题目`, 'debug'); } } if (questions.length === 0) { addLog('未找到任何题目,请确保页面已完全加载', 'error'); addLog('页面主要内容:' + document.body.innerHTML.substring(0, 500) + '...', 'debug'); return; } addLog(`共找到 ${questions.length} 个题目`, 'info'); addLog('正在初始化中...', 'info'); Array.from(questions).forEach((q, idx) => { addLog(`题目 ${idx + 1} 类名: ${q.className}, ID: ${q.id}`, 'debug'); }); for (let question of questions) { if (!isAnswering) { addLog('自动答题已暂停', 'info'); break; } const questionInfo = getQuestionInfo(question); if (!questionInfo) { addLog('题目信息获取失败,跳过当前题目', 'error'); continue; } addLog(`正在处理题目: ${questionInfo.question.substring(0, 30)}...`); addLog(`题目类型: ${questionInfo.type}`, 'debug'); addLog(`选项数量: ${questionInfo.options.length}`, 'debug'); const answer = await getAnswer(questionInfo); if (answer) { addLog(`获取到答案: ${answer}`); fillAnswer(answer, question, questionInfo.type); } if (isAnswering) { await new Promise(resolve => setTimeout(resolve, 2000)); } } } catch (error) { addLog(`自动答题过程出错: ${error.message}`, 'error'); } finally { isAnswering = false; updateStatus(false); addLog('答题过程结束', 'success'); } } function init() { let persistedStudy = false; try { persistedStudy = localStorage.getItem(STUDY_PERSIST_KEY) === '1'; } catch {} const pageTitle = document.title || ''; const currentUrl = location.href || ''; if (pageTitle.includes('课程') || pageTitle === '课程' || pageTitle.includes('课表') || pageTitle === '课表' || pageTitle.includes('AI工作台') || pageTitle === 'AI工作台' || pageTitle.includes('知识点') || pageTitle === '知识点' || pageTitle.includes('章节') || pageTitle === '章节' || pageTitle.includes('资料') || pageTitle === '资料' || pageTitle.includes('错题集') || pageTitle === '错题集' || pageTitle.includes('学习记录') || pageTitle === '学习记录') { let pageType = ''; if (pageTitle.includes('课表')) pageType = '课表'; else if (pageTitle.includes('课程')) pageType = '课程'; else if (pageTitle.includes('AI工作台')) pageType = 'AI工作台'; else if (pageTitle.includes('知识点')) pageType = '知识点'; else if (pageTitle.includes('章节')) pageType = '章节'; else if (pageTitle.includes('资料')) pageType = '资料'; else if (pageTitle.includes('错题集')) pageType = '错题集'; else if (pageTitle.includes('学习记录')) pageType = '学习记录'; addLog(`检测到${pageType}页面,不展现脚本面板`, 'info'); return; } const isCourseDetailPage = () => { if (currentUrl.includes('/mooc2-ans/mycourse/stu') || currentUrl.includes('/mycourse/studentcourse') || currentUrl.includes('course/') && !currentUrl.includes('knowledge')) { const hasNavigationMenu = document.querySelector('.nav-content ul, .stuNavigationList ul'); const hasModuleLinks = document.querySelectorAll('a[title="章节"], a[title="作业"], a[title="考试"], a[title="资料"]').length >= 3; const hasCourseInfo = document.querySelector('.classDl, .sideCon, .nav_side'); const hasCourseId = document.querySelector('#courseid, input[name="courseid"]'); if ((hasNavigationMenu || hasModuleLinks) && hasCourseInfo && hasCourseId) { return true; } } return false; }; if (isCourseDetailPage()) { addLog('检测到课程详情页面,不展现脚本面板', 'info'); return; } const isChapterListPage = () => { const hasChapterList = document.querySelector('.fanyaChapter, .chapter_body, .xs_table'); const hasChapterItems = document.querySelectorAll('.chapter_unit, .chapter_item').length > 0; const hasChapterStructure = document.querySelector('.chapter_th, .chapter_td'); const hasProgressInfo = document.querySelector('.catalog_points_yi, .chapter_head'); const hasSearchBox = document.querySelector('#searchChapterListByName, .dataSearch'); const hasTypicalStructure = hasChapterList && hasChapterStructure && hasProgressInfo; const hasChapterTitles = document.querySelectorAll('.catalog_name, .newCatalog_name').length > 2; const urlIndicatesChapterList = currentUrl.includes('/mycourse/studentcourse') || currentUrl.includes('/studentstudy') && !currentUrl.includes('chapterId='); const hasNoLearningContent = !document.querySelector('video, .video-js, iframe[src*="chaoxing"], .questionLi, .TiMu'); return hasTypicalStructure && hasChapterItems && hasChapterTitles && urlIndicatesChapterList && hasNoLearningContent; }; if (isChapterListPage()) { addLog('检测到章节列表页面,不展现脚本面板', 'info'); return; } if (!persistedStudy && !hasQuestions() && !hasStudyContentDeep() && !isStudyPage()) { showNoTaskToast(); return; } if (!claimOwnership()) { if (persistedStudy && !recoveryTimerId) { recoveryTimerId = setInterval(() => { if (claimOwnership()) { clearInterval(recoveryTimerId); recoveryTimerId = null; createdPanelEl = createPanel(); bindPanelEvents(); startHeartbeat(); if (!isStudyingChapters) startStudyChapters(); } }, 1000); } return; } createdPanelEl = createPanel(); bindPanelEvents(); startHeartbeat(); if (persistedStudy) { startStudyChapters(); setTimeout(() => tryAutoSkipEmptySection(), 600); } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } function isQuizPageDoc(doc) { try { if (doc.getElementById('form1') && doc.querySelector('#RightCon .newTestTitle')) return true; if (doc.querySelector('.newTestCon form#form1') && doc.querySelector('.ans-cc')) return true; } catch {} return false; } function collectQuizQuestions(doc) { const questions = []; try { const typeInputs = doc.querySelectorAll('input[id^="answertype"]'); typeInputs.forEach((inp) => { try { const id = inp.id.replace('answertype', ''); const qid = id.trim(); const block = doc.querySelector(`.singleQuesId[data="${qid}"]`) || inp.closest('.TiMu') || doc; const typeVal = (inp.value || '').trim(); let type = ''; if (typeVal === '0') type = 'single'; else if (typeVal === '1') type = 'multiple'; else if (typeVal === '3') type = 'judge'; else if (typeVal === '2') type = 'blank'; else if (typeVal === '4') type = 'short'; else { const hasTextInput = block.querySelector('input[type="text"], textarea, [contenteditable="true"], [id^="answerEditor"], iframe[id^="ueditor_"]'); type = hasTextInput ? 'short' : 'text'; } const opts = []; const lis = block.querySelectorAll(`ul.Zy_ulTop li[onclick][qid="${qid}"]`); lis.forEach((li, idx) => { const span = li.querySelector('.num_option, .num_option_dx'); const letter = span?.getAttribute('data') || String.fromCharCode(65 + idx); const txt = (li.querySelector('a.after')?.textContent || '').trim(); opts.push(`${letter}. ${txt}`); }); let qtext = ''; const label = block.querySelector('.Zy_TItle .fontLabel'); if (label) qtext = label.textContent.replace(/\s+/g, ' ').trim(); questions.push({ qid, type, question: qtext, options: opts }); } catch {} }); } catch {} return questions; } function fillQuizAnswer(doc, qid, type, answer) { try { const block = doc.querySelector(`.singleQuesId[data="${qid}"]`) || doc; if (!block) return false; if (type === 'single' || type === 'multiple' || type === 'judge') { let letters = []; if (type === 'multiple') { letters = (answer || '').toUpperCase().split(/[,,、\s]+/).filter(Boolean); } else if (type === 'judge') { const val = String(answer || '').trim().toLowerCase(); if (/^a$|对|true|正确/.test(val)) letters = ['A']; else if (/^b$|错|false|错误/.test(val)) letters = ['B']; else if (/^t$/.test(val)) letters = ['A']; else if (/^f$/.test(val)) letters = ['B']; else letters = [(val.match(/[ab]/i) || ['A'])[0].toUpperCase()]; } else { const m = String(answer || '').toUpperCase().match(/[A-Z]/g); letters = m ? m : []; } const ul = block.querySelector('ul.Zy_ulTop'); if (!ul) return false; letters.forEach((L) => { let target = null; if (type === 'judge') { const dataVal = (L === 'A') ? 'true' : 'false'; target = ul.querySelector(`li .num_option[data='${dataVal}'], li .num_option_dx[data='${dataVal}']`) || ul.querySelector(`li .num_option[data='${L}'], li .num_option_dx[data='${L}']`); } else { target = ul.querySelector(`li .num_option[data='${L}'], li .num_option_dx[data='${L}']`); } if (target) { const li = target.closest('li'); safeClick(li); } }); const hidden = doc.getElementById(`answer${qid}`); if (hidden) { const want = (type === 'judge') ? (letters[0] === 'A' ? 'true' : 'false') : letters.join(''); if (!hidden.value || (type !== 'multiple' && hidden.value.toLowerCase() !== want)) { hidden.value = want; const spans = ul.querySelectorAll(`.choice${qid}`); spans.forEach(s => s.classList.remove('check_answer', 'check_answer_dx')); letters.forEach((L) => { let sel = null; if (type === 'judge') { const dv = (L === 'A') ? 'true' : 'false'; sel = ul.querySelector(`.choice${qid}[data='${dv}']`) || ul.querySelector(`.choice${qid}[data='${L}']`); } else { sel = ul.querySelector(`.choice${qid}[data='${L}']`); } if (sel) { const isMulti = !!ul.querySelector('.num_option_dx'); sel.classList.add(isMulti ? 'check_answer_dx' : 'check_answer'); const li = sel.closest('li'); if (li) { li.setAttribute('aria-checked', 'true'); li.setAttribute('aria-pressed', 'true'); } } }); } } return true; } else if (type === 'blank') { const answers = String(answer || '').split(/[,,;;、]\s*/).map(s => s.trim()).filter(Boolean); const ueAreas = block.querySelectorAll('[id^="answerEditor"]'); ueAreas.forEach((ta, i) => { const val = answers[i] || ''; if (!val) return; try { if (typeof UE !== 'undefined' && UE.getEditor) { const ed = UE.getEditor(ta.id); if (ed) { ed.ready(() => { ed.setContent(val); if (typeof ed.fireEvent === 'function') ed.fireEvent('contentChange'); }); } } else { ta.value = val; ta.dispatchEvent(new Event('input', { bubbles: true })); ta.dispatchEvent(new Event('change', { bubbles: true })); } } catch {} }); const ifrs = block.querySelectorAll('iframe[id^="ueditor_"]'); ifrs.forEach((ifr, i) => { const val = answers[i] || ''; if (!val) return; try { const d = ifr.contentDocument || ifr.contentWindow?.document; const body = d && d.body; if (body) { body.innerHTML = val; body.dispatchEvent(new Event('input', { bubbles: true })); } } catch {} }); const inputs = [ ...block.querySelectorAll('input[type="text"]'), ...block.querySelectorAll('textarea'), ...block.querySelectorAll('[contenteditable="true"]') ]; inputs.forEach((el, i) => { const val = answers[i] || ''; if (!val) return; try { const tag = (el.tagName || '').toLowerCase(); if (tag === 'input' || tag === 'textarea') { el.value = val; el.dispatchEvent(new Event('input', { bubbles: true })); el.dispatchEvent(new Event('change', { bubbles: true })); } else if (el.getAttribute('contenteditable') === 'true') { el.innerHTML = val; el.dispatchEvent(new Event('input', { bubbles: true })); } } catch {} }); const hidden = doc.getElementById(`answer${qid}`); if (hidden) hidden.value = answers.join(' '); return true; } else if (type === 'text' || type === 'short' || type === 'essay' || type === 'writing') { const val = String(answer || '').trim(); if (!val) return false; const ueAreas = block.querySelectorAll('[id^="answerEditor"]'); ueAreas.forEach((ta) => { try { if (typeof UE !== 'undefined' && UE.getEditor) { const ed = UE.getEditor(ta.id); if (ed) { ed.ready(() => { ed.setContent(val); if (typeof ed.fireEvent === 'function') ed.fireEvent('contentChange'); }); } } else { ta.value = val; ta.dispatchEvent(new Event('input', { bubbles: true })); ta.dispatchEvent(new Event('change', { bubbles: true })); } } catch {} }); const ifrs = block.querySelectorAll('iframe[id^="ueditor_"]'); ifrs.forEach((ifr) => { try { const d = ifr.contentDocument || ifr.contentWindow?.document; const body = d && d.body; if (body) { body.innerHTML = val; body.dispatchEvent(new Event('input', { bubbles: true })); } } catch {} }); const inputs = [ ...block.querySelectorAll('textarea'), ...block.querySelectorAll('input[type="text"]'), ...block.querySelectorAll('[contenteditable="true"]') ]; inputs.forEach((el) => { try { const tag = (el.tagName || '').toLowerCase(); if (tag === 'input' || tag === 'textarea') { el.value = val; el.dispatchEvent(new Event('input', { bubbles: true })); el.dispatchEvent(new Event('change', { bubbles: true })); } else if (el.getAttribute('contenteditable') === 'true') { el.innerHTML = val; el.dispatchEvent(new Event('input', { bubbles: true })); } } catch {} }); const hidden = doc.getElementById(`answer${qid}`); if (hidden) hidden.value = val; return true; } return false; } catch { return false; } } function findAndClickQuizSubmitButton(doc) { try { const targetWindow = doc.defaultView || window; const chaoxingSubmitMethods = [ () => { if (typeof targetWindow.btnBlueSubmit === 'function') { targetWindow.btnBlueSubmit(); addLog('使用 btnBlueSubmit() 方法提交', 'success'); return true; } return false; }, () => { if (typeof targetWindow.submitCheckTimes === 'function') { targetWindow.submitCheckTimes(); addLog('使用 submitCheckTimes() 方法提交', 'success'); return true; } return false; }, () => { if (typeof targetWindow.submitWork === 'function') { targetWindow.submitWork(); addLog('使用 submitWork() 方法提交', 'success'); return true; } return false; }, () => { const forms = doc.querySelectorAll('form'); for (const form of forms) { const formAction = form.action || ''; if (formAction.includes('work') || formAction.includes('quiz') || formAction.includes('submit')) { try { form.submit(); addLog('使用表单 submit() 方法提交', 'success'); return true; } catch (e) { addLog(`表单提交失败: ${e.message}`, 'error'); } } } return false; } ]; for (const method of chaoxingSubmitMethods) { try { if (method()) return true; } catch (e) { addLog(`提交方法执行失败: ${e.message}`, 'error'); } } const submitSelectors = [ 'input[type="submit"][value*="提交"]', 'button[type="submit"]', 'input[value="提交答案"]', 'input[value="提交"]', 'button[onclick*="submit"]', 'button[onclick*="btnBlueSubmit"]', 'button[onclick*="submitCheckTimes"]', '.submit-btn', '.btn-submit', '#submit', '.submit', 'input[id*="submit"]', 'button[id*="submit"]', 'a[onclick*="submit"]', 'input[onclick*="tijiao"]', 'button[onclick*="tijiao"]' ]; for (const selector of submitSelectors) { const submitBtn = doc.querySelector(selector); if (submitBtn && !submitBtn.disabled && !submitBtn.classList.contains('disabled')) { try { submitBtn.scrollIntoView({ block: 'center', behavior: 'smooth' }); const onclick = submitBtn.getAttribute('onclick'); if (onclick) { try { const func = new targetWindow.Function(onclick); func.call(submitBtn); addLog(`通过onclick执行提交: ${onclick}`, 'success'); return true; } catch (e) { addLog(`onclick执行失败: ${e.message}`, 'error'); } } if (safeClick(submitBtn)) { addLog(`成功点击提交按钮: ${selector}`, 'success'); return true; } } catch (e) { addLog(`点击提交按钮失败: ${e.message}`, 'error'); } } } const clickableElements = Array.from(doc.querySelectorAll('input, button, a, span, div')); for (const el of clickableElements) { const text = (el.textContent || el.value || '').trim(); if (/^(提交|提交答案|完成|确认提交)$/.test(text)) { try { el.scrollIntoView({ block: 'center', behavior: 'smooth' }); const onclick = el.getAttribute('onclick'); if (onclick) { try { const func = new targetWindow.Function(onclick); func.call(el); addLog(`通过文本匹配和onclick执行提交: ${text}`, 'success'); return true; } catch (e) { addLog(`文本匹配onclick执行失败: ${e.message}`, 'error'); } } if (safeClick(el)) { addLog(`通过文本匹配点击提交按钮: ${text}`, 'success'); return true; } } catch (e) { addLog(`通过文本匹配点击提交按钮失败: ${e.message}`, 'error'); } } } addLog('未找到章节测验提交按钮', 'error'); return false; } catch (e) { addLog(`查找提交按钮时出错: ${e.message}`, 'error'); return false; } } function validateAndFixSubmitParams(doc) { try { const targetWindow = doc.defaultView || window; if (typeof targetWindow.workRelationId === 'undefined') { const workIdInputs = doc.querySelectorAll('input[name*="workRelationId"], input[id*="workRelationId"]'); if (workIdInputs.length > 0) { targetWindow.workRelationId = workIdInputs[0].value; addLog(`设置workRelationId: ${targetWindow.workRelationId}`, 'debug'); } } if (typeof targetWindow.courseId === 'undefined') { const courseIdInputs = doc.querySelectorAll('input[name*="courseId"], input[id*="courseId"]'); if (courseIdInputs.length > 0) { targetWindow.courseId = courseIdInputs[0].value; addLog(`设置courseId: ${targetWindow.courseId}`, 'debug'); } } if (typeof targetWindow.classId === 'undefined') { const classIdInputs = doc.querySelectorAll('input[name*="classId"], input[id*="classId"]'); if (classIdInputs.length > 0) { targetWindow.classId = classIdInputs[0].value; addLog(`设置classId: ${targetWindow.classId}`, 'debug'); } } const questions = doc.querySelectorAll('[class*="TiMu"], [class*="timu"]'); questions.forEach((q, index) => { const qid = q.getAttribute('id') || `question_${index}`; let answerInput = doc.querySelector(`input[name="answer${qid}"], input[id="answer${qid}"]`); if (!answerInput) { answerInput = doc.createElement('input'); answerInput.type = 'hidden'; answerInput.name = `answer${qid}`; answerInput.id = `answer${qid}`; q.appendChild(answerInput); addLog(`为题目${qid}创建答案input`, 'debug'); } }); addLog('提交参数验证完成', 'debug'); return true; } catch (e) { addLog(`提交参数验证失败: ${e.message}`, 'error'); return false; } } async function handleSubmitConfirmDialog(doc, timeoutMs = 3000) { const startTime = Date.now(); while (Date.now() - startTime < timeoutMs) { try { const confirmDialogSelectors = [ '.popDiv', '.modal', '.dialog', '.alert', '.layui-layer', '.confirm-dialog', '.submit-confirm', '[class*="confirm"]', '[class*="dialog"]', '[class*="modal"]' ]; for (const selector of confirmDialogSelectors) { const dialog = doc.querySelector(selector); if (dialog && dialog.style.display !== 'none' && (dialog.textContent.includes('确认提交') || dialog.textContent.includes('提交') || dialog.textContent.includes('确定'))) { addLog('检测到提交确认弹窗', 'info'); const confirmButtonSelectors = [ 'button[onclick*="submit"]', 'button[value*="提交"]', 'button[value*="确定"]', 'button[value*="确认"]', 'input[type="button"][value*="提交"]', 'input[type="button"][value*="确定"]', 'input[type="button"][value*="确认"]', '.confirm-btn', '.submit-btn', '.ok-btn', 'button:contains("提交")', 'button:contains("确定")', 'button:contains("确认")', 'a[onclick*="submit"]' ]; for (const btnSelector of confirmButtonSelectors) { const confirmBtn = dialog.querySelector(btnSelector) || doc.querySelector(`${selector} ${btnSelector}`); if (confirmBtn && !confirmBtn.disabled) { try { const onclick = confirmBtn.getAttribute('onclick'); if (onclick) { const targetWindow = doc.defaultView || window; const func = new targetWindow.Function(onclick); func.call(confirmBtn); addLog(`通过onclick执行确认提交: ${onclick}`, 'success'); return true; } if (safeClick(confirmBtn)) { addLog(`点击确认提交按钮: ${btnSelector}`, 'success'); return true; } } catch (e) { addLog(`点击确认按钮失败: ${e.message}`, 'error'); } } } const allButtons = dialog.querySelectorAll('button, input[type="button"], a'); for (const btn of allButtons) { const text = (btn.textContent || btn.value || '').trim(); if (/^(提交|确定|确认|OK)$/.test(text)) { try { if (safeClick(btn)) { addLog(`通过文本匹配点击确认按钮: ${text}`, 'success'); return true; } } catch (e) { addLog(`文本匹配点击确认按钮失败: ${e.message}`, 'error'); } } } } } } catch (e) { } await new Promise(r => setTimeout(r, 200)); } return false; } async function waitForQuizSubmitCompletion(doc, timeoutMs = 5000) { const startTime = Date.now(); const originalUrl = doc.location.href; while (Date.now() - startTime < timeoutMs) { try { const successIndicators = [ '.success', '.alert-success', '.msg-success', '[class*="success"]', '[class*="complete"]', '*[text()*="提交成功"]', '*[text()*="完成"]' ]; for (const selector of successIndicators) { const indicator = doc.querySelector(selector); if (indicator && indicator.textContent.includes('成功')) { addLog('检测到提交成功提示', 'success'); return true; } } if (doc.location.href !== originalUrl) { addLog('检测到页面跳转,提交可能已完成', 'info'); return true; } const nextStepSelectors = [ 'button[onclick*="next"]', 'a[onclick*="next"]', 'input[value*="下一"]', 'button[value*="下一"]', '.next-btn', '.btn-next', '#next' ]; for (const selector of nextStepSelectors) { if (doc.querySelector(selector)) { addLog('检测到下一步按钮,提交可能已完成', 'info'); return true; } } } catch (e) { } await new Promise(r => setTimeout(r, 200)); } addLog('等待提交完成超时', 'error'); return false; } async function autoAnswerQuizInDocument(doc) { try { if (!isStudyingChapters) return false; if (!isQuizPageDoc(doc)) return false; await injectConsoleDecryptCode(doc); const qs = collectQuizQuestions(doc); if (!qs || qs.length === 0) return false; addLog(`检测到章节测验,共 ${qs.length} 题,开始作答...`, 'info'); for (const q of qs) { if (!isStudyingChapters) { addLog('已暂停刷章节,停止测验作答', 'info'); return false; } const promptInfo = { type: q.type, question: q.question || `题目 ${q.qid}`, options: q.options || [] }; const ans = await getAnswer(promptInfo); if (ans) { fillQuizAnswer(doc, q.qid, q.type, ans); } await new Promise(r => setTimeout(r, 500)); } addLog('章节测验答题完成,准备提交...', 'success'); await new Promise(r => setTimeout(r, 1000)); addLog('验证提交参数...', 'info'); validateAndFixSubmitParams(doc); let submitSuccess = false; const targetWindow = doc.defaultView || window; try { const originalAlert = targetWindow.alert; targetWindow.alert = function(msg) { addLog(`阻止弹窗: ${msg}`, 'debug'); if (msg && msg.includes('code-1')) { addLog('检测到code-1错误,尝试其他提交方式', 'info'); return; } return originalAlert.call(this, msg); }; if (typeof targetWindow.btnBlueSubmit === 'function') { addLog('使用学习通标准提交流程', 'info'); targetWindow.btnBlueSubmit(); await new Promise(r => setTimeout(r, 1000)); if (typeof targetWindow.submitCheckTimes === 'function') { targetWindow.submitCheckTimes(); addLog('执行submitCheckTimes完成', 'success'); } if (typeof targetWindow.noSubmit === 'function') { addLog('检测到noSubmit函数,跳过自动提交以避免错误', 'info'); } submitSuccess = true; addLog('学习通标准提交流程执行完成', 'success'); } else if (typeof targetWindow.submitWork === 'function') { addLog('使用submitWork提交', 'info'); targetWindow.submitWork(); submitSuccess = true; } else { submitSuccess = findAndClickQuizSubmitButton(doc); } // 恢复原始alert targetWindow.alert = originalAlert; } catch (e) { addLog(`提交流程执行失败: ${e.message}`, 'error'); submitSuccess = findAndClickQuizSubmitButton(doc); } if (submitSuccess) { addLog('已执行提交操作,等待确认弹窗...', 'info'); await new Promise(r => setTimeout(r, 500)); const confirmHandled = await handleSubmitConfirmDialog(doc, 3000); if (confirmHandled) { addLog('已处理提交确认弹窗', 'success'); } else { addLog('未检测到确认弹窗或处理失败', 'info'); } const submitCompleted = await waitForQuizSubmitCompletion(doc, 8000); if (submitCompleted) { addLog('章节测验提交完成,准备跳转下一节...', 'success'); await new Promise(r => setTimeout(r, 2000)); if (isStudyingChapters) { const jumpSuccess = gotoNextSection(doc); if (jumpSuccess) { addLog('已自动跳转到下一节', 'success'); } else { addLog('自动跳转失败,请手动切换到下一节', 'error'); } } } else { addLog('等待提交完成超时,但将继续尝试跳转', 'info'); await new Promise(r => setTimeout(r, 1500)); if (isStudyingChapters) gotoNextSection(doc); } } else { addLog('未找到提交按钮,跳过提交直接尝试跳转', 'info'); await new Promise(r => setTimeout(r, 1000)); if (isStudyingChapters) gotoNextSection(doc); } return true; } catch (e) { addLog(`章节测验自动作答失败: ${e.message}`, 'error'); return false; } } })();