// ==UserScript==
// @name 2026广东省国家工作人员学法考试系统自动刷课&&自动考试(按键盘G开始作答)
// @namespace http://tampermonkey.net/
// @version 2026.09.04
// @description 广东省专用(题库81题已与2026最新公众号三考场题库核对:全覆盖、无缺失、答案一致;修复多选题选择;匹配忽略空白;刷课延长停留)
// @author yygdz1921
// @match http*://xfks-study.gdsf.gov.cn/study/*
// @match http*://xfks.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
// @website https://soujiaoben.org/#/s?id=469970&host=greasyfork
// ==/UserScript==
(function () {
'use strict';
// Your code here...
var log = console.log;
log("load...");
// ===== 刷课参数配置(可自行调整)=====
// 每个课件/章节的学习停留时间(毫秒):默认10~20秒,保证服务端能记录学习进度。
// 若仍出现"课程显示学完但进度不到100%",请把下面两个数值调大(例如 30000 表示固定30秒)。
var LEARN_WAIT_MIN = 10000;
var LEARN_WAIT_MAX = 20000;
function main() {
log("main...");
study();
}
// 考试
function exam() {
log("exam...");
var answers = [
// 2026年题库(考场一+考场二+考场三,共81题)
{"q":"《民法典案例》,甲遗失了自己的手机,发布悬赏广告称,捡到手机送还的,奖励500元,乙捡到手机后送还给甲,要求甲支付500元,甲说悬赏广告是我随便写的,不算数,下列说法正确的是( )。","a":"C"},
{"q":"根据《矿产资源法》,下列关于矿产资源勘查、开采管理的说法,错误的是( )。","a":"C"},
{"q":"根据《网络安全法》,网络产品、服务的提供者应当为其产品、服务持续提供安全维护;在规定或者当事人约定的期限内,( )提供安全维护。","a":"B"},
{"q":"根据《治安管理处罚法》,间歇性的精神病人在精神正常的时候违反治安管理的,应当( )。","a":"D"},
{"q":"我国宪法规定,国家培养为社会主义服务的各种专业人才,扩大( )队伍,创造条件,充分发挥他们在社会主义现代化建设中的作用。","a":"C"},
{"q":"《监察法》规定,监察机关主要负责人依法批准立案后,应当主持召开( ),研究确定调查方案,决定需要采取的调查措施。","a":"B"},
{"q":"根据《公务员法》,公务员在受处分期间不得晋升职务、职级和级别,其中受记过、记大过、降级、撤职处分的,不得晋升工资档次。公务员受处分的期间,以下说法正确的是( )。","a":"A"},
{"q":"根据《退役军人就业创业促进条例》,我国退役军人就业创业工作坚持的核心原则是( )。","a":"B"},
{"q":"根据《国家发展规划法》规定,本法所称国家发展规划,特指中华人民共和国国民经济和社会发展( ),包括根据需要提出的远景目标。","a":"B"},
{"q":"根据《民族团结进步促进法》,每年( )为民族团结进步宣传周,国家通过多种形式集中开展铸牢中华民族共同体意识宣传教育活动。","a":"D"},
{"q":"根据《商事调解条例》,下列说法错误的是( )。","a":"A"},
{"q":"《中国共产党工作机关条例》规定,执行党中央以及党委某项重要指示和决定的情况,应当进行( )。对党的工作机关作出的不适当决定,本级党委有权撤销或者变更。","a":"C"},
{"q":"根据《中国共产党纪律处分条例》,党员受到警告处分( )内、受到严重警告处分( )内,不得在党内提升职务和向党外组织推荐担任高于其原任职务的党外职务。","a":"A"},
{"q":"( )是党委领导和管理政法工作的职能部门,是实现党对政法工作领导的重要组织形式。","a":"A"},
{"q":"根据《森林草原防灭火条例》,关于地方森林草原消防队伍的建立,表述错误的是( )。","a":"D"},
{"q":"根据《中华人民共和国市场主体登记管理条例》,市场主体变更登记事项,应当自作出变更决议、决定或者法定变更事项发生之日起( )内向登记机关申请变更登记。","a":"C"},
{"q":"根据《中华人民共和国生态环境法典》规定,生态环境分区管控方案应当落实哪三条线目标?( )","a":"A"},
{"q":"根据《数据安全法》,省级以上人民政府应当将数字经济发展纳入本级国民经济和社会发展规划,并根据需要制定( )。","a":"A"},
{"q":"根据《中华人民共和国法治宣传教育法》,国家利用重大节日、纪念日等,结合( ),组织开展群众性法治宣传教育活动。","a":"D"},
{"q":"根据《电信网络诈骗及其关联违法犯罪联合惩戒办法》,对于经过核查,发现原惩戒认定确有错误后,需经哪个级别的公安机关审核认定?( )","a":"B"},
{"q":"根据《行政复议法》,行政复议机关应当确保( )相适应,提高行政复议人员专业素质,根据工作需要保障办案场所、装备等设施。","a":"AB"},
{"q":"根据《未成年人保护法》,出现学生欺凌行为时,学校应该怎么做?( )","a":"ABCD"},
{"q":"根据《广东省行政规范性文件管理规定》,起草单位送审规范性文件,应当提交的材料包括( )。","a":"ABCD"},
{"q":"要围绕让人民群众在( )中都感受到公平正义这个目标,深化司法体制综合配套改革,加快建设公正高效权威的社会主义司法制度。","a":"ABC"},
{"q":"根据《民法典》,甲将自己的汽车质押给乙,作为债务的担保。在质押期间,( )。","a":"BCD"},
{"q":"根据《宪法》,公民对于任何国家机关和国家工作人员的违法失职行为,有向有关国家机关提出( )的权利。","a":"ABD"},
{"q":"根据《监狱法》关于刑罚的执行,下列说法正确的是( )。","a":"BCD"},
{"q":"根据《广东省优化营商环境条例》,县级以上人民政府及其市场监管等有关部门应当按照法定职责加大( ),依法查处或者配合查处市场主体达成垄断协议、滥用市场支配地位等行为以及行政主体滥用行政权力排除、限制竞争等行为。","a":"BC"},
{"q":"根据《反不正当竞争法》,经营者不得采用给予财物或者其他手段贿赂下列哪些单位或者个人,以谋取交易机会或者竞争优势?( )","a":"ABD"},
{"q":"从事养殖生产时,以下哪些规定是《渔业法》明确要求的?( )","a":"ABCD"},
{"q":"根据《行政复议法》,行政复议机关受理行政复议申请后,发现该行政复议申没有明确的申请人,应当不予办理申请并说明理由。( )","a":"错"},
{"q":"根据《宪法》,法律和其他议案由全国人民代表大会以全体代表的三分之二通过。( )","a":"错"},
{"q":"根据《民法典》,因自愿实施紧急救助行为造成受助人损害的,救助人不承担民事责任。( )","a":"对"},
{"q":"根据《中华人民共和国村民委员会组织法》,村民代表会议由村民委员会召集。村民代表会议每季度召开一次。有三分之二以上的村民代表提议,应当召集村民代表会议。( )","a":"错"},
{"q":"根据《反不正当竞争法》,对涉嫌不正当竞争行为,任何单位和个人有权向监督检查部门举报,监督检查部门接到举报后应当依法及时处理。( )","a":"对"},
{"q":"《行政处罚法》规定,违法行为在五年内未被发现的,不再给予行政处罚。( )","a":"错"},
{"q":"根据《中华人民共和国民营经济促进法》,行政机关应当为包括民营经济组织在内的各类经济组织提供依法合规、规范统一、公开透明、便捷高效的设立、变更、注销等登记服务,降低市场进入和退出成本。","a":"错"},
{"q":"根据《公职人员政务处分法》,拒不执行或者变相不执行、拖延执行上级依法作出的决定、命令的,予以警告、记过或者记大过;情节严重的,予以降级或者撤职。( )","a":"对"},
{"q":"根据《中华人民共和国密码法》,密码管理部门因工作需要,按照国家有关规定,可以提请公安、交通运输、海关等部门对所使用密码的有关物品和人员提供免检等便利,有关部门应当予以协助。( )","a":"错"},
{"q":"《监察法》规定,监察机关调查涉嫌重大贪污贿赂等职务犯罪,根据需要,经过上级监察机关的批准,可以采取技术调查措施,按照规定交有关机关执行。( )","a":"错"},
{"q":"根据《中华人民共和国民营经济促进法》,民营经济组织及其经营者采取欺诈等不正当手段骗取表彰荣誉、优惠政策等的,应当( )已获表彰荣誉、取消享受的政策待遇,依法予以( )。","a":"A"},
{"q":"【民法典案例题】,甲遗失了自己的手机,发布悬赏广告称,捡到手机送还的,奖励500元,乙捡到手机后送还给甲,要求甲支付500元,甲说悬赏广告是我随便写的,不算数,下列说法正确的是( )。","a":"C"},
{"q":"根据《民族团结进步促进法》,国家支持民族地区发挥自身优势,服务构建以国内大循环为主体、国内国际双循环相互促进的新发展格局,深度融入高质量共建( )。","a":"B"},
{"q":"根据《重大行政决策程序暂行条例》,下列关于重大行政决策事项的承办单位说法错误的是( )。","a":"D"},
{"q":"【行政处罚法案列题】某省甲市县公安局和乙市县公安局对一起治安违法行为的行政处罚管辖权发生争议,应( )处理。","a":"D"},
{"q":"新修订的《渔业法》首次以法律形式明确禁止“三无”船舶从事捕捞作业。以下不属于“三无”船舶特征的是( )。","a":"D"},
{"q":"《党章》规定,预备党员认真履行党员义务,具备党员条件的,应当按期转为正式党员;需要继续考察和教育的,可以延长预备期,但不能超过( )。","a":"B"},
{"q":"根据《广东省制造业高质量发展促进条例》,省制造业高质量发展规划应当明确发展目标和主要任务,统筹优化制造业布局,推进多区域协同联动,下列不属于规划要求协同联动范畴的是( )。","a":"D"},
{"q":"根据《中华人民共和国密码法》,( )保护信息的最高密级为机密级。","a":"A"},
{"q":"根据《保守国家秘密法》,国家秘密的保密期限已满的,( )。","a":"C"},
{"q":"根据《卫星电视广播地面接收设施管理规定》,下列说法错误的是( )。","a":"C"},
{"q":"根据《森林草原防灭火条例》,高火险期内,必要时县级以上地方人民政府可以发布命令( )。","a":"B"},
{"q":"《监察法》规定,冻结的财产经查明与案件无关的,应当在查明后( )内解除冻结,予以退还。","a":"A"},
{"q":"根据《国家发展规划法》规定,各地区、各部门应当合理配置公共资源、积极引导社会资源,支持实施国家发展规划确定的( )。","a":"ABC"},
{"q":"根据《中华人民共和国市场主体登记管理条例》,县级以上地方人民政府承担市场主体登记工作的部门(以下称登记机关)应当优化市场主体登记办理流程,提高市场主体登记效率,推行( )等制度。","a":"ABC"},
{"q":"根据《党政机关厉行节约反对浪费条例》,严格根据工作需要编制出境计划,加强因公出境审批和管理,不得安排出境考察,不得组织无实质内容的( )等活动。","a":"ACD"},
{"q":"推进党的领导( ),既是加强党的领导的应有之义,也是法治建设的重要任务。","a":"AD"},
{"q":"根据《保障中小企业款项支付条例》,关于信用监督的规定,下列对大型企业拖欠款项失信惩戒措施的表达中,正确的有( )。","a":"ACD"},
{"q":"根据《治安管理处罚法》,治安案件调查结束后,公安机关应当根据不同情况,分别作出以下哪些处理?( )","a":"ABCD"},
{"q":"根据《未成年人保护法》,任何组织或者个人不得在学校、幼儿园播放、张贴或者散发商业广告;不得利用校服、教材等发布或者变相发布商业广告。( )","a":"对"},
{"q":"根据《中华人民共和国法治宣传教育法》,司法行政部门应当推进法治宣传教育专家库建设,选聘优秀法治人才组成普法讲师团,组织开展法治宣讲活动。其他部门应当根据需要,建设具有部门工作特点的法治宣传教育专家库或者讲师团。( )","a":"错"},
{"q":"根据《中华人民共和国生态环境法典》规定,县级以上人民政府应当提高农村生态环境保护公共服务水平,推动农村生态环境综合整治,持续改善农村人居环境。( )","a":"错"},
{"q":"根据《中国共产党纪律处分条例》,预备党员违犯党纪,情节较轻,可以保留预备党员资格的,党组织应当对其批评教育或者延长预备期;情节较重的,应当取消其预备党员资格。( )","a":"对"},
{"q":"根据《退役军人就业创业促进条例》,国家综合性消防救援队伍招录消防员时,应当在同等条件下优先招录退役军士和义务兵。( )","a":"错"},
{"q":"《中国共产党工作机关条例》规定,党委应当定期对所属工作机关履职情况进行检查考核,具体工作由党委组织部门负责,考核结果及时进行通报。( )","a":"错"},
{"q":"根据《民族团结进步促进法》,民族团结进步事业不受外部势力的干涉。( )","a":"对"},
{"q":"《宪法》规定,地方各级人民政府是地方各级国家权力机关的( )。","a":"A"},
{"q":"根据《数据安全法》,开展数据处理活动应当依照法律、法规的规定,建立健全( )管理制度,组织开展数据安全教育培训,采取相应的技术措施和其他必要措施,保障数据安全。","a":"B"},
{"q":"根据《中华人民共和国生态环境法典》规定,国家统筹考虑生态环境要素的复杂性、生态系统的完整性,自然地理单元的连续性、经济社会发展的可持续性,坚持( )一体化保护和系统治理。","a":"C"},
{"q":"根据《中华人民共和国村民委员会组织法》,村民委员会成员以及由村民或者村集体承担误工补贴的聘用人员,应当接受村民会议或者村民代表会议对其履行职责情况的民主评议。村民委员会成员( )被评议不称职的,其职务终止。","a":"B"},
{"q":"根据《保障中小企业款项支付条例》,机关、事业单位和大型企业与中小企业的定以货物、工程、服务交付后经检验或者验收合格作为支付中小企业款项条件的,付款期限应当自( )起算。","a":"A"},
{"q":"根据《公职人员政务处分法》,决定给予政务处分的,应当制作( )。","a":"D"},
{"q":"习近平总书记2020年11月16日在中央全面依法治国工作会议上的讲话指出,全党同志必须牢记,( )是我国社会主义法治之魂,是我国法治同西方资本主义国家法治最大的区别。","a":"B"},
{"q":"《生态环境监测条例》规定,生态环境质量监测站点设置应当符合生态环境监测规范的要求,避免( )。","a":"A"},
{"q":"根据《中华人民共和国生态环境法典》规定,国家建立健全生态环境监测制度。国务院生态环境主管部门会同有关部门制定生态环境监测规范,构建陆海统筹、天地一体、上下协同、信息共享的生态环境监测网络,统一规划国家生态环境质量监测站点的设置,推进( ),建立健全监测数据共享机制,加强对生态环境监测的管理。","a":"BCD"},
{"q":"根据《中华人民共和国民营经济促进法》,国家鼓励、支持民营经济组织在哪些方面积极发挥作用?( )","a":"ABD"},
{"q":"根据《商事调解条例》,下列哪些争议不适用商事调解?( )","a":"BC"},
{"q":"根据《重大行政决策程序暂行条例》,以下哪些主体可以提出重大行政决策事项建议( )。","a":"ABCD"},
{"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++){
try {
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.replace(/\s+/g,"").includes(answers[i].q.replace(/\s+/g,""))){
answer = answers[i];
break;
}
}
if(!answer){
// 变色标记
item.style.background="yellow";
// 计数&&弹窗
count = count + 1;
let msg = `【${question}】\n\n此题没有配置答案,已经自动跳过,请自行谷歌!!!`;
log(msg);
alert(msg);
continue;
}
// 获取选项列表:优先 .question-option,兼容新版页面的其他结构
let options = item.getElementsByClassName("question-option");
if (options.length === 0) {
options = item.querySelectorAll("[class*='option'], [class*='choice'], .option, .checkbox-item");
}
let a_list = abcd_to_index(answer.a);
for(let i = 0; i < a_list.length; i++){
let a = a_list[i];
let opt = options[a];
if (!opt) {
log("选项不存在,跳过:", a);
continue;
}
try {
// 多选题兼容:依次尝试点击 label → 勾选框/单选框 → 选项本身
let label = opt.getElementsByTagName("label")[0];
if (label) {
label.click();
} else {
let input = opt.querySelector("input[type=checkbox], input[type=radio]");
if (input) {
input.click();
} else {
opt.click();
}
}
} catch (e) {
log("选项点击失败:", a, e);
}
}
} catch (e) {
// 单题出错不中断整场,跳过并提示
count = count + 1;
log("题目处理出错,已跳过:", index, e);
}
}
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: `请在规定时间自行进入考场作答!
开始考试后,按一下键盘【G】键!`,
});
}
} else if (pathname.includes("chapter")) {
log("chapter...");
// 每个课件停留足够时间再跳转,避免学习进度记录不上(进度不到100%)
var ms = LEARN_WAIT_MIN + Math.floor(Math.random() * (LEARN_WAIT_MAX - LEARN_WAIT_MIN));
submitLearn();
Swal.fire({
title: "学习强国",
text: `自动学习中,${Math.round(ms / 1000)}秒后自动跳转!`,
timer: ms,
timerProgressBar: true
});
setTimeout(() => {
// 跳转前再次提交学习记录,确保当前课件已计入进度
try { submitLearn(); } catch (e) { log("submitLearn重试失败", e); }
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
});
}
});
})();