From 70aaf144a56e27c01599c60b8274731281d8b6f5 Mon Sep 17 00:00:00 2001 From: zhilv Date: Fri, 24 Apr 2026 14:37:48 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E6=B7=BB=E5=8A=A0=E7=BD=91=E8=AF=BE?= =?UTF-8?q?=E7=BD=91=E7=AB=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 93 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 49 insertions(+), 44 deletions(-) diff --git a/main.py b/main.py index 3562792..4f4faca 100644 --- a/main.py +++ b/main.py @@ -11,28 +11,29 @@ -------------------------------------------- """ -import time -import os -import requests -import re import json +import os import random -import ddddocr +import re +import time +import warnings from datetime import datetime +from threading import Thread + +import ddddocr + +# 修复 ANTIALIAS 错误 - 添加猴子补丁 +import PIL.Image +import requests from dotenv import load_dotenv from lxml import etree # type: ignore -from threading import Thread from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry -import warnings from deepseek import DeepSeek from doubao import DOUBAO from kimi import KIMI -# 修复 ANTIALIAS 错误 - 添加猴子补丁 -import PIL.Image - if not hasattr(PIL.Image, "ANTIALIAS"): PIL.Image.ANTIALIAS = PIL.Image.Resampling.LANCZOS # type: ignore @@ -306,13 +307,13 @@ class CKWK: if resp.status_code == 200 and resp.json().get("status", False): qa_path = resp.json().get("url", "") self.start_url = "https://{}{}".format(self.host, qa_path) - self.log(f'开始作业: {resp.json().get("msg", "")} url -> {self.start_url}') + self.log(f"开始作业: {resp.json().get('msg', '')} url -> {self.start_url}") resp2 = self.session.get(self.start_url) self.qas = [] if resp.status_code == 200: self.parse_q_a_work(resp2.text) else: - self.log(f'开始作业: {resp.json().get("msg", "")}') + self.log(f"开始作业: {resp.json().get('msg', '')}") return False return True @@ -327,13 +328,13 @@ class CKWK: if resp.status_code == 200 and resp.json().get("status", False): qa_path = resp.json().get("url", "") self.start_url = "https://{}{}".format(self.host, qa_path) - self.log(f'开始考试: {resp.json().get("msg", "")} url -> {self.start_url}') + self.log(f"开始考试: {resp.json().get('msg', '')} url -> {self.start_url}") resp2 = self.session.get(self.start_url) self.qas = [] if resp.status_code == 200: self.parse_q_a_exam(resp2.text) else: - self.log(f'开始考试: {resp.json().get("msg", "")}') + self.log(f"开始考试: {resp.json().get('msg', '')}") return False return True @@ -379,7 +380,7 @@ class CKWK: if resp.status_code == 200 and resp.json().get("status", False): self.log( - f'{index}/{len(self.qas)} 提交答案: {resp.json().get("msg", "")} {answerID} => {answer} {final}' + f"{index}/{len(self.qas)} 提交答案: {resp.json().get('msg', '')} {answerID} => {answer} {final}" ) def exam_submit( @@ -410,7 +411,7 @@ class CKWK: if resp.status_code == 200 and resp.json().get("status", False): self.log( - f'{index}/{len(self.qas)} 提交答案: {resp.json().get("msg", "")} {answerID} => {answer} {final}' + f"{index}/{len(self.qas)} 提交答案: {resp.json().get('msg', '')} {answerID} => {answer} {final}" ) if not final: @@ -454,7 +455,7 @@ class CKWK: ) if resp.status_code == 200 and resp.json().get("status", False): self.log( - f'添加评论: {resp.json().get("msg", "")} content -> {replace_html_entities(content)}' + f"添加评论: {resp.json().get('msg', '')} content -> {replace_html_entities(content)}" ) def delete_reply(self, courseId: str, nodeId: str, replyId: str): @@ -466,7 +467,7 @@ class CKWK: headers=headers, ) if resp.status_code == 200 and resp.json().get("status", False): - self.log(f'删除评论: {resp.json().get("msg", "")}') + self.log(f"删除评论: {resp.json().get('msg', '')}") def reply(self, courseId: str, nodeId: str): headers = self.session.headers @@ -516,7 +517,7 @@ class CKWK: }, ) if resp.status_code == 200 and resp.json().get("status", False): - self.log(f'{resp.json().get("msg", "")} page -> {page}') + self.log(f"{resp.json().get('msg', '')} page -> {page}") self.courses.extend(resp.json().get("list", [])) if page < resp.json().get("pageInfo", {}).get("pageCount", 0): self.get_study_record(course_id, page + 1) @@ -532,7 +533,7 @@ class CKWK: }, ) if resp.status_code == 200 and resp.json().get("status", False): - self.log(f'{resp.json().get("msg", "")} page -> {page}') + self.log(f"{resp.json().get('msg', '')} page -> {page}") self.works.extend(resp.json().get("list", [])) if page < resp.json().get("pageInfo", {}).get("pageCount", 0): self.get_study_record(course_id, page + 1) @@ -547,7 +548,7 @@ class CKWK: }, ) if resp.status_code == 200 and resp.json().get("status", False): - self.log(f'{resp.json().get("msg", "")} page -> {page}') + self.log(f"{resp.json().get('msg', '')} page -> {page}") self.exams.extend(resp.json().get("list", [])) if page < resp.json().get("pageInfo", {}).get("pageCount", 0): self.get_exam_record(course_id, page + 1) @@ -555,7 +556,7 @@ class CKWK: def log(self, *args, **kwargs) -> None: exit_flag = False time_str = datetime.now().strftime("[%Y-%m-%d %H:%M:%S]") - prefix = f'[{self.user.get("name", "")}] {time_str}' + prefix = f"[{self.user.get('name', '')}] {time_str}" # 检查 args 中是否有 \r,若有则将前缀拼在 \r 之后 if args and isinstance(args[0], str) and "\r" in args[0]: # 将前缀插入到最后一个 \r 后面 @@ -566,7 +567,7 @@ class CKWK: else f"{prefix} {args[0]}" ) else: - log_content = f'{prefix} {" ".join(map(str, args))}' + log_content = f"{prefix} {' '.join(map(str, args))}" print(log_content, **kwargs) if exit_flag: os._exit(0) @@ -592,7 +593,7 @@ class CKWK: ) try: if resp.status_code == 200 and resp.json().get("status", False): - self.log(f'{resp.json().get("msg", "")} --> 1', end="", flush=True) + self.log(f"{resp.json().get('msg', '')} --> 1", end="", flush=True) self.study_id = resp.json().get("studyId", 0) except: if resp.status_code == 200: @@ -616,7 +617,7 @@ class CKWK: ) if resp.status_code == 200 and resp.json().get("status", False): self.log( - f'\r{" " * 100}\r{resp.json().get("msg", "")} --> {study_time}', + f"\r{' ' * 100}\r{resp.json().get('msg', '')} --> {study_time}", end="", flush=True, ) @@ -638,7 +639,7 @@ class CKWK: ) if resp.status_code == 200 and resp.json().get("status", False): self.log( - f'\r{" " * 100}\r{resp.json().get("msg", "")} --> {study_time}', + f"\r{' ' * 100}\r{resp.json().get('msg', '')} --> {study_time}", flush=True, ) return True @@ -664,17 +665,17 @@ class CKWK: thread.start() cs = self.user.get("courses", []) print( - f'姓名: {self.user.get("name", "")}\n\t互评: {self.user.get("huping", 0)}\n\t乐学园: {self.user.get("lexueyuan", 0)}\n\t讨论主题: {self.user.get("taolunzhuti", 0)}\n\t学习时长: {self.user.get("study_time", "")}' + f"姓名: {self.user.get('name', '')}\n\t互评: {self.user.get('huping', 0)}\n\t乐学园: {self.user.get('lexueyuan', 0)}\n\t讨论主题: {self.user.get('taolunzhuti', 0)}\n\t学习时长: {self.user.get('study_time', '')}" ) if len(cs) > 1: for i, _c in enumerate(cs): - print(f'{i+1}: {_c.get("name", "")} {_c.get("progress", "")}') + print(f"{i + 1}: {_c.get('name', '')} {_c.get('progress', '')}") cs_order = input("请输入刷课顺序(用英文逗号分隔,不需要耍的不用加): ") cs_list = [cs[int(_c) - 1] for _c in cs_order.split(",")] cs_list = cs for c in cs_list: - print(f'课程名: {c.get("name", "")}\n\t进度: {c.get("progress", "")}') - self.log(f'{c.get("name", "")} --> {c.get("id", "")}') + print(f"课程名: {c.get('name', '')}\n\t进度: {c.get('progress', '')}") + self.log(f"{c.get('name', '')} --> {c.get('id', '')}") self.get_study_record(c.get("id", "")) @@ -684,7 +685,7 @@ class CKWK: # if isReply: # self.reply(c.get("id", ""), l.get("id", "")) self.log( - f'{l.get("name", "")} --> {l.get("id", "")} --> 已经学习过了' + f"{l.get('name', '')} --> {l.get('id', '')} --> 已经学习过了" ) continue @@ -695,7 +696,7 @@ class CKWK: total_time = 0 video_time, video_state = self.get_course(node_id) self.log( - f'{l.get("name", "")} --> {l.get("id", "")} --> {video_time} --> {video_state}' + f"{l.get('name', '')} --> {l.get('id', '')} --> {video_time} --> {video_state}" ) if video_time <= 0: @@ -722,11 +723,11 @@ class CKWK: thread.start() cs = self.user.get("courses", []) print( - f'姓名: {self.user.get("name", "")}\n\t互评: {self.user.get("huping", 0)}\n\t乐学园: {self.user.get("lexueyuan", 0)}\n\t讨论主题: {self.user.get("taolunzhuti", 0)}\n\t学习时长: {self.user.get("study_time", "")}' + f"姓名: {self.user.get('name', '')}\n\t互评: {self.user.get('huping', 0)}\n\t乐学园: {self.user.get('lexueyuan', 0)}\n\t讨论主题: {self.user.get('taolunzhuti', 0)}\n\t学习时长: {self.user.get('study_time', '')}" ) if len(cs) > 1: for i, _c in enumerate(cs): - print(f'{i+1}: {_c.get("name", "")} {_c.get("progress", "")}') + print(f"{i + 1}: {_c.get('name', '')} {_c.get('progress', '')}") cs_order = input("请输入刷课顺序(用英文逗号分隔,不需要耍的不用加): ") cs_list = [cs[int(_c) - 1] for _c in cs_order.split(",")] cs_list = cs @@ -737,7 +738,7 @@ class CKWK: self.qas = [] if "已阅" in work.get("state"): self.log( - f'{work.get("title", "")} 已阅 {work.get("finalScore", "")}' + f"{work.get('title', '')} 已阅 {work.get('finalScore', '')}" ) continue if not self.get_question_answer_work( @@ -766,11 +767,11 @@ class CKWK: thread.start() cs = self.user.get("courses", []) print( - f'姓名: {self.user.get("name", "")}\n\t互评: {self.user.get("huping", 0)}\n\t乐学园: {self.user.get("lexueyuan", 0)}\n\t讨论主题: {self.user.get("taolunzhuti", 0)}\n\t学习时长: {self.user.get("study_time", "")}' + f"姓名: {self.user.get('name', '')}\n\t互评: {self.user.get('huping', 0)}\n\t乐学园: {self.user.get('lexueyuan', 0)}\n\t讨论主题: {self.user.get('taolunzhuti', 0)}\n\t学习时长: {self.user.get('study_time', '')}" ) if len(cs) > 1: for i, _c in enumerate(cs): - print(f'{i+1}: {_c.get("name", "")} {_c.get("progress", "")}') + print(f"{i + 1}: {_c.get('name', '')} {_c.get('progress', '')}") cs_order = input("请输入刷课顺序(用英文逗号分隔,不需要耍的不用加): ") cs_list = [cs[int(_c) - 1] for _c in cs_order.split(",")] cs_list = cs @@ -781,7 +782,7 @@ class CKWK: self.qas = [] if "线下阅" in exam.get("state"): self.log( - f'{exam.get("title", "")} 已阅 {exam.get("finalScore", "")}' + f"{exam.get('title', '')} 已阅 {exam.get('finalScore', '')}" ) continue print(exam) @@ -807,12 +808,16 @@ class CKWK: if __name__ == "__main__": host_server = [ - ["cqcst.yuruixxkj.com", "御瑞科技(选修课)"], - ["cqcst.zjxkeji.com", "重庆城市科技学院(其他1)"], - ["cqcst.yuncanjykeji.com", "重庆城市科技学院实训平台(其他2)"], + # ["cqcst.yuruixxkj.com", "御瑞科技(选修课)"], + # ["cqcst.zjxkeji.com", "重庆城市科技学院(其他1)"], + # ["cqcst.yuncanjykeji.com", "重庆城市科技学院实训平台(其他2)"], + ["cqcst.leykeji.com", "劳动课程测评考试平台"], + # ["cqcst.zjxkeji.com", "公益课程平台"], + ["cqcst.suwankj.com", "在线课程测评考试平台"], + # ["cqcst.yuruixxkj.com", "在线测评考试平台"], ] for i, h in enumerate(host_server): - print(f"{i+1}: {h[0]} {h[1]}") + print(f"{i + 1}: {h[0]} {h[1]}") c = int(input("请选择刷课平台: ")) - 1 u = os.environ.get("YURU_ACCOUNT", "") p = os.environ.get("YURU_PASSWORD", "") @@ -835,7 +840,7 @@ if __name__ == "__main__": # CKWK(f"{u}", f"{p}", host_server[c][0]).run() # 刷作业,不需要用的时候可以直接注释 - # CKWK(f"{u}", f"{p}", host_server[c][0]).work() + CKWK(f"{u}", f"{p}", host_server[c][0]).work() # 考试,不需要用的时候可以直接注释 - CKWK(f"{u}", f"{p}", host_server[c][0]).exam() + # CKWK(f"{u}", f"{p}", host_server[c][0]).exam()