🏠 Home 

傲星英华学堂网课助手

英华学堂在线网课全自动挂机脚本,支持验证码识别


ติดตั้งสคริปต์นี้?
// ==UserScript==
// @name         傲星英华学堂网课助手
// @namespace    https://yinghuaonline.aoaostar.com
// @version      2.4.3
// @description  英华学堂在线网课全自动挂机脚本,支持验证码识别
// @author       Pluto
// @icon         https://www.aoaostar.com/favicon.ico
// @license      GPL-3.0 License
// @supportURL   https://www.aoaostar.com
// @homepageURL  https://github.com/aoaostar
// @connect *
// @match */*
// @webRequest   {"selector": "*static/user/js/video.js*", "action": "cancel"}
// @grant  GM_addElement
// @grant  GM_setValue
// @grant  GM_getValue
// @grant  GM_registerMenuCommand
// @grant  GM_unregisterMenuCommand
// @grant  GM_xmlhttpRequest
// @grant  GM_notification
// @grant  GM_listValues
// @grant  GM_info
// @grant  GM_log
// @grant  GM_addStyle
// @require https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js
// @require https://greasyfork.org/scripts/447800/code/ckplayer.js
// @require https://greasyfork.org/scripts/447799/code/aoaostar-yinghua-main.js
// @run-at document-idle
// ==/UserScript==
(function () {
$(function () {
if (!contain_platform()) {
return
}
// 去除烦人的第一次登录信息框
const layer_close = setInterval(() => {
if ($('.layui-layer-content').text().includes("您可能是第一次登录系统")) {
layer.closeAll()
clearInterval(layer_close)
}
}, 500)
if (window.location.pathname.match('/user/node')) {
//初始化面板
init_panel()
aoaostar_main()
}
if (window.location.pathname.match('/user/login') && GM_getValue('menu_force_login', true)) {
GM_addStyle('#code_row{display:none;}')
$('#login-title').text('学生登录(已开启封号强登)')
$('#loginForm > .list > .item:last-child').html(`<div class="inpbox">
<input type="button" class="btn" id="force_login" value="强制登录"/>
</div>`)
$("#loginForm").off()
$('#force_login').click(force_login)
// 监听回车
$("#password").keydown((e) => {
if (e.keyCode === 13) {
e.preventDefault();
$('#force_login').click()
}
})
}
})
const MenuCommands = [
{
title: (GM_getValue('menu_force_login', true) ? '✅' : '❌') + " 强制登录(封号强登)",
func: function () {
GM_setValue('menu_force_login', !GM_getValue('menu_force_login', true))
notification('切换成功')
location.reload()
}
},
{
title: (low_consumption_mode_enabled() ? '✅' : '❌') + " 省流模式",
func: function () {
GM_setValue('menu_low_consumption_mode', !low_consumption_mode_enabled())
notification('切换成功')
location.reload()
}
},
{
title: `${!contain_platform() ? '🍀 添加' : '🍁 删除'}平台`,
func: function () {
const b = contain_platform();
let platforms_data = new Set(GM_getValue('platforms_data', []))
!b ? platforms_data.add(document.domain) : platforms_data.delete(document.domain)
GM_setValue('platforms_data', [...platforms_data])
notification(`${b ? '删除' : '添加'}平台成功`)
location.reload()
}
},
{
title: "💬 反馈 & 建议 [Github]",
func: function () {
window.open("https://github.com/aoaostar/cdn/issues")
}
},
]
register_menu_command()
function register_menu_command() {
for (const command of MenuCommands) {
GM_registerMenuCommand(command.title, command.func)
}
}
function force_login() {
const username = $('#username').val() || '';
const password = $('#password').val() || '';
const schoolId = $('#schoolId').val() || '';
if ($('#remember').is(':checked') && window.localStorage) {
localStorage.setItem("schoolId", schoolId);
localStorage.setItem("userName", username);
localStorage.setItem("passWord", password);
localStorage.setItem("remember", '1');
}
let data = {
platform: 'Android',
username: username,
password: password,
pushId: '140fe1da9e67b9c14a7',
schoolId: schoolId,
imgSign: '533560501d19cc30271a850810b09e3e',
imgCode: 'cryd',
}
let formData = new FormData();
for (const dataKey in data) {
formData.append(dataKey, data[dataKey])
}
GM_xmlhttpRequest({
method: 'POST',
url: '/api/login.json',
data: formData,
onload: function (response) {
if (response.readyState === 4 && response.status === 200) {
const content = JSON.parse(response.responseText);
if (content.status) {
let domainArr = document.domain.split('.')
let domain = document.domain
if (domainArr.length > 2) {
domain = domainArr.slice(1).join('.')
}
document.cookie = `token=${encodeURIComponent(content.r###lt.data.token)}; domain=${domain}; path=/`
notification("强制登录成功")
window.location.href = '/user'
} else {
notification("登录失败!" + content.msg)
}
}
}
})
}
function init_panel() {
GM_addElement('link', {
href: "//cdn.aoaostar.com/yinghuaonline/style.css?v=" + GM_info.script.version,
rel: 'stylesheet'
});
const el = `<span class="aoaostar-drawer-guide" style="">👈</span>
<div class="aoaostar" style="display: none">
<div class="info">
<div class="title">
<h1>傲星英华学堂网课助手</h1>
<a class="link" href="https://www.aoaostar.com" target="_blank">https://www.aoaostar.com</a>
</div>
<div class="flex justify-center">
<a class="tag" href="https://github.com/aoaostar" target="_blank">
<span>作者</span><span>Pluto</span>
</a>
<a class="tag" href="https://github.com/aoaostar/cdn/tree/master/yinghuaonline" target="_blank">
<span>版本号</span><span>v${GM_info.script.version || '获取失败'}</span>
</a>
</div>
<div class="flex justify-center">
<div class="tag">
<span>当前课程ID</span><span id="course-id">正在获取</span>
</div>
<div class="tag">
<span>当前章节ID</span><span id="node-id">正在获取</span>
</div>
</div>
<div class="flex justify-center">
<div class="tag">
<span>视频总数</span><span id="node-count">正在获取</span>
</div>
<div class="tag">
<span>视频时长</span><span id="course-duration">正在获取</span>
</div>
</div>
<div class="flex justify-center">
<div class="tag">
<span>当前第n个视频</span><span id="node-index">正在获取</span>
</div>
<div class="tag">
<span>剩余视频</span><span id="node-surplus">正在获取</span>
</div>
</div>
<div class="tag justify-center">
<span>课程名称</span><span id="course-title">正在获取</span>
</div>
<div class="flex justify-center">
<div class="tag">
<span>状态</span><span id="node-status">正在获取</span>
</div>
<div class="tag">
<span>进度</span><span id="node-progress">正在获取</span>
</div>
</div>
</div>
<div class="tab">
<div class="title">
<div class="active" data-tab="output">当前日志</div>
<div data-tab="log">脚本日志</div>
</div>
<div class="content">
<div class="output"></div>
<div class="log hidden"></div>
</div>
</div>
</div>`
$(document.body).append(el)
$('.aoaostar .tab .title>div').click(e => {
$('.aoaostar .tab .title>div').removeClass('active')
const tab = $(e.target).data('tab');
$(e.target).addClass('active')
$('.tab .content > div').addClass('hidden')
$('.tab .content .' + tab).removeClass('hidden')
})
}
})()