1+ // ==UserScript==
2+ // @name 组卷网试卷处理下载打印
3+ // @version 1.0.0
4+ // @namespace
5+ // @description 【2024/8/3】自动处理组卷网试卷,并打印。
6+ // @author nuym
7+ // @match https://zujuan.xkw.com/zujuan
8+ // @match https://zujuan.xkw.com/*.html
9+ // @icon https://zujuan.xkw.com/favicon.ico
10+ // @grant GM_registerMenuCommand
11+ // @grant GM_notification
12+ // @homepage https://github.com/bzyzh/xkw-zujuan-script
13+ // @license GNU Affero General Public License v3.0
14+ // ==/UserScript==
15+
16+ ( function ( ) {
17+ 'use strict' ;
18+ console . log ( "✅ 程序加载成功" ) ;
19+
20+ // 获取用户信息
21+ var username = document . getElementsByClassName ( 'user-nickname' ) [ 0 ] . innerText ;
22+ var usertype = document . getElementsByClassName ( 'user-type plus' ) [ 0 ] . innerText ;
23+ var endtime = document . getElementsByClassName ( 'end-time' ) [ 0 ] . innerText ;
24+
25+ console . log ( "-----------------------------------------------" ) ;
26+ console . log ( "🔹版本:1.0.0" ) ;
27+ console . log ( "🔹作者:nuym" ) ;
28+ console . log ( "🔹开源地址:https://github.com/bzyzh/xkw-zujuan-script" ) ;
29+ console . log ( "🔹学校网站:https://www.bzyzh.com" ) ;
30+ console . log ( "🔹组卷网用户: %s" , username ) ;
31+ console . log ( "🔹组卷网等级: %s" , usertype ) ;
32+ console . log ( "🔹组卷网到期时间: %s" , endtime ) ;
33+ console . log ( "-----------------------------------------------" ) ;
34+
35+ // 去除广告
36+ var adElement = document . getElementsByClassName ( "aside-pop activity-btn" ) [ 0 ] ;
37+ if ( adElement ) {
38+ adElement . remove ( ) ;
39+ console . log ( "✅ 去除广告成功" ) ;
40+ }
41+
42+ // 注册菜单命令以处理后自动刷新
43+ GM_registerMenuCommand ( "处理后自动刷新" , ( ) => {
44+ var autoRefreshStatus = localStorage . getItem ( "EnableAutoRefresh" ) ;
45+ if ( autoRefreshStatus === 'N' ) {
46+ localStorage . setItem ( "EnableAutoRefresh" , 'Y' ) ;
47+ GM_notification ( "处理后自动刷新:已开启" ) ;
48+ } else {
49+ localStorage . setItem ( "EnableAutoRefresh" , 'N' ) ;
50+ GM_notification ( "处理后自动刷新:已关闭" ) ;
51+ }
52+ } ) ;
53+
54+ // 初始化处理后自动刷新状态
55+ if ( localStorage . getItem ( "EnableAutoRefresh" ) == null ) {
56+ localStorage . setItem ( "EnableAutoRefresh" , 'Y' ) ;
57+ }
58+
59+ console . log ( "🔹 创建按钮对象..." ) ;
60+ var printButton = document . createElement ( 'a' ) ;
61+ printButton . className = "btnTestDown link-item anchor-font3" ;
62+ printButton . innerHTML = `<i class="icon icon-download1"></i><span>打印试卷</span>` ;
63+
64+ // 打印按钮点击事件
65+ printButton . onclick = function ( ) {
66+ var enableAutoRefresh = localStorage . getItem ( "EnableAutoRefresh" ) === 'Y' ;
67+
68+ // 删除指定类名的元素
69+ function deleteElementByClassName ( className ) {
70+ while ( true ) {
71+ var elements = document . getElementsByClassName ( className ) ;
72+ if ( elements . length === 0 ) break ;
73+ elements [ 0 ] . remove ( ) ;
74+ }
75+ }
76+
77+ // 删除指定ID的元素
78+ function deleteElementById ( id ) {
79+ var element = document . getElementById ( id ) ;
80+ if ( element ) element . remove ( ) ;
81+ }
82+
83+ // 根据类名移除元素边框
84+ function removeBorderByClassName ( className ) {
85+ var elements = document . getElementsByClassName ( className ) ;
86+ for ( var i = 0 ; i < elements . length ; i ++ ) {
87+ elements [ i ] . setAttribute ( 'style' , 'margin-bottom: 0;' ) ;
88+ }
89+ }
90+
91+ // 根据类名改变元素的CSS
92+ function changeCssByClassName ( className , css ) {
93+ var elements = document . getElementsByClassName ( className ) ;
94+ for ( var i = 0 ; i < elements . length ; i ++ ) {
95+ elements [ i ] . setAttribute ( 'style' , css ) ;
96+ }
97+ }
98+
99+ // 获取试卷信息
100+ var paperTitle = document . getElementsByClassName ( 'title-txt' ) [ 9 ] . innerText ;
101+ var subject = document . getElementsByClassName ( 'subject-menu__title' ) [ 0 ] . innerText ;
102+
103+ // 删除不必要的元素
104+ deleteElementByClassName ( 'header' ) ;
105+ deleteElementByClassName ( 'bread-nav' ) ;
106+ deleteElementByClassName ( 'fiexd-nav' ) ;
107+ deleteElementByClassName ( 'footer' ) ;
108+ deleteElementByClassName ( 'other-info' ) ;
109+ deleteElementByClassName ( 'info-list' ) ;
110+ deleteElementByClassName ( 'tools' ) ;
111+ deleteElementByClassName ( 'exam-item__info' ) ;
112+ deleteElementByClassName ( 'add-sec-ques' ) ;
113+ deleteElementById ( 'paperAnalyze' ) ;
114+ deleteElementByClassName ( 'exam-analyze' ) ;
115+
116+ // 修改指定元素的CSS
117+ changeCssByClassName ( 'selected-maskt' , 'opacity: 1;' ) ;
118+
119+ // 通知并打印
120+ console . log ( "✅ 处理成功!" ) ;
121+ GM_notification ( subject + '| ' + paperTitle + "\n ✅ 试卷处理成功!" ) ;
122+ window . print ( ) ;
123+
124+ // 自动刷新
125+ if ( enableAutoRefresh ) {
126+ window . location . reload ( ) ;
127+ }
128+ } ;
129+
130+ console . log ( "🔹 查找将要添加的位置..." ) ;
131+ // 查找目标元素并将打印按钮添加到目标位置
132+ var targetElement = document . getElementsByClassName ( 'link-box' ) [ 0 ] || document . getElementsByClassName ( 'btn-box clearfix' ) [ 0 ] ;
133+ if ( targetElement ) {
134+ targetElement . appendChild ( printButton ) ;
135+ console . log ( "✅ 程序已就绪!" ) ;
136+ } else {
137+ console . error ( "❌ 无法找到将要添加的位置,程序现在将停止" ) ;
138+ alert ( '❌ 出错了\n脚本无法找到将要添加的位置,程序现在将停止。请联系脚本作者更新!' ) ;
139+ }
140+ } ) ( ) ;
0 commit comments