本文最后更新于 156 天前,其中的信息可能已经有所发展或是发生改变。
from os import popen
try:
from requests import Session
from ddddocr import DdddOcr
except ImportError:
print("Installing necessary packages...")
popen("pip install requests ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple").read()
from requests import Session
from ddddocr import DdddOcr
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'SignCheck': '75f88846476b6e8141148ac02c3f44b6',
'TimeDate': '1680539114000',
'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/99.0.4844.51Safari/537.36',
}
def check_code(sess: Session):
url = 'https://centro.zjlll.net/ajax?time=1680535352000&service=%2Fcentro%2Fapi%2Fauthcode%2Fcreate¶ms='
response = sess.get(url, headers=headers).json()
code_id = response['data']['id']
code = DdddOcr(show_ad=False).classification(img=response['data']['image'])
return code_id, code
def login(sess: Session, username: str, password: str):
code_id, code = check_code(sess)
data = {
"login_name": username,
"password": password,
"captchaCode": code,
"captchaId": code_id,
"redirect_url": "https://www.zjooc.cn",
"app_key": "1ddadc7d-6f0a-4eb0-b844-24dd28e33e74",
"autoLoginTime": "7"
}
url = "https://centro.zjlll.net/login/doLogin"
response = sess.post(url, data=data, headers=headers).json()
data = {
"auth_code": response['authorization_code'],
"autoLoginTime": 7,
"limitLoginTime": ""
}
url = f"https://www.zjooc.cn/autoLogin"
response = sess.get(url, params=data, headers=headers).json()
return response
def get_courses(sess: Session):
data = {
"service": "/jxxt/api/course/courseStudent/getStudentCourseChapters",
"params[pageNo]": 1,
"params[courseId]": "8a2284fd850eb40a01856c532685081d",
"params[urlNeed]": 0,
}
url = "https://www.zjooc.cn/ajax"
response = sess.get(url, params=data, headers=headers).json()
return response
def watch_video(sess: Session, course_id: str, chapter_id: str, play_time: int):
data = {
"service": "/learningmonitor/api/learning/monitor/videoPlaying",
"params[chapterId]": chapter_id,
"params[courseId]": course_id,
"params[playTime]": str(play_time),
"params[percent]": "100"
}
url = "https://www.zjooc.cn/ajax"
response = sess.get(url, params=data, headers=headers)
return response
def watch_pdf(sess: Session, course_id: str, chapter_id: str):
data = {
"service": "/learningmonitor/api/learning/monitor/finishTextChapter",
"params[chapterId]": chapter_id,
"params[courseId]": course_id,
}
url = "https://www.zjooc.cn/ajax"
response = sess.get(url, params=data, headers=headers)
return response
def main(username: str, password: str):
session = Session()
try:
status = login(session, username, password)['success']
except KeyError:
status = login(session, username, password)['success']
if status:
courses = get_courses(session)
for x in courses["data"]:
for y in x["children"]:
for z in y["children"]:
if z["resourceType"] == 1:
ret = watch_video(session, z["courseId"], z["id"], z["vedioTimeLength"]).json()["message"]
else:
ret = watch_pdf(session, z["courseId"], z["id"]).json()["message"]
print(f"{z['name']}: {ret}")
if __name__ == "__main__":
try:
main(input("请输入您的用户名: "), input("请输入您的密码: "))
except KeyError:
print("请确保用户名, 密码输入正确,请重试...")