// ==UserScript== // @name 文理考试工商企业 // @namespace https://github.com/scriptscat // @version 1.3 // @description 自动回答市场营销考试题目,修复多选题选择逻辑 // @author ScriptCat // @match *://*beeouc.com/* // @grant none // @run-at document-idle // ==/UserScript== (function() { 'use strict'; // === 市场营销题库 - 按题型分类 === const questionDatabase = { // 单选题题库 "single": { "市场营销的核心是": "B", "毛泽东思想活的灵魂不包括( )": "D", "中国新民主主义革命的正确道路是( )": "B", "邓小平理论的首要基本问题是( )": "A", "\"三个代表\" 重要思想的核心是( )": "D", "科学发展观的第一要义是( )": "B", "新时代中国特色社会主义思想的核心要义是( )": "A", "毛泽东思想被确立为党的指导思想是在( )": "B", "我国进入社会主义初级阶段的标志是( )": "C", "改革开放的开端是( )": "C", "社会主义的根本任务是( )": "A", "我国的根本政治制度是( )": "B", "毛泽东提出的正确处理社会主义社会两类不同性质矛盾的学说,两类矛盾是指( )": "A", "中国共产党的根本宗旨是( )": "A", "科学发展观的核心是( )": "B", "下列选项中,不属于市场营销宏观环境的是": "B", "企业通过市场调研,识别消费者未被满足的需求,进而开发新产品的策略属于": "D", "产品生命周期中,销量增长最快、利润达到峰值的阶段是": "B", "下列促销方式中,属于人员推销的是": "B", "市场细分的核心是": "B", "品牌中可以被识别但不能用语言表达的部分,如标志、符号等,称为": "B", "企业利用微信、抖音等平台开展的营销活动属于": "B", "下列选项中,不属于产品整体概念的是": "D", "企业根据消费者购买数量给予一定折扣的定价策略是": "B", "下列选项中,属于水平分销渠道冲突的是": "C", "促销组合中,以建立品牌认知、提升品牌形象为主要目的的促销方式是": "C", "企业选择一个或几个细分市场作为目标市场,集中资源满足其需求的策略是": "C", "下列选项中,不属于消费者市场购买行为影响因素的是": "C", "产品组合的宽度是指": "A", "我国国防的根本目的是": "A", "人力资源管理的核心职能是( )": "B", "下列选项中,不属于人力资源规划内容的是( )": "D", "我国第一部诗歌总集是( )": "B", "下列作品中,属于儒家经典 \"四书\" 之一的是( )": "C", "唐代诗人中,被称为 \"诗仙\" 的是( )": "B", "《史记》的作者是( )": "C", "下列不属于唐宋八大家的是( )": "D", "鲁迅的第一篇白话小说是( )": "C", "下列作品中,属于巴金 \"激流三部曲\" 的是( )": "D", "下列文学作品与作者对应有误的一项是( )": "C", "诗句 \"但愿人长久,千里共婵娟\" 出自( )的《水调歌头・明月几时有》": "A", "下列修辞手法中,\"忽如一夜春风来,千树万树梨花开\" 使用的是( )": "A", "文言文《劝学》的作者是( )": "C", "下列作品中,属于茅盾的代表作是( )": "A", "唐代边塞诗派的代表诗人不包括( )": "D", "\"落霞与孤鹜齐飞,秋水共长天一色\" 出自( )的《滕王阁序》": "A", "下列不属于朱自清散文作品的是( )": "D", "企业招聘中,用于考察应聘者实际工作能力的测试方法是( )": "B", "员工培训中,旨在提升员工岗位必备技能的培训类型是( )": "B", "绩效管理中,将员工绩效与组织目标直接挂钩的考核方法是( )": "B", "下列选项中,不属于薪酬构成部分的是( )": "C", "企业与员工签订劳动合同的核心目的是( )": "A", "人力资源管理中,\"人岗匹配\" 的核心是( )": "A", "下列招聘渠道中,适合招聘高层管理人才的是( )": "C", "员工培训效果评估中,用于衡量员工培训后工作行为改变的是( )": "C", "薪酬管理的基本原则不包括( )": "D", "人力资源规划的首要步骤是( )": "B", "企业对新员工进行的入职培训,其主要目的是( )": "B", "绩效管理循环的最后一个环节是( )": "D", "下列选项中,属于间接薪酬的是( )": "C", "下列选项中,不属于我国国防类型的是": "B", "毛泽东军事思想的核心是": "A", "我国的最高军事领导机关是": "A", "下列军事技术中,属于精确制导技术的是": "B", "现代战争的主要作战样式不包括": "C", "我国兵役制度的主体是": "A", "下列选项中,不属于信息化战争特点的是": "C", "国防动员的核心是": "A", "孙子兵法提出的 '百战不殆' 的前提是": "A", "我国的国防教育日定为每年 9 月的": "C", "下列选项中,属于战略威慑力量的是": "C", "军事思想的核心内容是": "A", "我国奉行的国防政策是": "B", "新时代中国特色社会主义的总任务是( )": "A", "我国当前经济发展的基本特征是( )": "A", "全面建设社会主义现代化国家的战略安排中,到( )年基本实现社会主义现代化": "B", "我国外交政策的基本准则是( )": "B", "乡村振兴战略的总要求不包括( )": "D", "高质量发展的首要任务是( )": "B", "中国特色大国外交要推动构建( )": "A", "全面深化改革的总目标是完善和发展中国特色社会主义制度、推进( )": "B", "我国生态文明建设的核心是( )": "A", "全过程人民民主的本质和核心是( )": "A", "共建 \"一带一路\" 的核心原则是( )": "A", "我国就业优先战略的核心是( )": "D", "新时代党的建设的总要求中,要把( )摆在首位": "B", "我国社会保障体系的核心是( )": "A", "全球发展倡议的核心是( )": "B", "习近平新时代中国特色社会主义思想的核心内容不包括( )": "D", "中国式现代化的本质特征是( )": "B", "习近平新时代中国特色社会主义思想的世界观和方法论集中体现为( )": "C", "中国特色社会主义最本质的特征是( )": "C", "新时代我国社会的主要矛盾是( )": "C", "全面深化改革的总目标是( )": "B", "中国式现代化的根本方向由( )决定": "C", "社会主义基本经济制度的基础是( )": "A", "全面推进依法治国的总目标是( )": "C", "新时代坚持和发展中国特色社会主义的基本方略共有( )条": "C", "中国式现代化是( )领导的社会主义现代化": "B", "\"六个必须坚持\" 中,体现辩证唯物论根本要求的是( )": "C", "党在新时代的强军目标是建设一支( )的人民军队": "A", "中国特色大国外交的总目标是( )": "C", "解决台湾问题、实现祖国完全统一的基本方针是( )": "A", "信息化战争中,决定战争胜负的关键因素是": "C" }, // 多选题题库 - 答案格式:ABCD "multiple": { "市场营销的核心职能包括": "ABCD", "毛泽东思想的科学内涵包括( )": "ABCD", "邓小平理论的主要内容包括( )": "ABCD", "\"三个代表\" 重要思想的主要内容包括( )": "ABC", "科学发展观的基本要求包括( )": "ABC", "中国特色社会主义道路的内涵包括( )": "ABCD", "社会主义核心价值观的基本内容包括( )": "ABC", "我国的基本政治制度包括( )": "ACD", "毛泽东思想关于社会主义建设的重要思想包括( )": "ABC", "全面深化改革的总目标是( )": "AB", "中国特色社会主义理论体系包括( )": "BCD", "消费者市场的购买行为类型包括": "ACD", "产品生命周期成熟期的营销策略包括": "ABD", "影响企业定价的因素包括": "ABC", "分销渠道的功能包括": "ABCD", "促销组合的构成要素包括": "ABCD", "市场细分的常用标准包括": "ABCD", "品牌的作用包括": "ABC", "人力资源管理的基本职能包括( )": "ABCD", "下列作品中,属于李白的代表作有( )": "ABC", "唐宋八大家中,属于宋代的有( )": "ABCD", "下列属于鲁迅小说集的有( )": "ABC", "下列修辞手法中,属于常见的积极修辞的有( )": "ABCD", "下列属于茅盾 \"农村三部曲\" 的有( )": "ABC", "下列作品中,属于巴金的散文作品有( )": "AB", "下列属于唐代山水田园诗派的代表诗人有( )": "AB", "下列属于曹禺的戏剧作品有( )": "ABCD", "下列属于文言文常用虚词的有( )": "ABCD", "下列属于朱自清散文特点的有( )": "ABCD", "企业招聘的基本流程包括( )": "ABCD", "影响人力资源需求预测的因素包括( )": "ABC", "员工培训的主要类型包括( )": "ABC", "绩效管理的主要环节包括( )": "ABCD", "薪酬的构成部分包括( )": "ABCD", "劳动关系的构成要素包括( )": "ABD", "岗位分析的主要成果包括( )": "AB", "招聘渠道的主要类型包括( )": "ABCD", "培训效果评估的层次包括( )": "ABCD", "新媒体营销的主要特点包括": "ABC", "产品延伸策略包括": "ABC", "我国国防的基本特征包括": "ABCD", "毛泽东军事思想的主要内容包括": "ABCD", "现代国防的类型包括": "ABCD", "信息化战争的主要特点有": "ABCD", "国防法规的主要作用包括": "ABCD", "人民战争的基本特征包括": "ABC", "战略环境的主要构成要素包括": "ABCD", "我国国防教育的主要内容包括": "ABCD", "现代作战理论的主要内容包括": "ABCD", "新时代坚持和发展中国特色社会主义的基本方略包括( )": "ABC", "我国经济高质量发展的内涵包括( )": "ABC", "全过程人民民主的重要形式包括( )": "ABCD", "共建 \"一带一路\" 的主要合作领域有( )": "ABC", "我国生态文明建设的基本国策是( )": "AB", "全面推进依法治国的总目标是( )": "AB", "乡村振兴战略的重点任务包括( )": "ABC", "我国外交政策的宗旨是( )": "AB", "新时代党的建设的主要内容包括( )": "ABC", "我国社会保障体系的组成部分有( )": "ABC", "我国兵役制度的特点包括": "ABC", "习近平新时代中国特色社会主义思想的主要内容包括( )": "ABC", "中国式现代化的中国特色包括( )": "ABCD", "中国特色社会主义制度的最大优势包括( )": "AB", "全面建设社会主义现代化强国的 \"两步走\" 战略安排是( )": "AB", "社会主义核心价值体系的基本内容包括( )": "ABC", "生态文明建设的基本要求包括( )": "ABC", "新时代党的建设总要求强调要坚持和加强党的全面领导,坚持党要管党、全面从严治党,以( )为主线": "AB", "我国外交政策的基本原则包括( )": "ABCD", "共同富裕的实现路径包括( )": "ABC" }, // 填空题题库 "fill": { "市场营销的核心是满足消费者": "需求", "马克思主义中国化的第一次历史性飞跃理论成果是________。": "毛泽东思想", "毛泽东思想活的灵魂包括实事求是、群众路线和________。": "独立自主", "邓小平理论围绕的首要基本问题是________、怎样建设社会主义。": "什么是社会主义", "\"三个代表\" 重要思想的本质是立党为公、________。": "执政为民", "科学发展观的核心是________,基本要求是全面协调可持续。": "以人为本", "新时代中国特色社会主义思想的核心要义是坚持和发展________。": "中国特色社会主义", "中国特色社会主义事业总体布局是 \"________\",战略布局是 \"四个全面\"。": "五位一体", "新时代我国社会的主要矛盾是人民日益增长的美好生活需要和________之间的矛盾。": "不平衡不充分的发展", "社会主义的根本任务是解放和________生产力。": "发展", "中国特色社会主义最本质的特征是________。": "中国共产党领导", "《诗经》按内容分为 \"风、雅、颂\" 三部分,其中________是各地的民间歌谣,最具现实主义色彩。": "风", "李白的诗歌风格豪放飘逸、充满浪漫主义色彩,其代表作《蜀道难》中 \"蜀道之难,难于上青天\" 一句,运用________手法突出蜀道的艰险。": "夸张", "司马迁所著《史记》是我国第一部( )通史,被鲁迅誉为 \"史家之绝唱,无韵之《离骚》\"。": "纪传体", "唐宋八大家中,________是唐代古文运动的倡导者,主张 \"文以载道\",代表作有《师说》。": "韩愈", "朱自清的散文《背影》以( )为线索,通过描写父亲车站送别的细节,抒发了深沉的父子之情。": "背影", "曹禺的戏剧《雷雨》以 20 世纪 20 年代中国社会为背景,塑造了________、繁漪等经典人物形象,揭露了封建家庭的腐朽与罪恶。": "周朴园", "文言文《劝学》中 \"故不积跬步,无以至千里;不积小流,无以成江海\" 一句,强调了( )的重要性。": "积累", "\"落霞与孤鹜齐飞,秋水共长天一色\" 出自唐代诗人王勃的《( )》,是千古传诵的名句。": "滕王阁序", "老舍的代表作《骆驼祥子》以主人公________的三起三落为主线,反映了旧中国城市底层人民的悲惨命运。": "祥子", "沈从文的《边城》以( )为背景,描绘了湘西地区淳朴的民风和纯真的爱情,充满了乡土气息。": "湘西", "市场营销宏观环境包括政治法律、经济、社会文化和": "技术", "产品生命周期中,销量增长最快、利润达到峰值的阶段是": "成长", "企业为新产品制定低价以快速占领市场的定价策略是": "渗透", "生产者直接将产品销售给消费者的分销渠道称为": "直接", "促销组合的四大构成要素包括广告、销售促进、公共关系和": "人员", "品牌中可以被识别但不能用语言表达的部分,如标志、符号等,称为": "品牌标志", "企业利用微信、抖音等平台开展的营销活动属于": "新媒体", "同一区域内同级别零售商之间的冲突,属于": "水平", "市场细分的常用标准包括地理、人口、心理和": "行为", "国防的根本目的是维护国家主权、安全和": "发展", "我国国防属于": "自卫","人力资源管理的核心职能是________,通过它实现员工绩效与组织目标的联动。": "绩效管理", "人力资源规划的首要步骤是明确组织________目标,为后续规划奠定基础。": "战略", "企业招聘中,________测试通过模拟实际工作场景考察应聘者的实操能力。": "情景模拟", "员工培训中,旨在提升岗位必备专业能力的培训类型是________培训。": "技能", "薪酬的构成包括基本工资、绩效奖金、津贴补贴和________。": "员工福利", "企业与员工签订劳动合同的核心目的是明确双方的________和义务。": "权利", "人力资源管理中,\"人岗匹配\" 的核心是员工________与岗位要求相契合。": "能力", "适合招聘高层管理人才的专业招聘渠道是________公司。": "猎头", "培训效果评估中,衡量员工培训后工作行为改变的是________评估。": "行为", "薪酬管理的基本原则包括公平性、激励性和________性。": "合法", "毛泽东军事思想的核心是": "人民战争", "我国的最高军事领导机关是": "中央", "信息化战争的核心要素是": "信息", "国防动员的主体和核心是": "武装", "我国领土的最南端是": "曾母", "现代国防的核心是": "综合", "国防法规体系的核心是《中华人民共和国": "国防", "新时代中国特色社会主义的总任务是实现社会主义现代化和________。": "中华民族伟大复兴", "我国当前经济发展的基本特征是由高速增长阶段转向________阶段。": "高质量发展", "全面建设社会主义现代化国家的战略安排中,到 2035 年基本实现________。": "社会主义现代化", "乡村振兴战略的总要求包括产业兴旺、生态宜居、乡风文明、治理有效和________。": "生活富裕", "解决台湾问题、实现祖国完全统一的基本方针是 \"________、一国两制\"。": "和平统一", "新时代党的建设的总要求中,要把________摆在首位。": "政治建设", "我国生态文明建设的核心是坚持________和谐共生。": "人与自然", "全过程人民民主的本质和核心是________。": "人民当家作主", "全球发展倡议的核心是推动________。": "共同发展", "我国社会保障体系的核心是________。": "社会保险", "习近平新时代中国特色社会主义思想是当代中国马克思主义、________马克思主义。": "二十一世纪", "概括习近平新时代中国特色社会主义思想主要内容的 \"十个明确\"\"十四个坚持\"\"十三个方面成就\",必须长期坚持并________。": "不断丰富发展", "中国式现代化的本质要求首要内容是坚持________领导。": "中国共产党", "习近平新时代中国特色社会主义思想的世界观和方法论集中体现为 \"________\"。": "六个必须坚持", "全面建设社会主义现代化国家的战略安排分为________步走。": "两", "中国特色社会主义事业总体布局是 \"________\"。": "五位一体", "新时代坚持和发展中国特色社会主义的基本方略共有________条。": "十四", "中国式现代化是我们党领导全国各族人民在长期探索和实践中取得的________成果。": "重大", "全面深化改革的总目标是完善和发展中国特色社会主义制度、推进国家________和治理能力现代化。": "治理体系", "中国特色大国外交要推动构建________命运共同体。": "人类", "信息化战争的战争空间呈现": "多维", }, // 判断题题库 "judge": { "市场营销的核心是推销产品,扩大市场份额": "×", "毛泽东思想是马克思列宁主义在中国的创造性运用和发展。": "√", "中国新民主主义革命的正确道路是城市包围农村、武装夺取政权。": "×", "科学发展观的第一要义是全面协调可持续。": "×", "党的七大把毛泽东思想确立为党的指导思想。": "√", "中华人民共和国成立标志着我国进入社会主义初级阶段。": "×", "人民代表大会制度是我国的基本政治制度之一。": "×", "社会主义核心价值观国家层面的价值目标是自由、平等、公正、法治。": "×", "中国特色社会主义理论体系包括毛泽东思想、邓小平理论等成果。": "×", "新时代党的建设总要求以加强党的长期执政能力建设为主线。": "√", "全面深化改革的总目标是实现共同富裕。": "×", "竞争者环境属于市场营销微观环境,而非宏观环境": "√", "产品生命周期成熟期的销量增长缓慢,利润开始下滑": "√", "直接分销渠道是指生产者通过中间商将产品销售给消费者": "×", "商场导购推销属于人员推销的一种形式": "√", "市场细分的目的是将整体市场划分为多个子市场,无需考虑需求差异": "×", "品牌标志是品牌中可以用语言表达的部分,如品牌名称": "×", "新媒体营销具有互动性强、传播速度快、精准定位的特点": "√", "产品组合的宽度是指每条产品线包含的产品项目数量": "×", "数量折扣是企业根据消费者付款时间给予的价格优惠": "×", "国防的核心任务是捍卫国家主权、安全和发展利益,抵御外部侵略": "√", "我国奉行防御性国防政策,绝不搞霸权主义和扩张主义": "√", "《战争论》是我国古代军事思想的经典代表作之一": "×", "信息化战争的作战节奏相比传统战争更为缓慢,消耗更小": "×", "人力资源规划的核心内容包括人员供需预测和薪酬体系设计。( )": "×", "情景模拟测试主要用于考察应聘者的理论知识掌握程度。( )": "×", "入职培训的核心目的是帮助新员工熟悉企业文化与岗位职责。( )": "√", "绩效管理循环的最后一个环节是绩效评估。( )": "×", "社会保险属于薪酬构成中的间接薪酬。( )": "×", "内部招聘是招聘高层管理人才的最优渠道。( )": "×", "培训效果的结果评估主要衡量员工培训后的工作行为改变。( )": "×", "薪酬管理应遵循公平性、激励性和合法性原则。( )": "√", "劳动争议的解决方式包括协商、调解、仲裁和诉讼。( )": "√", "岗位分析的核心目的是制定合理的薪酬标准。( )": "×", "《楚辞》是我国第一部浪漫主义诗歌总集,主要作者是屈原,其代表作《离骚》开创了 \"骚体\" 诗的先河。( )": "√", "唐宋八大家包括唐代的韩愈、柳宗元和宋代的苏轼、苏辙、欧阳修、王安石、曾巩、李白。( )": "×", "鲁迅的《阿 Q 正传》塑造了阿 Q 这一典型形象,深刻批判了国民的 \"精神胜利法\"。( )": "√", "王维的诗歌兼具山水田园诗和边塞诗的风格,被称为 \"诗佛\",其作品 \"诗中有画,画中有诗\"。( )": "√", "《论语》是孔子及其弟子的言行录,由孔子亲自编写,是儒家思想的重要典籍。( )": "×", "茅盾的《子夜》以 20 世纪 30 年代的上海为背景,展现了民族资本家吴荪甫的奋斗与失败。( )": "√", "戴望舒是 \"新月派\" 诗人的代表,其代表作《雨巷》被誉为 \"雨巷诗人\" 的经典之作。( )": "×", "曹禺的《日出》通过描写都市生活的黑暗与腐朽,表达了对社会现实的批判。( )": "√", "杜甫的诗歌被称为 \"诗史\",其《登高》一诗被誉为 \"七言律诗第一\",风格沉郁顿挫。( )": "√", "\"问君能有几多愁?恰似一江春水向东流\" 出自李煜的《虞美人》,运用了设问和比喻的修辞手法。( )": "√", "人民战争的基本特征包括正义性、群众性和组织性": "√", "中央军事委员会是我国的最高军事领导机关,统一领导全国武装力量": "√", "国防动员仅包括武装力量动员和经济动员,不涉及其他领域": "×", "我国国防教育的主要内容包括国防理论、历史、法规和技能教育": "√", "现代军事高技术领域不包括信息技术,核心是传统制造技术": "×", "战略环境中,周边环境对国家安全的影响最为直接和关键": "√", "高质量发展是全面建设社会主义现代化国家的首要任务。": "√", "我国外交政策的宗旨是维护世界和平、促进共同发展。": "√", "乡村振兴战略的重点是优先发展城市。": "×", "全过程人民民主包括民主选举、民主协商、民主决策等多种形式。": "√", "实现共同富裕要坚持按劳分配为主体、多种分配方式并存。": "√", "全球安全倡议倡导共同安全、综合安全、合作安全、可持续安全。": "√", "新时代爱国主义教育要坚持爱国和爱党、爱社会主义相统一。": "√", "我国生态文明建设的基本国策是节约资源和保护环境。": "√", "行政机关是全过程人民民主的唯一实践主体。": "×", "习近平新时代中国特色社会主义思想是中华文化和中国精神的时代精华。": "√", "中国式现代化是不需要党的领导的现代化。": "×", "坚持守正创新是 \"六个必须坚持\" 的重要组成部分。": "√", "党的十八大以来,我们党成功推进和拓展了中国式现代化。": "√", "全面依法治国总目标是建设中国特色社会主义法治体系。": "×", "坚持问题导向体现了马克思主义认识论和矛盾论的根本要求。": "√", "中国式现代化是其他国家现代化的简单模仿。": "×", "坚持胸怀天下要求我们聚焦国内问题,无需关注国际事务。": "×", "中国特色社会主义最本质的特征是中国共产党领导。": "√", "系统观念要求用孤立静止的观点认识事物。": "×", "我国社会保障体系不包括社会优抚。": "×" } }; // === 答题状态记录 === let stats = { total: 0, answered: 0, skipped: 0, correct: 0, incorrect: 0 }; // === 主函数:自动答题 === async function autoAnswer() { try { // 获取当前题目信息 const questionStem = document.querySelector('.question-stem'); const questionTypeEl = document.querySelector('.question-type'); if (!questionStem || !questionTypeEl) { console.log("未找到题目元素,可能不在答题页面"); return false; } let questionText = questionStem.textContent.trim(); const questionType = questionTypeEl.textContent.trim(); console.log(`题目类型: ${questionType}`); console.log(`题目内容: ${questionText}`); // 清理题目文本,便于匹配 const cleanQuestionText = cleanText(questionText); // 根据题型确定题库和匹配逻辑 let result = false; if (questionType.includes('单选题')) { result = await answerSingleChoice(cleanQuestionText, questionText); } else if (questionType.includes('多选题')) { result = await answerMultipleChoice(cleanQuestionText, questionText); } else if (questionType.includes('填空题')) { result = await answerFillInBlank(cleanQuestionText, questionText); } else if (questionType.includes('判断题')) { result = await answerTrueFalse(cleanQuestionText, questionText); } else { console.log("未知题型,跳过"); return false; } // 更新统计 if (result) { stats.answered++; stats.correct++; stats.total++; console.log("✅ 答题成功"); showNotification('✅ 答题成功', 'success'); } else { stats.skipped++; stats.total++; console.log("❌ 答题失败,已跳过"); showNotification('❌ 答题失败,已跳过', 'warning'); } updateStatsDisplay(); return result; } catch (error) { console.error("答题过程中出现错误:", error); return false; } } // === 各题型答题函数 === // 单选题 async function answerSingleChoice(cleanQuestionText, originalQuestionText) { console.log("处理单选题..."); // 首先尝试精确匹配 for (const [dbQuestion, answer] of Object.entries(questionDatabase.single)) { const cleanDbQuestion = cleanText(dbQuestion); if (cleanQuestionText.includes(cleanDbQuestion) || cleanDbQuestion.includes(cleanQuestionText)) { console.log(`精确匹配成功,答案: ${answer}`); return await selectSingleChoice(answer, originalQuestionText); } } // 如果精确匹配失败,尝试关键词匹配 const keywords = extractKeywords(cleanQuestionText); if (keywords.length > 0) { for (const [dbQuestion, answer] of Object.entries(questionDatabase.single)) { const cleanDbQuestion = cleanText(dbQuestion); const dbKeywords = extractKeywords(cleanDbQuestion); // 计算关键词重叠度 const overlap = calculateKeywordOverlap(keywords, dbKeywords); if (overlap > 0.6) { // 超过60%的关键词匹配 console.log(`关键词匹配成功,重叠度: ${overlap.toFixed(2)},答案: ${answer}`); return await selectSingleChoice(answer, originalQuestionText); } } } // 如果还是没有匹配到,尝试相似度匹配 for (const [dbQuestion, answer] of Object.entries(questionDatabase.single)) { const cleanDbQuestion = cleanText(dbQuestion); const similarity = calculateTextSimilarity(cleanQuestionText, cleanDbQuestion); if (similarity > 0.7) { console.log(`相似度匹配成功,相似度: ${similarity.toFixed(2)},答案: ${answer}`); return await selectSingleChoice(answer, originalQuestionText); } } console.log("未找到匹配的单选题答案"); return false; } // 多选题 - 修复版 async function answerMultipleChoice(cleanQuestionText, originalQuestionText) { console.log("处理多选题..."); // 首先尝试精确匹配 for (const [dbQuestion, answer] of Object.entries(questionDatabase.multiple)) { const cleanDbQuestion = cleanText(dbQuestion); if (cleanQuestionText.includes(cleanDbQuestion) || cleanDbQuestion.includes(cleanQuestionText)) { console.log(`精确匹配成功,答案: ${answer}`); return await selectMultipleChoice(answer, originalQuestionText); } } // 关键词匹配 const keywords = extractKeywords(cleanQuestionText); if (keywords.length > 0) { for (const [dbQuestion, answer] of Object.entries(questionDatabase.multiple)) { const cleanDbQuestion = cleanText(dbQuestion); const dbKeywords = extractKeywords(cleanDbQuestion); const overlap = calculateKeywordOverlap(keywords, dbKeywords); if (overlap > 0.6) { console.log(`关键词匹配成功,重叠度: ${overlap.toFixed(2)},答案: ${answer}`); return await selectMultipleChoice(answer, originalQuestionText); } } } console.log("未找到匹配的多选题答案"); return false; } // 填空题 async function answerFillInBlank(cleanQuestionText, originalQuestionText) { console.log("处理填空题..."); // 首先尝试精确匹配 for (const [dbQuestion, answer] of Object.entries(questionDatabase.fill)) { const cleanDbQuestion = cleanText(dbQuestion); if (cleanQuestionText.includes(cleanDbQuestion) || cleanDbQuestion.includes(cleanQuestionText)) { console.log(`精确匹配成功,答案: ${answer}`); return await fillInBlank(answer); } } // 关键词匹配 const keywords = extractKeywords(cleanQuestionText); if (keywords.length > 0) { for (const [dbQuestion, answer] of Object.entries(questionDatabase.fill)) { const cleanDbQuestion = cleanText(dbQuestion); const dbKeywords = extractKeywords(cleanDbQuestion); const overlap = calculateKeywordOverlap(keywords, dbKeywords); if (overlap > 0.6) { console.log(`关键词匹配成功,重叠度: ${overlap.toFixed(2)},答案: ${answer}`); return await fillInBlank(answer); } } } console.log("未找到匹配的填空题答案"); return false; } // 判断题 async function answerTrueFalse(cleanQuestionText, originalQuestionText) { console.log("处理判断题..."); // 首先尝试精确匹配 for (const [dbQuestion, answer] of Object.entries(questionDatabase.judge)) { const cleanDbQuestion = cleanText(dbQuestion); if (cleanQuestionText.includes(cleanDbQuestion) || cleanDbQuestion.includes(cleanQuestionText)) { console.log(`精确匹配成功,答案: ${answer}`); return await selectTrueFalse(answer); } } // 关键词匹配 const keywords = extractKeywords(cleanQuestionText); if (keywords.length > 0) { for (const [dbQuestion, answer] of Object.entries(questionDatabase.judge)) { const cleanDbQuestion = cleanText(dbQuestion); const dbKeywords = extractKeywords(cleanDbQuestion); const overlap = calculateKeywordOverlap(keywords, dbKeywords); if (overlap > 0.6) { console.log(`关键词匹配成功,重叠度: ${overlap.toFixed(2)},答案: ${answer}`); return await selectTrueFalse(answer); } } } console.log("未找到匹配的判断题答案"); return false; } // === 各题型选择函数 === // 单选题选择 async function selectSingleChoice(answer, questionText) { const options = document.querySelectorAll('.el-radio-group .el-radio'); if (options.length === 0) { console.log("未找到单选题选项"); return false; } for (const option of options) { const optionText = option.textContent.trim(); const optionLetter = optionText.charAt(0); if (optionLetter === answer) { const radioInput = option.querySelector('input[type="radio"]'); if (radioInput) { // 先检查是否已经选中 if (option.classList.contains('is-checked')) { console.log(`选项 ${optionLetter} 已被选中`); return true; } // 选择正确答案 radioInput.click(); // 触发事件 radioInput.dispatchEvent(new Event('change', { bubbles: true })); console.log(`已选择: ${optionText}`); return true; } } } console.log(`未找到匹配的选项,正确答案应为: ${answer}`); return false; } // 多选题选择 - 修复版:正确处理已选中的选项 async function selectMultipleChoice(answer, questionText) { const options = document.querySelectorAll('.el-checkbox-group .el-checkbox'); if (options.length === 0) { console.log("未找到多选题选项"); return false; } const answersToSelect = answer.split(''); console.log(`正确答案应为: ${answersToSelect}`); // 收集选项信息 const optionInfos = []; options.forEach(option => { const optionText = option.textContent.trim(); const optionLetter = optionText.charAt(0); const isSelected = option.classList.contains('is-checked'); const shouldBeSelected = answersToSelect.includes(optionLetter); optionInfos.push({ element: option, letter: optionLetter, text: optionText, isSelected: isSelected, shouldBeSelected: shouldBeSelected }); console.log(`选项 ${optionLetter}: 当前状态=${isSelected}, 应为=${shouldBeSelected}`); }); // 检查是否需要调整 let needAdjustment = false; for (const info of optionInfos) { if (info.isSelected !== info.shouldBeSelected) { needAdjustment = true; break; } } if (!needAdjustment) { console.log("多选题选择状态正确,无需调整"); return true; } // 需要调整选择状态 console.log("需要调整多选题选择状态"); // 调整选择状态 for (const info of optionInfos) { const { element, isSelected, shouldBeSelected } = info; // 如果当前状态与目标状态不一致,点击切换 if (isSelected !== shouldBeSelected) { const checkbox = element.querySelector('input[type="checkbox"]'); if (checkbox) { console.log(`${shouldBeSelected ? '选中' : '取消'}选项 ${info.letter}`); // 模拟点击 checkbox.click(); // 等待DOM更新 await sleep(100); } } } // 等待状态稳定 await sleep(300); // 验证最终结果 let correctCount = 0; options.forEach(option => { const optionText = option.textContent.trim(); const optionLetter = optionText.charAt(0); const isSelected = option.classList.contains('is-checked'); const shouldBeSelected = answersToSelect.includes(optionLetter); if (isSelected === shouldBeSelected) { correctCount++; } else { console.log(`选项 ${optionLetter} 状态错误: 选中=${isSelected}, 应为=${shouldBeSelected}`); } }); const allCorrect = correctCount === options.length; console.log(`验证结果: ${allCorrect ? '全部正确' : '有错误'} (${correctCount}/${options.length})`); return allCorrect; } // 填空题填写 async function fillInBlank(answer) { const input = document.querySelector('.el-input__inner') || document.querySelector('input[type="text"]'); if (input) { // 清空现有内容 input.value = ''; // 触发输入事件 input.dispatchEvent(new Event('input', { bubbles: true })); // 填入答案 input.value = answer; // 再次触发输入事件 input.dispatchEvent(new Event('input', { bubbles: true })); input.dispatchEvent(new Event('change', { bubbles: true })); console.log(`已填写: ${answer}`); return true; } console.log("未找到填空题输入框"); return false; } // 判断题选择 async function selectTrueFalse(answer) { const isTrue = answer === '√' || answer === '对' || answer === '正确'; const options = document.querySelectorAll('.el-radio-group .el-radio'); if (options.length === 0) { console.log("未找到判断题选项"); return false; } for (const option of options) { const optionText = option.textContent.trim(); const isOptionTrue = optionText.includes('正确') || optionText.includes('对'); if ((isTrue && isOptionTrue) || (!isTrue && !isOptionTrue)) { // 检查是否已经选中 if (option.classList.contains('is-checked')) { console.log(`选项 ${optionText} 已被选中`); return true; } const radioInput = option.querySelector('input[type="radio"]'); if (radioInput) { // 选择正确答案 radioInput.click(); // 触发事件 radioInput.dispatchEvent(new Event('change', { bubbles: true })); console.log(`已选择: ${optionText}`); return true; } } } console.log(`未找到匹配的选项,正确答案应为: ${isTrue ? '正确' : '错误'}`); return false; } // === 辅助函数 === // 清理文本 function cleanText(text) { return text .replace(/\s+/g, '') .replace(/\u200B/g, '') .replace(/(.*?)|\(.*?\)/g, '') .replace(/[、,,\.。]/g, ''); } // 提取关键词 function extractKeywords(text) { // 提取2个字符以上的中文词语 return text.match(/[\u4e00-\u9fa5]{2,}/g) || []; } // 计算关键词重叠度 function calculateKeywordOverlap(keywords1, keywords2) { if (keywords1.length === 0 || keywords2.length === 0) return 0; const set1 = new Set(keywords1); const set2 = new Set(keywords2); const intersection = new Set([...set1].filter(x => set2.has(x))); return intersection.size / Math.max(set1.size, set2.size); } // 计算文本相似度(简单版) function calculateTextSimilarity(text1, text2) { if (text1.length === 0 || text2.length === 0) return 0; // 使用最长公共子序列算法计算相似度 const m = text1.length; const n = text2.length; const dp = Array(m + 1).fill(0).map(() => Array(n + 1).fill(0)); for (let i = 1; i <= m; i++) { for (let j = 1; j <= n; j++) { if (text1[i - 1] === text2[j - 1]) { dp[i][j] = dp[i - 1][j - 1] + 1; } else { dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]); } } } const lcsLength = dp[m][n]; return lcsLength / Math.max(m, n); } // 睡眠函数(用于异步等待) function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } // === 控制面板 === function createControlPanel() { // 移除已存在的控制面板 const existingPanel = document.getElementById('answer-control-panel'); if (existingPanel) existingPanel.remove(); // 创建控制面板 const panel = document.createElement('div'); panel.id = 'answer-control-panel'; panel.style.cssText = ` position: fixed; top: 20px; right: 20px; background: rgba(255, 255, 255, 0.95); border: 2px solid #4CAF50; border-radius: 10px; padding: 15px; z-index: 9999; box-shadow: 0 4px 12px rgba(0,0,0,0.15); min-width: 250px; font-family: Arial, sans-serif; `; // 标题 const title = document.createElement('h3'); title.textContent = '文理工商企业答题'; title.style.cssText = ` margin: 0 0 15px 0; color: #4CAF50; text-align: center; border-bottom: 1px solid #eee; padding-bottom: 8px; `; // 统计信息 const statsDisplay = document.createElement('div'); statsDisplay.id = 'stats-display'; statsDisplay.style.cssText = ` margin-bottom: 15px; font-size: 14px; `; // 题库信息 const dbInfo = document.createElement('div'); dbInfo.id = 'db-info'; dbInfo.style.cssText = ` margin-bottom: 10px; font-size: 12px; color: #666; `; updateDBInfo(dbInfo); // 按钮容器 const buttonContainer = document.createElement('div'); buttonContainer.style.cssText = ` display: flex; flex-direction: column; gap: 8px; `; // 答题按钮 const answerBtn = createButton('回答当前题目', '#4CAF50', async () => { const result = await autoAnswer(); if (result) { showNotification('✅ 答题成功', 'success'); } else { showNotification('❌ 答题失败,已跳过', 'warning'); } }); // 自动答题按钮 const autoBtn = createButton('自动答题(所有)', '#2196F3', () => { if (confirm('确定要自动回答所有题目吗?这可能需要一些时间。')) { autoAnswerAll(); } }); // 重置统计按钮 const resetBtn = createButton('重置统计', '#FF9800', () => { stats = { total: 0, answered: 0, skipped: 0, correct: 0, incorrect: 0 }; updateStatsDisplay(); }); // 隐藏按钮 const hideBtn = createButton('隐藏面板', '#9E9E9E', () => { panel.style.display = 'none'; const showBtn = document.getElementById('show-panel-btn'); if (!showBtn) createShowButton(); }); // 添加到面板 buttonContainer.append(answerBtn, autoBtn, resetBtn, hideBtn); panel.append(title, statsDisplay, dbInfo, buttonContainer); document.body.appendChild(panel); updateStatsDisplay(); // 添加拖拽功能 makeDraggable(panel); return panel; } // 更新题库信息 function updateDBInfo(element) { const singleCount = Object.keys(questionDatabase.single).length; const multipleCount = Object.keys(questionDatabase.multiple).length; const fillCount = Object.keys(questionDatabase.fill).length; const judgeCount = Object.keys(questionDatabase.judge).length; const totalCount = singleCount + multipleCount + fillCount + judgeCount; element.innerHTML = `
题库信息:
单选题: ${singleCount}题
多选题: ${multipleCount}题
填空题: ${fillCount}题
判断题: ${judgeCount}题
总计: ${totalCount}题
`; } // 创建显示面板按钮(当面板隐藏时) function createShowButton() { const showBtn = document.createElement('button'); showBtn.id = 'show-panel-btn'; showBtn.textContent = '显示答题面板'; showBtn.style.cssText = ` position: fixed; top: 20px; right: 20px; background: #4CAF50; color: white; border: none; border-radius: 5px; padding: 10px 15px; z-index: 9998; cursor: pointer; font-size: 14px; `; showBtn.onclick = () => { showBtn.remove(); createControlPanel(); }; document.body.appendChild(showBtn); } // 创建按钮 function createButton(text, color, onClick) { const btn = document.createElement('button'); btn.textContent = text; btn.style.cssText = ` background: ${color}; color: white; border: none; border-radius: 5px; padding: 10px; cursor: pointer; font-size: 14px; transition: background 0.3s; `; btn.onmouseover = () => btn.style.background = darkenColor(color, 20); btn.onmouseout = () => btn.style.background = color; btn.onclick = onClick; return btn; } // 颜色变暗函数 function darkenColor(color, percent) { const num = parseInt(color.replace("#", ""), 16); const amt = Math.round(2.55 * percent); const R = (num >> 16) - amt; const G = (num >> 8 & 0x00FF) - amt; const B = (num & 0x0000FF) - amt; return "#" + ( 0x1000000 + (R < 255 ? R < 1 ? 0 : R : 255) * 0x10000 + (G < 255 ? G < 1 ? 0 : G : 255) * 0x100 + (B < 255 ? B < 1 ? 0 : B : 255) ).toString(16).slice(1); } // 更新统计显示 function updateStatsDisplay() { const display = document.getElementById('stats-display'); if (!display) return; const successRate = stats.answered > 0 ? Math.round((stats.correct / stats.answered) * 100) : 0; display.innerHTML = `
答题统计:
总题数: ${stats.total}
已答: ${stats.answered} (正确: ${stats.correct})
跳过: ${stats.skipped}
成功率: ${successRate}%
`; } // 显示通知 function showNotification(message, type) { // 移除现有通知 const existing = document.querySelector('.answer-notification'); if (existing) existing.remove(); const notification = document.createElement('div'); notification.className = 'answer-notification'; notification.textContent = message; notification.style.cssText = ` position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: ${type === 'success' ? '#4CAF50' : '#FF9800'}; color: white; padding: 15px 30px; border-radius: 5px; z-index: 10000; font-size: 16px; box-shadow: 0 4px 12px rgba(0,0,0,0.2); animation: fadeInOut 2s ease-in-out; `; // 添加动画样式 const style = document.createElement('style'); style.textContent = ` @keyframes fadeInOut { 0% { opacity: 0; transform: translate(-50%, -60%); } 15% { opacity: 1; transform: translate(-50%, -50%); } 85% { opacity: 1; transform: translate(-50%, -50%); } 100% { opacity: 0; transform: translate(-50%, -40%); } } `; document.head.appendChild(style); document.body.appendChild(notification); setTimeout(() => { if (notification.parentNode) { notification.remove(); } }, 2000); } // 拖拽功能 function makeDraggable(element) { let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; const dragMouseDown = (e) => { e = e || window.event; e.preventDefault(); pos3 = e.clientX; pos4 = e.clientY; document.onmouseup = closeDragElement; document.onmousemove = elementDrag; }; const elementDrag = (e) => { e = e || window.event; e.preventDefault(); pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; element.style.top = (element.offsetTop - pos2) + "px"; element.style.right = "auto"; element.style.left = (element.offsetLeft - pos1) + "px"; }; const closeDragElement = () => { document.onmouseup = null; document.onmousemove = null; }; element.onmousedown = dragMouseDown; } // === 自动连续答题 === async function autoAnswerAll() { let currentQuestion = 0; const maxQuestions = 45; // 最大尝试题数 const delay = 1500; // 每题延迟 console.log("🚀 开始自动答题..."); showNotification('开始自动答题...', 'success'); async function answerNext() { if (currentQuestion >= maxQuestions) { console.log("✅ 自动答题完成"); showNotification(`自动答题完成!共处理 ${stats.total} 题`, 'success'); return; } // 回答当前题目 await autoAnswer(); currentQuestion++; // 点击下一题 setTimeout(async () => { const nextBtn = document.querySelector('.question-footer button:not(.pre)'); if (nextBtn && nextBtn.textContent.includes('下一题')) { console.log(`点击下一题 (${currentQuestion}/${maxQuestions})`); nextBtn.click(); // 等待页面加载后继续 await sleep(delay); answerNext(); } else { console.log("未找到下一题按钮,可能已到最后一题"); showNotification('已到最后或未找到下一题按钮', 'warning'); } }, 800); } answerNext(); } // === 初始化 === function init() { console.log('市场营销答题助手(修复多选题版)已加载'); // 创建控制面板 setTimeout(() => { createControlPanel(); }, 2000); // 监听页面变化(针对SPA应用) let lastUrl = location.href; new MutationObserver(() => { const url = location.href; if (url !== lastUrl) { lastUrl = url; // 重新创建控制面板 setTimeout(() => { const panel = document.getElementById('answer-control-panel'); if (!panel) createControlPanel(); else updateStatsDisplay(); }, 1000); } }).observe(document, { subtree: true, childList: true }); // 添加键盘快捷键 document.addEventListener('keydown', (e) => { // Ctrl+Shift+A 回答当前题目 if (e.ctrlKey && e.shiftKey && e.key === 'A') { e.preventDefault(); autoAnswer(); } // Ctrl+Shift+S 自动答题所有 if (e.ctrlKey && e.shiftKey && e.key === 'S') { e.preventDefault(); autoAnswerAll(); } }); console.log('快捷键: Ctrl+Shift+A = 回答当前题目, Ctrl+Shift+S = 自动答题所有'); } // 等待页面加载完成后初始化 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();