add: 添加网课网站

This commit is contained in:
2026-04-24 14:37:48 +08:00
parent 2402c837e5
commit 70aaf144a5

93
main.py
View File

@@ -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()