From c2e195f26d267155988f9518da6dc1676330e97e Mon Sep 17 00:00:00 2001 From: JesterHey Date: Sat, 9 Mar 2024 14:56:26 +0800 Subject: [PATCH] new file: course_info.json modified: demo.py renamed: main.py -> get_info.py new file: kill_course.py --- course_info.json | 157 +++++++++++++++++++++++++++++++++++++++++ demo.py | 8 +-- main.py => get_info.py | 25 ++++--- kill_course.py | 14 ++++ 4 files changed, 189 insertions(+), 15 deletions(-) create mode 100644 course_info.json rename main.py => get_info.py (63%) create mode 100644 kill_course.py diff --git a/course_info.json b/course_info.json new file mode 100644 index 0000000..e3d5112 --- /dev/null +++ b/course_info.json @@ -0,0 +1,157 @@ +{ + "7367": { + "rate": 100, + "type": "\u5fc5\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7366": { + "rate": 100, + "type": "\u5fc5\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7033": { + "rate": 100, + "type": "\u5fc5\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7517": { + "rate": 100, + "type": "\u5fc5\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7032": { + "rate": 100, + "type": "\u5fc5\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7516": { + "rate": 100, + "type": "\u5fc5\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7031": { + "rate": 100, + "type": "\u5fc5\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7515": { + "rate": 100, + "type": "\u5fc5\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "6349": { + "rate": 100, + "type": "\u5fc5\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7436": { + "rate": 100, + "type": "\u5fc5\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "6937": { + "rate": 0, + "type": "\u57f9\u8bad", + "status": "\u672a\u5b66\u5b8c" + }, + "6938": { + "rate": 0, + "type": "\u57f9\u8bad", + "status": "\u672a\u5b66\u5b8c" + }, + "6991": { + "rate": 0, + "type": "\u57f9\u8bad", + "status": "\u672a\u5b66\u5b8c" + }, + "6992": { + "rate": 62, + "type": "\u57f9\u8bad", + "status": "\u672a\u5b66\u5b8c" + }, + "6993": { + "rate": 100, + "type": "\u57f9\u8bad", + "status": "\u672a\u8bc4\u5206" + }, + "6995": { + "rate": 100, + "type": "\u57f9\u8bad", + "status": "\u5df2\u5b66\u5b8c" + }, + "7006": { + "rate": 100, + "type": "\u57f9\u8bad", + "status": "\u5df2\u5b66\u5b8c" + }, + "7007": { + "rate": 100, + "type": "\u57f9\u8bad", + "status": "\u5df2\u5b66\u5b8c" + }, + "7010": { + "rate": 100, + "type": "\u57f9\u8bad", + "status": "\u5df2\u5b66\u5b8c" + }, + "7011": { + "rate": 100, + "type": "\u57f9\u8bad", + "status": "\u5df2\u5b66\u5b8c" + }, + "7554": { + "rate": 100, + "type": "\u9009\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7553": { + "rate": 100, + "type": "\u9009\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7552": { + "rate": 100, + "type": "\u9009\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7551": { + "rate": 100, + "type": "\u9009\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7550": { + "rate": 100, + "type": "\u9009\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7549": { + "rate": 100, + "type": "\u9009\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7548": { + "rate": 100, + "type": "\u9009\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7547": { + "rate": 100, + "type": "\u9009\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7546": { + "rate": 100, + "type": "\u9009\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7545": { + "rate": 100, + "type": "\u9009\u4fee", + "status": "\u5df2\u5b66\u5b8c" + }, + "7564": { + "rate": 0, + "type": "\u9009\u4fee", + "status": "\u672a\u5b66\u5b8c" + } +} \ No newline at end of file diff --git a/demo.py b/demo.py index 38a3822..3e4c220 100644 --- a/demo.py +++ b/demo.py @@ -1,6 +1,4 @@ -from DrissionPage import ChromiumPage +import json -# 创建页面对象,并启动或接管浏览器 -page = ChromiumPage() -# 跳转到登录页面 -page.get('https://g1879.gitee.io/drissionpagedocs/get_start/examples/control_browser') \ No newline at end of file +info = json.load(open('course_info.json', 'r')) +print(info) \ No newline at end of file diff --git a/main.py b/get_info.py similarity index 63% rename from main.py rename to get_info.py index fadf71e..0887414 100644 --- a/main.py +++ b/get_info.py @@ -1,10 +1,12 @@ from DrissionPage import WebPage from DrissionPage.common import * +from collections import * import time import json # http://hnqmgc.17el.cn/grzx/ - +def decode(s): + return json.loads('"%s"' %s) # 由于页面源码中的json字符串是单引号包裹的,所以需要转换成双引号包裹的json字符串 # 创建页面对象,并启动或接管浏览器 page = WebPage() # 跳转到登录页面 @@ -31,7 +33,8 @@ page.ele('@value=0').click() # 获取总页数 course_info = {} #
1 / 4
-total_page = int(page.ele('.paginationjs-nav J-paginationjs-nav').text[-1]) +# total_page = int(page.ele('.paginationjs-nav J-paginationjs-nav').text) +total_page = 4 for i in range(total_page): # 逐页读取课程信息和完成状态并存放到字典中 tbodys = page.ele('#tbody') @@ -39,16 +42,18 @@ for i in range(total_page): trs = tbodys.eles('tag:tr') for tr in trs: cur_info = tr.text.split('\t') - print(cur_info) - course_id = cur_info[0] # 课程id - course_rate = cur_info[3] # 课程完成百分比 - course_status = cur_info[4] # 课程完成状态(是否完成习题/评价) + course_id = cur_info[0] # 课程id + course_type = cur_info[2] # 课程类型 + course_rate = int(cur_info[3][:-1]) # 课程完成百分比 + course_status = cur_info[4] # 课程完成状态(是否完成习题/评价) + print(course_id, course_rate, course_status) # 存放到字典中 - course_info[course_id] = {'rate': course_rate, 'status': course_status} + course_info[course_id] = {'rate': course_rate,'type': course_type,'status': course_status} if i != total_page - 1: - page.ele('@type=text').input(i + 2) - page.ele('@value=跳转').click() + page.ele('@title=Next page').click() time.sleep(1) print(len(course_info)) -page.close_session() +# 写入json文件中 +with open('course_info.json', 'w') as f: + json.dump(course_info, f) diff --git a/kill_course.py b/kill_course.py new file mode 100644 index 0000000..6dbeadb --- /dev/null +++ b/kill_course.py @@ -0,0 +1,14 @@ +from DrissionPage import ChromiumPage +from DrissionPage.common import * +from collections import * +import time +import json +# 统计课程完成情况 +cnt = defaultdict(list) +# 读取课程信息 +info = json.load(open('course_info.json', 'r')) +for k, v in info.items(): + if v['rate'] < 100: + cnt[v['type']].append(k) +print(cnt) +# 按必修-选秀-专题-培训执行刷课 \ No newline at end of file