import requests
import re
import json
import web_for_xqf
import time
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from requests.cookies import RequestsCookieJar
from selenium.common.exceptions import UnexpectedAlertPresentException
def get_cookies():
driver_login = web_for_xqf.Mydriver(nohead=True)
driver_login.driver.get("https://sia.sinopec.com")
cookies = driver_login.login()
try:
jar = RequestsCookieJar()
for cookie in cookies:
jar.set(cookie['name'], cookie['value'])
return jar,driver_login
except:
print("=" * 120)
print("获取cookies失败")
print("=" * 120)
raise
def get_course(cookies):
courseNameList=[]
courseIdList=[]
domainIdList=[]
posturl='https://sia.sinopec.com/learn/portalActivities/queryCourse.do'
postdata={
'page':'1',
'rows':'100',
'name':'',
'type':'P',
'sort':'',
}
responseData=requests.post(posturl,data=postdata,cookies=cookies).json()['responseData']['datas']
for i in responseData:
courseName=i['name']
courseId=i['id']
domainId=i['domainId']
courseNameList.append(courseName)
courseIdList.append(courseId)
domainIdList.append(domainId)
#print(courseName,courseId,domainId)
return zip(courseNameList,courseIdList,domainIdList)
def get_need_to_study_list(cookies,course):
postdata={"courseId":course[1],"isIssue":"1",}
posturl='https://sia.sinopec.com/cc/chapterUnitController/loadChapterUnitTreeForVideo.do'
response_data=requests.post(posturl,data=postdata,cookies=cookies).json()['responseData']
chapterList=response_data['chapterList']
number=0
stuStutas=response_data['lastStudyInfo']['stuStutas']
number_list=[]
for i in chapterList:
course_name=i['chapteName']
for j in i['units']:
try:
if(j['stuStatus']==1):
#print(j['chapteName']+"已学习完成!")
number=number+1
else:
number_list.append(number)
number=number+1
except:
number_list.append(number)
number=number+1
return number_list,stuStutas
def study_main(driver,cookies,course,number_list):
#glyphicon glyphicon-adjust半圆
#full-circle全圆
#circle空心圆
url="https://sia.sinopec.com/cc/pages/course_management/coment.html?courseId="+str(course[1])+"&domainId="+str(course[2])+"&openType=Y"
a='vjs-user-active'
b='vjs-ended'
c='vjs-playing'
driver.get(url)
time.sleep(2)
try:
driver.switch_to.alert.accept()
except Exception as e:
pass
WebDriverWait(driver, 10, 0.1).until(lambda driver: driver.find_element_by_xpath("//*[@onclick='toLearn()']")).click()#点击学习按钮,其实之前应该加入课单
try:
for i in number_list:
WebDriverWait(driver, 10, 0.1).until(lambda driver: driver.find_elements_by_class_name("period"))
elementList=driver.find_elements_by_class_name("period")
#print(elementList)
try:#点出目录
WebDriverWait(driver, 10, 0.1).until(lambda driver: driver.find_element_by_xpath("//*[@class='btn-pub select-bgc']"))
except:
WebDriverWait(driver, 10, 0.1).until(lambda driver: driver.find_element_by_xpath("//*[@class='btn-pub']")).click()
if elementList:
#print(elementList[i])
try:#点出目录
WebDriverWait(driver, 10, 0.1).until(lambda driver: driver.find_element_by_xpath("//*[@class='btn-pub select-bgc']"))
except:
WebDriverWait(driver, 10, 0.1).until(lambda driver: driver.find_element_by_xpath("//*[@class='btn-pub']")).click()
time.sleep(3)
elementList[i].click()
print("学习第"+str(i+1)+"章节...")
time.sleep(3)
dr=driver.find_element_by_xpath("//*[@id='MP4Player']/div").get_attribute('class')
if a in dr or c in dr:
print("找到视频啦,正在努力学习课程:")
time.sleep(10)
if c not in driver.find_element_by_xpath("//*[@id='MP4Player']/div").get_attribute('class'):
print("视频播放失败,可能服务器视频不存在!")
else:
time_restart=0
for x in range(10800,-1,-1):#学习倒计时
mystr = "倒计时" + str(x) + "秒"
print(mystr,end = "")
print("\b" * (len(mystr)*2),end = "",flush=True)
time.sleep(1)
time_restart=time_restart+1
if(time_restart==300):
print("害怕时间超长,暂时保存一下。")
try:
WebDriverWait(driver, 5, 0.1).until(lambda driver: driver.find_element_by_xpath("//*[@class='fa fa-close fr']")).click()
time.sleep(3)
except:
pass
try:
WebDriverWait(driver, 10, 0.1).until(lambda driver: driver.find_element_by_xpath("//*[@id='totalSaveBtn']")).click()
print("保存成功!")
except Exception as e:
print("错误2")
time_restart=0
if b in driver.find_element_by_xpath("//*[@id='MP4Player']/div").get_attribute('class'):
print("学习完毕,下一课!")
try:
WebDriverWait(driver, 5, 0.1).until(lambda driver: driver.find_element_by_xpath("//*[@class='fa fa-close fr']")).click()
time.sleep(3)
except:
pass
WebDriverWait(driver, 10, 0.1).until(lambda driver: driver.find_element_by_xpath("//*[@id='totalSaveBtn']")).click()
number_list=get_need_to_study_list(cookies,course)[0]
print("更新未学习列表",end='')
print(number_list)
break
except Exception as e:
print(e)
try:
driver.find_element_by_xpath("//*[@class='fa fa-close fr']").click()
time.sleep(3)
except:
pass
WebDriverWait(driver, 10, 0.1).until(lambda driver: driver.find_element_by_xpath("//*[@id='totalSaveBtn']")).click()
WebDriverWait(driver, 10, 0.1).until(lambda driver: driver.find_element_by_xpath("//*[@onclick='goBack()']")).click()
time.sleep(2)
try:
driver.switch_to.alert.accept()
except Exception as e:
pass
print("该网址的课程所有章节均已学习完毕!")
if __name__=="__main__":
k=get_cookies()
cookies=k[0]
driver=k[1].driver
courseList=get_course(cookies)
for course in courseList:
number_list,stuStutas=get_need_to_study_list(cookies,course)
courseName=course[0]
print(courseName+"未学习的课程:",end='')
print(number_list)
if number_list and stuStutas!=1:
study_main(driver,cookies,course,number_list)
print("学习机器人已帮你学习完毕,尽量还是要自行学习哦!")
driver.quit()
网友评论