Greasy Fork is available in English.
已破解API,无需答题,支持多开
// ==UserScript== // @name 正保会计网校(原##会计网校)继续教育刷课 // @description 已破解API,无需答题,支持多开 // @version 0.3 // @author ChenZihan // @match https://jxjy.#####acc.com/courseware/* // @exclude https://jxjy.#####acc.com/courseware/index // @grant none // @license Apache License, Version 2.0 // @namespace https://greasyfork.org/users/737513 // ==/UserScript== (function () { 'use strict'; async function getServerTime(url) { var r###lt; await $.ajax({ url: url, type: 'post', success: (res) => { r###lt = res } }) return r###lt; } async function postMD5(innerTime, serverOffsetTime) { const videoModel = require('h5/videoModel'); const videoCtrl = require('h5/videoCtrl'); const stats = require('h5/h5StatApi'); const vEvents = require('h5/h5EventApi'); const md5 = require('h5/md5'); // Properties var videoID = videoModel.getVideoInfo().videoRefID; var userID = videoModel.getPlayStatus().userID; var studyID = videoModel.getVideoInfo().studyID; var courseID = videoModel.getVideoInfo().courseID; var playTime = stats.getCurrentTime(); var postTimeKey = videoModel.getPlayerOpts().postTimeKey; // Urls var basePath = videoModel.getInterfaces().BASE_PATH; var postDataUrl = videoModel.getInterfaces().POST_TIMING_DATA_URL; var getSysTimeUrl = videoModel.getInterfaces().getServerTimeUrl; var sysTimeUrl = basePath + getSysTimeUrl; // Get server time var serverTime; await getServerTime(sysTimeUrl).then(res => { serverTime = res - serverOffsetTime }); var hs = parseInt(serverTime) // console.log("videoID", videoID) // console.log("playTime", playTime) // console.log(videoID, userID, studyID, courseID, playTime, postTimeKey) // console.log("postTimeKey: ", postTimeKey) // console.log("hs: ", hs) // Concat var keyStr = videoID.toString() + playTime.toString() + innerTime.toString() + postTimeKey + hs; // Get hex MD5 var keyMd5Str = hex_md5(keyStr); // console.log("Final:", keyStr, keyMd5Str) $.ajax({ url: basePath + postDataUrl, dataType: 'json', async: true, type: 'post', data: { videoID: videoID, studyID: studyID, userID: userID, courseID: courseID, key: keyMd5Str, hs: hs, playTime: playTime, innerTime: innerTime, isEnded: 0 }, success: (r###lt) => { console.log("Success: ", r###lt); }, error: (r###lt) => { console.log("Failed: ", r###lt); } }) } function secMin(totalSeconds) { const minutes = Math.floor(totalSeconds / 60); const seconds = totalSeconds % 60; function padTo2Digits(num) { return num.toString().padStart(2, '0'); } const r###lt = `${padTo2Digits(minutes)}:${padTo2Digits(seconds)}`; return r###lt; } function getVideoTime(videoTime) { var total = Number(videoTime.split(':')[0]) * 60 + Number(videoTime.split(':')[1]) return total } var times = 0; var videoTotalSeconds = null; function studySchedule(innerTime, serverOffsetTime, leftTime) { if (leftTime != null && leftTime != '') { videoTotalSeconds = getVideoTime(leftTime); } else { console.log(`❗️等待获取总时长`); if (document.getElementsByClassName("vplay vmPlay").length != 0) { document.getElementsByClassName("vplay vmPlay")[0].click() } var iterval = setInterval(() => { var videoTime = document.getElementsByClassName("timeNum")[0].innerHTML.split('/')[1] videoTotalSeconds = getVideoTime(videoTime) leftTime = videoTime if (videoTotalSeconds != 0) { clearInterval(iterval); startSchedule(); if (document.getElementsByClassName("vplay vmPause").length != 0) { document.getElementsByClassName("vplay vmPause")[0].click() } } }, 100); } function startSchedule() { console.log(`✅已配置Schedule ${leftTime}后切换至下一个视频`); var schedule = setInterval(() => { console.log("-----------------------------"); times++; var totalSeconds = times * innerTime; postMD5(innerTime, serverOffsetTime); console.log(`🔴第${times}次添加学习时长👀 ${totalSeconds}/${videoTotalSeconds}`); console.log(`总添加时长: ${secMin(totalSeconds)}`); console.log("-----------------------------"); if (document.getElementsByClassName("vplay vmPause").length != 0) { document.getElementsByClassName("vplay vmPause")[0].click() } if (totalSeconds > videoTotalSeconds && videoTotalSeconds != 0) { // console.log("❗️已停止添加学习时长"); // clearInterval(schedule); // location.reload(); console.log("❗️时长添加完毕,3秒后切换至下一个视频"); setTimeout(() => { document.getElementsByClassName("vmFront")[0].click() }, 3000); } }, innerTime * 1000 - 5000); } } console.log(`💿等待页面加载完成`); setTimeout(() => { studySchedule(20, 1000, "") }, 3000); })();