可以将烦人的观看学习视频的操作丢在一旁,专心的做自己喜欢做的事情。让selenium帮你完成,体验selenium带来的识别观看答题一条龙服务。
我使用到的是Chrome的驱动,驱动下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads
根据Chrome的版本号下载对应的驱动。
class checkStatusThread(threading.Thread):
def __init__(self):
super(checkStatusThread, self).__init__()
self.browser = webdriver.Chrome()
# gd省专业技术人员继续教育系统(个人)登录url
self.loginUrl = 'http://ggfw.gdhrss.gov.cn/ssologin/login?service=http%3A%2F%2Fggfw.gdhrss.gov.cn%2Fzjjyweb%2Fuser%2Findex.do'
self.username = "xxx"
self.password = "xxx"
self.loginStatus = False
self.checkClassStatus = False
self.checkClassLoding = False
self.watchStatus = False
#课程列表
self.classList = []
self.classBtns = []
def run(self):
while True:
# 监测登录状态
if not self.loginStatus:
self.login()
# 监测是否登录,判断是否可以进行课程检测
if self.loginStatus and not self.checkClassStatus and not self.checkClassLoding:
self.checkClass()
# 监测是否可以进行视频的观看
if self.loginStatus and self.checkClassStatus and not self.checkClassLoding:
self.watch()
def login(self): #验证码识别有点难度,先不做自动登录,暂时使用人工输入验证码
# 登录
print('login')
while not self.loginStatus:
self.browser.get(self.loginUrl)
self.browser.find_element_by_name('username').clear()
self.browser.find_element_by_name('username').send_keys(self.username)
time.sleep(1)
self.browser.find_element_by_name('password').clear()
self.browser.find_element_by_name('password').send_keys(self.password)
self.vcode = input("请手动输入验证码:")
self.browser.find_element_by_name('vcode').clear()
self.browser.find_element_by_name('vcode').send_keys(self.vcode)
time.sleep(1)
self.browser.find_element_by_id("doPersonLogin").click() # 这里登录
time.sleep(3)
#判断是否登录成功
#首先判断是否有错误信息
try:
erro = self.browser.find_element_by_id('client_error_personal')
print(erro.text)
except:
print("检测是否登录")
checkNum = 0
while checkNum <10:
try:
cookie = self.browser.get_cookie("JSESSIONID")
if cookie['path'] == '/zjjyweb':
print("已登录")
self.loginStatus=True
break
else:
print('检测中', checkNum)
checkNum = checkNum + 1
time.sleep(1)
except:
print('检测中',checkNum)
checkNum = checkNum+1
time.sleep(1)
#前往公需课页面
self.browser.find_element_by_id("treeDemo_13_a").click()
# 检查我的课程
def checkClass(self):
try:
self.checkClassLoding = True
courses = self.browser.find_elements_by_class_name('box-course')
for course in courses:
title = course.find_elements_by_class_name('box-course-title-cont')
if title[0].text == "我的课程":
print(title[0].text)
courseList = course.find_elements_by_class_name('box-course-list')
print(len(courseList))
for courseItem in courseList:
# 添加我的课程到缓存列表中
self.classList.append(courseItem)
self.checkClassLoding = False
self.checkClassStatus = True
except Exception as e:
print("识别错误",e)
# 切换窗口句柄
def getcurrentWin(self,num):
handles = self.browser.window_handles
# 将browser与新的页面绑定起来
self.browser.switch_to_window(handles[num])
#开始观看视频
def watch(self):
for br in range(len(self.classList)):
self.getcurrentWin(0)
time.sleep(1)
self.classList[br].find_elements_by_class_name("item-cont-descr-text-btn-choice")[0].click()
# 更新窗口句柄
self.getcurrentWin(-1)
time.sleep(1)
self.classBtns.append(self.browser.find_elements_by_class_name("append-plugin-tip"))
try:
if len(self.classBtns)>0:
#进入章节视频
self.browser.find_elements_by_class_name("append-plugin-tip")[0].click()
while True:
# 点击播放
while True:
try:
self.browser.find_elements_by_class_name('prism-big-play-btn')[0].click()
self.watchStatus = True
break
except:
time.sleep(1)
while self.watchStatus:
self.watchStatus = self.checkWatch()
time.sleep(5)
print("看完一个章节啦")
#获取当前页面的其他章节
newNum = 0
while newNum<15:
try:
self.newclassBtns = self.browser.find_elements_by_class_name("append-plugin-tip")
if len(self.newclassBtns)>1:
# 进入章节视频
self.newclassBtns[1].click()
break
except:
time.sleep(2)
newNum= newNum+1
print("获取章节错误")
except Exception as e1:
print("观看时发生错误",e1)
def checkWatch(self):
percentNum = 0
watchStatus = True
percent = ""
while percentNum<15:
try:
percent = self.browser.find_element_by_id('realPlayVideoTime').text
print("观看进度%s/100" % (percent))
break
except:
percentNum = percentNum+1
time.sleep(3)
if percentNum >10 or percent == "已完成":
watchStatus = False
# 判断是否需要重试刷新
try:
operation = self.browser.find_elements_by_class_name('prism-error-operation')
operation[0].find_elements_by_class_name("prism-button-refresh")[0].click()
print("已刷新重试")
# 点击播放
while True:
try:
self.browser.find_elements_by_class_name('prism-big-play-btn')[0].click()
break
except:
time.sleep(1)
except:
eee=1
# 判断问题
try:
panel = self.browser.find_elements_by_class_name('panel')
panduan = panel[0].find_elements_by_class_name('exam-subject-text-queanswar-answer')[0]
panduan.find_element_by_name('panduan').click()
print("选择第一个选项")
time.sleep(1)
panel[0].find_elements_by_class_name('reply-sub')[0].click()
chooseStatus = False
while not chooseStatus:
try:
self.browser.find_elements_by_class_name('l-btn-small')[0].click()
chooseStatus = True
except:
time.sleep(3)
except:
eee = 2
return watchStatus
每个对应的网站所使用到的应对机制都有差别,但是用到的技术基本没怎么变化