// ==UserScript==
// @name 广东省国家工作人员学法考试系统自动刷课&&2025年自动考试
// @namespace http://tampermonkey.net/
// @version 2025.11.11
// @description 广东省专用
// @author yygdz1921&hzqim
// @match http*://xfks-study.gdsf.gov.cn/study/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=gdsf.gov.cn
// @require https://fastly.jsdelivr.net/npm/sweetalert2@11
// @grant GM_addStyle
// @license MIT
// ==/UserScript==
(function () {
'use strict';
// Your code here...
var log = console.log;
log("load...");
function main() {
log("main...");
study();
}
// 考试
function exam() {
log("exam...");
var answers = [
//2025年题库
{"q": "习近平总书记在中国共产党第二十次全国代表大会上的报告中指出", "a": "B"},
{"q": "习近平总书记2020年11月16日在中央全面依法治国工作会议上的讲话指出", "a": "A"},
{"q": "习近平总书记在中国共产党第二十次全国代表大会上的报告中指出", "a": "B"},
{"q": "作出关于全面推进依法治国若干重大问题的决定", "a": "C"},
{"q": "执行全国代表大会的决议,领导党的全部工作,对外代表中国共产党", "a": "C"},
{"q": "对于党员因不服纪委或者其他党组织给予本人的处理", "a": "C"},
{"q": "党政领导干部选拔任用工作条例", "a": "C"},
{"q": "政法工作条例", "a": "A"},
{"q": "信访工作条例", "a": "D"},
{"q": "政治协商工作条例", "a": "A"},
{"q": "党政机关厉行节约反对浪费条例", "a": "C"},
{"q": "落实全面从严治党主体责任规定", "a": "B"},
{"q": "统一战线工作条例", "a": "D"},
{"q": "全国人民代表大会会议每年举行一次", "a": "D"},
{"q": "反间谍法", "a": "B"},
{"q": "反恐怖主义法", "a": "B"},
{"q": "保守国家秘密法", "a": "C"},
{"q": "国家坚持经济建设和国防建设", "a": "A"},
{"q": "科学技术进步法", "a": "A"},
{"q": "优化营商环境条例", "a": "A"},
{"q": "张三和李四是邻居", "a": "C"},
{"q": "国内国际双循环相互促进的新发展格局", "a": "C"},
{"q": "未成年人网络保护条例", "a": "C"},
{"q": "古树名木保护条例", "a": "D"},
{"q": "政务数据共享条例", "a": "C"},
{"q": "住房租赁条例", "a": "A"},
{"q": "反不正当竞争法", "a": "C"},
{"q": "监察法", "a": "B"},
{"q": "能源法", "a": "D"},
{"q": "治安管理处罚法", "a": "C"},
{"q": "法治宣传教育法", "a": "A"},
{"q": "公职人员政务处分法", "a": "A"},
{"q": "行政处罚法", "a": "A"},
{"q": "行政诉讼法", "a": "B"},
{"q": "重大行政决策程序暂行条例", "a": "C"},
{"q": "立法法", "a": "A"},
{"q": "公司法", "a": "C"},
{"q": "统计法", "a": "B"},
{"q": "刑法", "a": "D"},
{"q": "全国人民代表大会和地方各级人民代表大会代表法", "a": "D"},
{"q": "中共中央关于进一步全面深化改革推进中国式现代化的决定", "a": "ACD"},
{"q": "坚持党的领导,是社会主义法治的根本要求,是党和国家的", "a": "AB"},
{"q": "党章规定,国有企业党委", "a": "BCD"},
{"q": "推进领导干部能上能下规定", "a": "ABC"},
{"q": "重大事项请示报告条例", "a": "AB"},
{"q": "机构编制工作情况和纪律要求执行情况应当纳入", "a": "ABCD"},
{"q": "中国共产党问责条例", "a": "ABD"},
{"q": "国家保护和改善", "a": "AB"},
{"q": "突发事件应对法", "a": "ABC"},
{"q": "国家安全法", "a": "ABCD"},
{"q": "赵某在下班途中看到一位老人摔倒在地", "a": "ACD"},
{"q": "中华人民共和国国防教育法", "a": "BC"},
{"q": "增值税法", "a": "ABCD"},
{"q": "国家实行公民终身法治教育制度", "a": "ABC"},
{"q": "公务员法", "a": "AB"},
{"q": "行政强制法", "a": "ABC"},
{"q": "循环经济促进法", "a": "BCD"},
{"q": "未成年人保护法", "a": "ABCD"},
{"q": "预防未成年人犯罪法", "a": "BD"},
{"q": "负有法治宣传教育职责的部门", "a": "ABD"},
{"q": "中国共产党纪律检查委员会工作条例", "a": "对"},
{"q": "部门规章和规范性文件不得就机构编制事项作出具体规定", "a": "对"},
{"q": "中国共产党纪律处分条例", "a": "错"},
{"q": "中国共产党党内监督条例", "a": "错"},
{"q": "中国共产党党组工作条例", "a": "错"},
{"q": "中小企业促进法", "a": "对"},
{"q": "金融机构违反与民营经济组织借款人的约定", "a": "对"},
{"q": "保障中小企业款项支付条例", "a": "错"},
{"q": "中华人民共和国国防动员法", "a": "对"},
{"q": "农村公路条例", "a": "对"},
{"q": "农村集体经济组织法", "a": "错"},
{"q": "县级以上人民政府司法行政部门应当建立法治文化场所名录", "a": "错"},
{"q": "行政复议法", "a": "对"},
{"q": "行政许可法", "a": "错"},
{"q": "反垄断法", "a": "错"},
{"q": "中华人民共和国国家安全法", "a": "错"},
{"q": "网络安全法", "a": "错"},
{"q": "外商投资法", "a": "对"},
{"q": "公共安全视频图像信息系统管理条例", "a": "对"},
{"q": "国家赔偿法", "a": "错"},
{"q": "数据安全法", "a": "对"},
];
var items = document.getElementsByClassName("item");
if (answers.length < items.length) {
Swal.fire("脚本内置答案数量小于当前试题数量,无法答题!!!");
return;
}
function abcd_to_index(s) {
var l = [];
for(let i = 0; i < s.length; i++){
let char = s[i];
if(char === "a" || char === "A"){ l.push(0);}
else if(char === "b" || char === "B"){ l.push(1);}
else if(char === "c" || char === "C"){ l.push(2);}
else if(char === "d" || char === "D"){ l.push(3);}
else if(char === "e" || char === "E"){ l.push(4);}
else if(char === "f" || char === "F"){ l.push(5);}
else if(char === "g" || char === "G"){ l.push(6);}
else if(char === "对"){ l.push(0);}
else if(char === "错"){ l.push(1);}
}
return l;
}
let count = 0;
for (let index = 0; index < items.length; index++){
let item = items[index];
let question = item.getElementsByClassName("question-title")[0].innerText
let answer = null;
for(let i = 0; i < answers.length; i++){
if(question.includes( answers[i].q)){
answer = answers[i];
break;
}
}
if(!answer){
// 变色标记
item.style.background="yellow";
// 计数&&弹窗
count = count + 1;
let msg = `【${question}】\n\n此题没有配置答案,已经自动跳过,请自行谷歌!!!`;
log(msg);
alert(msg);
continue;
}
let options = item.getElementsByClassName("question-option");
let a_list = abcd_to_index(answer.a);
for(let i = 0; i < a_list.length; i++){
let a = a_list[i];
options[a].getElementsByTagName("label")[0].click();
}
}
let txt = "【广东省学法考试年度考试】已经自动作答完毕,请认真核对,手动交卷!";
if(count > 0){
txt = `【广东省学法考试年度考试】已经自动作答完毕,因题库不足已跳过【${count}】题,请自行作答。最后,请认真核对,手动交卷!`;
}
Swal.fire(txt);
}
// 刷分
function study() {
log("study")
var pathname = window.location.pathname;
if (pathname.includes("index")) {
log("index...");
var all_finish = true;
var cols = document.getElementsByClassName("column");
for (let index = 0; index < cols.length; index++) {
var col = cols[index];
var catalogdesc = col.getAttribute("catalogdesc");
var course = col.querySelector(".card.current").innerText.replace(/\s+/g, "");
if (catalogdesc.includes("庭审") || catalogdesc.includes("题库")) {
continue;
}
// 判断是否完成
var btn = col.getElementsByClassName("btn")[0];
if (btn) {
log("未完成", col);
all_finish = false;
btn.click();
break;
} else {
log(catalogdesc, course);
}
}
if (all_finish) {
Swal.fire({
icon: "success",
title: "全部课程已经学习完毕!",
html: `请在规定时间自行进入考场作答!<br>开始考试后,按一下键盘<strong style="color: red;">【G】</strong>键!`,
});
}
} else if (pathname.includes("chapter")) {
log("chapter...");
var ms = 3000 + Math.floor(Math.random() * 1000);
submitLearn();
Swal.fire({
title: "学习强国",
text: `自动学习中,【${ms}】【毫秒】后自动跳转!`,
timer: ms,
timerProgressBar: true
});
setTimeout(() => {
var next_chapter = document.querySelector(".next_chapter")
if (next_chapter) {
next_chapter.click();
} else {
window.location.pathname = "study/index";
}
}, ms);
} else if (pathname.includes("course")) {
log("course...");
var finish = true;
var lis = document.getElementsByClassName("chapter")[0].getElementsByTagName("li");
for (let index = 0; index < lis.length; index++) {
var li = lis[index];
var sub_title = li.getElementsByClassName("sub_title")[0].innerText;
if (sub_title.includes("获得") || sub_title.includes("未开放")) {
continue;
}
finish = false;
li.querySelector(".title a").click();
break;
}
if (finish) {
//document.querySelector(".menu-ic-note").click();
let ms = 3 * 1000;
Swal.fire({
icon: "question",
title: "温馨提示",
text: `本页课程已经学完,${ms / 1000}秒后将返回主页,点击按钮留在当前页面。`,
confirmButtonText: "留在当前页",
timer: ms,
timerProgressBar: true,
}).then((result) => {
if (result.isConfirmed) {
console.log('确定按钮被点击,取消执行函数 f');
} else {
// 只有在用户未点击确定按钮且定时器结束时才执行 f
document.querySelector(".menu-ic-note").click();
}
});
}
} else if (pathname.includes("login")) {
log("login...")
} else if (pathname.includes("exam")) {
log("exam...")
} else {
log("未知页面", pathname);
}
}
if (document.readyState === "complete") {
// DOM 已经加载完成
main();
} else {
// DOM 还未加载完成
// document.addEventListener("DOMContentLoaded", main);
window.addEventListener("load", main);
}
document.addEventListener("keydown", function (event) {
log("keydown", event.code);
if (event.code === "KeyG") {
exam();
} else if (event.code === "KeyT"){
let ms = 3000;
Swal.fire({
title: "学习强国",
text: `自动学习中,【${ms}】【毫秒】后自动跳转!`,
timer: ms,
timerProgressBar: true
});
}
});
})();