Skip to content

Commit

Permalink
修复一些问题 (Samueli924#376)
Browse files Browse the repository at this point in the history
* fix: 解决无限回滚问题

* fix:修复多选题答案处理问题

* fix:让脚本触发最大回滚次数后开始下一课程的学习
  • Loading branch information
sz134055 authored Nov 4, 2024
1 parent 4e078b9 commit 1dd547f
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 21 deletions.
8 changes: 4 additions & 4 deletions api/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ def random_answer(options:str) -> str:
return answer

if q['type'] == "multiple":
_op_list = options.split('\n')
_op_list = multi_cut(options)
for i in range(random.choices([2,3,4],weights=[0.1,0.5,0.4],k=1)[0]):
_choice = random.choice(_op_list)
_op_list.remove(_choice)
Expand All @@ -270,8 +270,8 @@ def random_answer(options:str) -> str:
logger.info(f'随机选择 -> {answer}')
return answer

def multi_cut(answer) -> list[str]:
cut_char = [' ',',','|','\n','\r','\t','#','*','-','_','+','@','~','/','\\','.','&'] # 多选答案切割符
def multi_cut(answer:str) -> list[str]:
cut_char = [',',',','|','\n','\r','\t','#','*','-','_','+','@','~','/','\\','.','&',' '] # 多选答案切割符
res = []
for char in cut_char:
res = answer.split(char)
Expand Down Expand Up @@ -333,7 +333,7 @@ def multi_cut(answer) -> list[str]:
answer = random_answer(q['options'])
else:
# 根据响应结果选择答案
options_list = q['options'].split('\n')
options_list = multi_cut(q['options'])
if q['type'] == "multiple":
# 多选处理
for _a in multi_cut(res):
Expand Down
7 changes: 6 additions & 1 deletion api/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,9 @@ def __init__(self, *args: object):

class FormatError(Exception):
def __init__(self, *args: object):
super().__init__(*args)
super().__init__(*args)

class MaxRollBackError(Exception):
def __init__(self, *args: object):
super().__init__(*args)

33 changes: 17 additions & 16 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import configparser
from api.logger import logger
from api.base import Chaoxing, Account
from api.exceptions import LoginError, FormatError, JSONDecodeError
from api.exceptions import LoginError, FormatError, JSONDecodeError,MaxRollBackError
from api.answer import Tiku
from urllib3 import disable_warnings,exceptions
# 关闭警告
Expand Down Expand Up @@ -33,12 +33,10 @@ class RollBackManager:
def __init__(self) -> None:
self.rollback_times = 0
self.rollback_id = ""
def reset_times(self,id:str) -> int:
if id == self.rollback_id:
self.rollback_times = 0

def add_times(self,id:str) -> None:
if id == self.rollback_id and self.rollback_times == 3:
raise Exception("回滚次数已达3次,请手动检查学习通任务点完成情况")
raise MaxRollBackError("回滚次数已达3次,请手动检查学习通任务点完成情况")
elif id != self.rollback_id:
# 新job
self.rollback_id = id
Expand Down Expand Up @@ -107,18 +105,21 @@ def add_times(self,id:str) -> None:
jobs, job_info = chaoxing.get_job_list(course["clazzId"], course["courseId"], course["cpi"], point["id"])

# 发现未开放章节,尝试回滚上一个任务重新完成一次
if job_info.get('notOpen',False):
__point_index -= 1 # 默认第一个任务总是开放的
# 针对题库启用情况
if not tiku or tiku.DISABLE or not tiku.SUBMIT:
# 未启用题库或未开启题库提交,章节检测未完成会导致无法开始下一章,直接退出
logger.error(f"章节未开启,可能由于上一章节的章节检测未完成,请手动完成并提交再重试,或者开启题库并启用提交")
break
RB.add_times(point["id"])
continue
try:
if job_info.get('notOpen',False):
__point_index -= 1 # 默认第一个任务总是开放的
# 针对题库启用情况
if not tiku or tiku.DISABLE or not tiku.SUBMIT:
# 未启用题库或未开启题库提交,章节检测未完成会导致无法开始下一章,直接退出
logger.error(f"章节未开启,可能由于上一章节的章节检测未完成,请手动完成并提交再重试,或者开启题库并启用提交")
break
RB.add_times(point["id"])
continue
except MaxRollBackError as e:
logger.error("回滚次数已达3次,请手动检查学习通任务点完成情况")
# 跳过该课程,继续下一课程
break

# 正常获取,尝试重置回滚次数
RB.reset_times(point["id"])

# 可能存在章节无任何内容的情况
if not jobs:
Expand Down

0 comments on commit 1dd547f

Please sign in to comment.