美文网首页
2019-08-16 最近写了一个中石化网络学院自动学习的工具,

2019-08-16 最近写了一个中石化网络学院自动学习的工具,

作者: 以后说如果 | 来源:发表于2019-08-16 09:24 被阅读0次
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()

相关文章

网友评论

      本文标题:2019-08-16 最近写了一个中石化网络学院自动学习的工具,

      本文链接:https://www.haomeiwen.com/subject/xnoxsctx.html