Skip to content

Commit 002305c

Browse files
author
Taois
committed
feat: 优化脚本拉题逻辑
1 parent 8bb6a63 commit 002305c

File tree

2 files changed

+34
-9
lines changed

2 files changed

+34
-9
lines changed

public/monkey/huawei-answer.js

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,47 @@
11
function extractExamContentWithNumbers() {
22
const examContents = document.querySelectorAll('.exam-content');
33
let allText = '';
4+
const totalQuestions = examContents.length;
45

56
examContents.forEach((content, index) => {
67
const questionNumber = index + 1;
78
let questionType = '';
89

9-
// 根据题号确定题型
10-
if (questionNumber >= 1 && questionNumber <= 5) {
11-
questionType = '判断题';
12-
} else if (questionNumber >= 6 && questionNumber <= 15) {
13-
questionType = '单选题';
14-
} else if (questionNumber >= 16 && questionNumber <= 24) {
15-
questionType = '多选题';
10+
// 根据题目总数确定题型分配规则
11+
if (totalQuestions === 24) {
12+
// 24题模式:5道判断+10道单选+9道多选
13+
if (questionNumber >= 1 && questionNumber <= 5) {
14+
questionType = '判断题';
15+
} else if (questionNumber >= 6 && questionNumber <= 15) {
16+
questionType = '单选题';
17+
} else if (questionNumber >= 16 && questionNumber <= 24) {
18+
questionType = '多选题';
19+
}
20+
} else if (totalQuestions === 50) {
21+
// 50题模式:15道判断+20道单选+15道多选
22+
if (questionNumber >= 1 && questionNumber <= 15) {
23+
questionType = '判断题';
24+
} else if (questionNumber >= 16 && questionNumber <= 35) {
25+
questionType = '单选题';
26+
} else if (questionNumber >= 36 && questionNumber <= 50) {
27+
questionType = '多选题';
28+
}
29+
} else {
30+
// 其他情况,尝试根据选项类型自动判断
31+
const radioGroup = content.querySelector('.el-radio-group');
32+
const checkboxGroup = content.querySelector('.el-checkbox-group');
33+
34+
if (radioGroup) {
35+
questionType = '单选题';
36+
} else if (checkboxGroup) {
37+
questionType = '多选题';
38+
} else {
39+
questionType = '判断题';
40+
}
1641
}
1742

1843
// 添加题序标题
19-
const titleText = `${questionNumber}/24 Q ${questionType}`;
44+
const titleText = `${questionNumber}/${totalQuestions} Q ${questionType}`;
2045

2146
// 提取问题文本
2247
const questionElement = content.querySelector('.the-exam-page-html');

public/monkey/自定义指令集-道长.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
},
66
{
77
"name": "华为拉题",
8-
"code": "function extractExamContentWithNumbers() {\n const examContents = document.querySelectorAll('.exam-content');\n let allText = '';\n\n examContents.forEach((content, index) => {\n const questionNumber = index + 1;\n let questionType = '';\n\n // 根据题号确定题型\n if (questionNumber >= 1 && questionNumber <= 5) {\n questionType = '判断题';\n } else if (questionNumber >= 6 && questionNumber <= 15) {\n questionType = '单选题';\n } else if (questionNumber >= 16 && questionNumber <= 24) {\n questionType = '多选题';\n }\n\n // 添加题序标题\n const titleText = `${questionNumber}/24 Q ${questionType}`;\n\n // 提取问题文本\n const questionElement = content.querySelector('.the-exam-page-html');\n const questionText = questionElement ? questionElement.innerText.trim() : '';\n\n // 提取选项\n const optionsText = extractOptions(content);\n\n // 组合完整文本\n if (questionText || optionsText) {\n allText += titleText + '\\n';\n if (questionText) {\n allText += questionText + '\\n';\n }\n if (optionsText) {\n allText += optionsText + '\\n';\n }\n allText += '\\n'; // 题目间空行\n }\n });\n\n return allText;\n}\n\nfunction extractOptions(content) {\n let options = [];\n\n // 检查单选题选项\n const radioGroup = content.querySelector('.el-radio-group');\n if (radioGroup) {\n const radioOptions = radioGroup.querySelectorAll('.el-radio');\n radioOptions.forEach(radio => {\n const text = radio.innerText.trim();\n if (text) {\n options.push(text);\n }\n });\n }\n\n // 检查多选题选项\n const checkboxGroup = content.querySelector('.el-checkbox-group');\n if (checkboxGroup) {\n const checkboxOptions = checkboxGroup.querySelectorAll('.el-checkbox');\n checkboxOptions.forEach(checkbox => {\n const text = checkbox.innerText.trim();\n if (text) {\n options.push(text);\n }\n });\n }\n\n return options.join('\\n');\n}\n\n// 使用示例\nconst result = extractExamContentWithNumbers();\nconsole.log(result);\nconst askai = '接下来我在做微认证考试,时间有限,有判断题,单选题和多选题。你需要快速给我答案,减少废话,不需要给过多的解释,直接快速给到答案即可。以下这些题你拿去认真思考,最后给到我每一个题的答案,你的回答应该每一行文本前面带题号,后面是答案,一题占一行文本。多选题多个答案用|隔开。以下是问题和选项:\\n';\ncopyWithGreasemonkey(askai + result);"
8+
"code": "function extractExamContentWithNumbers() {\n const examContents = document.querySelectorAll('.exam-content');\n let allText = '';\n const totalQuestions = examContents.length;\n\n examContents.forEach((content, index) => {\n const questionNumber = index + 1;\n let questionType = '';\n\n // 根据题目总数确定题型分配规则\n if (totalQuestions === 24) {\n // 24题模式:5道判断+10道单选+9道多选\n if (questionNumber >= 1 && questionNumber <= 5) {\n questionType = '判断题';\n } else if (questionNumber >= 6 && questionNumber <= 15) {\n questionType = '单选题';\n } else if (questionNumber >= 16 && questionNumber <= 24) {\n questionType = '多选题';\n }\n } else if (totalQuestions === 50) {\n // 50题模式:15道判断+20道单选+15道多选\n if (questionNumber >= 1 && questionNumber <= 15) {\n questionType = '判断题';\n } else if (questionNumber >= 16 && questionNumber <= 35) {\n questionType = '单选题';\n } else if (questionNumber >= 36 && questionNumber <= 50) {\n questionType = '多选题';\n }\n } else {\n // 其他情况,尝试根据选项类型自动判断\n const radioGroup = content.querySelector('.el-radio-group');\n const checkboxGroup = content.querySelector('.el-checkbox-group');\n \n if (radioGroup) {\n questionType = '单选题';\n } else if (checkboxGroup) {\n questionType = '多选题';\n } else {\n questionType = '判断题';\n }\n }\n\n // 添加题序标题\n const titleText = `${questionNumber}/${totalQuestions} Q ${questionType}`;\n\n // 提取问题文本\n const questionElement = content.querySelector('.the-exam-page-html');\n const questionText = questionElement ? questionElement.innerText.trim() : '';\n\n // 提取选项\n const optionsText = extractOptions(content);\n\n // 组合完整文本\n if (questionText || optionsText) {\n allText += titleText + '\\n';\n if (questionText) {\n allText += questionText + '\\n';\n }\n if (optionsText) {\n allText += optionsText + '\\n';\n }\n allText += '\\n'; // 题目间空行\n }\n });\n\n return allText;\n}\n\nfunction extractOptions(content) {\n let options = [];\n\n // 检查单选题选项\n const radioGroup = content.querySelector('.el-radio-group');\n if (radioGroup) {\n const radioOptions = radioGroup.querySelectorAll('.el-radio');\n radioOptions.forEach(radio => {\n const text = radio.innerText.trim();\n if (text) {\n options.push(text);\n }\n });\n }\n\n // 检查多选题选项\n const checkboxGroup = content.querySelector('.el-checkbox-group');\n if (checkboxGroup) {\n const checkboxOptions = checkboxGroup.querySelectorAll('.el-checkbox');\n checkboxOptions.forEach(checkbox => {\n const text = checkbox.innerText.trim();\n if (text) {\n options.push(text);\n }\n });\n }\n\n return options.join('\\n');\n}\n\n// 使用示例\nconst result = extractExamContentWithNumbers();\nconsole.log(result);\nconst askai = '接下来我在做微认证考试,时间有限,有判断题,单选题和多选题。你需要快速给我答案,减少废话,不需要给过多的解释,直接快速给到答案即可。以下这些题你拿去认真思考,最后给到我每一个题的答案,你的回答应该每一行文本前面带题号,后面是答案,一题占一行文本。多选题多个答案用|隔开。以下是问题和选项:\\n';\ncopyWithGreasemonkey(askai + result);"
99
}
1010
]

0 commit comments

Comments
 (0)