// ==UserScript==
// @name 北京市全员培训自动填写问卷调查【好医生】 已修复20250708 状态正常!
// @namespace http://tampermonkey.net/
// @version 2.21
// @description 自动填写问卷调查,选择单选和多选选项,并填写建议内容,内容根据自己需求调整
// @author VX:hapens1986 bug反馈请注明来源!
// @match https://bjsqypx.haoyisheng.com/qypx/bj/dcwj.jsp?course_id=*
// @match https://bjsqypx.haoyisheng.com/qypx/bj/*
// @ICON https://cdn-icons-png.flaticon.com/128/4594/4594681.png
// @grant none
// @run-at document-idle
// ==/UserScript==
(function() {
'use strict';
// 配置参数
const config = {
suggestionText: "感谢提供学习机会,我从中受益很多,很多知识点很实用!"
};
// 主函数
function main() {
if (!isTargetPage()) return;
// 使用MutationObserver确保DOM完全加载
const observer = new MutationObserver(function(mutations, obs) {
if (document.querySelector('input[type="radio"]')) {
obs.disconnect();
executeAutoFill();
}
});
observer.observe(document, {
childList: true,
subtree: true
});
// 立即尝试执行一次
if (document.querySelector('input[type="radio"]')) {
executeAutoFill();
}
}
// 判断是否是目标页面
function isTargetPage() {
return document.title.includes("北京市全员必修课培训") &&
document.querySelector('form.feedbackform');
}
// 执行自动填写
function executeAutoFill() {
console.log("[自动填写] 开始执行自动填写...");
fillAllRadioQuestions();
fillAllCheckboxQuestions();
fillSuggestion();
console.log("[自动填写] 自动填写完成!请检查后提交。");
showCompletionNotice();
}
// 填写所有单选题(选择第一个选项)
function fillAllRadioQuestions() {
const radioGroups = {};
// 分组收集所有单选按钮
document.querySelectorAll('input[type="radio"]').forEach(radio => {
const name = radio.name;
if (!radioGroups[name]) {
radioGroups[name] = [];
}
radioGroups[name].push(radio);
});
// 为每组选择第一个选项
Object.values(radioGroups).forEach(group => {
if (group.length > 0) {
group[0].checked = true;
}
});
console.log("[自动填写] 已选择所有单选题的第一个选项");
}
// 填写所有多选题(选择前两个选项)
function fillAllCheckboxQuestions() {
const checkboxGroups = {};
// 分组收集所有多选按钮
document.querySelectorAll('input[type="checkbox"]').forEach(checkbox => {
const name = checkbox.name;
if (!checkboxGroups[name]) {
checkboxGroups[name] = [];
}
checkboxGroups[name].push(checkbox);
});
// 为每组选择前两个选项
Object.values(checkboxGroups).forEach(group => {
if (group.length >= 2) {
group[0].checked = true;
group[1].checked = true;
} else if (group.length === 1) {
group[0].checked = true;
}
});
console.log("[自动填写] 已选择所有多选题的前两个选项");
}
// 填写建议内容
function fillSuggestion() {
const q15Input = document.getElementById('q15_1');
if (q15Input) {
q15Input.value = config.suggestionText;
console.log(`[自动填写] 已填写建议内容: ${config.suggestionText}`);
} else {
console.log("[自动填写] 未找到建议输入框");
}
}
// 显示完成通知
function showCompletionNotice() {
const notice = document.createElement('div');
notice.style = `
position: fixed;
top: 20px;
right: 20px;
padding: 15px;
background: #4CAF50;
color: white;
border-radius: 5px;
z-index: 9999;
box-shadow: 0 2px 10px rgba(0,0,0,0.2);
font-family: Arial, sans-serif;
`;
notice.innerHTML = `
自动填写完成!
请检查后提交问卷
`;
document.body.appendChild(notice);
// 5秒后自动消失
setTimeout(() => {
notice.style.opacity = '0';
setTimeout(() => notice.remove(), 500);
}, 5000);
}
// 启动脚本
main();
})();