from DrissionPage import ChromiumPage from DrissionPage.common import * import time from loguru import logger from get_info import get_into_center # 实现单个课程的刷课逻辑 def one_course(cid: str, ctype: str, crate: int, again: bool = False): ''' cid: 课程id ctype: 课程类型 crate: 课程总体完成率 ---------------------- 接受一个课程id,执行刷课 1. 跳转到对应课程页面 2. 进入相应的课程界面 3. 循环检验课程是否完成 4. 完成当前课程后退出 ''' # 接管浏览器 cur_page = ChromiumPage() if again: # 关闭所有标签页和浏览器 cur_page.close() # 进入个人中心 get_into_center(cur_page) # 判定课程类别 if ctype == '必修': cur_page.ele('@value=1').click() elif ctype == '选修': cur_page.ele('@value=2').click() elif ctype == '专题': cur_page.ele('@value=4').click() elif ctype == '培训': cur_page.ele('@value=5').click() time.sleep(1) # 利用课程序号定位,跳转到视频页面 trs = cur_page.ele('#tbody').eles('tag:tr') for tr in trs: # 鉴别课程序号 if tr.ele('tag:td').text.split('\t')[0] == cid: # 进入视频页面 tr.ele('tag:button@@text():进入学习').click() cur_page.wait.new_tab(timeout=3) # 等待新标签页出现 tab = cur_page.get_tab(cur_page.latest_tab) # 获取新标签页 time.sleep(1) if crate == 100: print('当前课程已完成') cur_page.close_tabs(tabs_or_ids=[tab]) # 进入后,获得当前视频的完成率,决定操作方式 if tab.ele('tag:a@@text():继续学习', timeout=2): tab.ele('tag:a@@text():继续学习').click() else: tab.ele( 'c:#normalModel_video > xg-start > div.xgplayer-icon-play > svg > path').click() # 建立循环,检测当前视频是否完播 '''