超星自動簽到並郵件通知

import requests,json,time,datetime
import smtplib
from email.mime.text import MIMEText
from email.header import Header
 
mail_host="smtp.qq.com"#設置的郵件服務器host必須是發送郵箱的服務器,與接收郵箱無關。
mail_user=""#qq郵箱登錄名
mail_pass="" #開啓stmp服務的時候並設置的受權碼,注意!不是QQ密碼。
 
sender=''#發送方qq郵箱
receivers=['']#接收方qq郵箱


username='17628678646'#帳號
passwd='xiaoxinxingshi5'#密碼
#server醬推送
SCKEY=''
#設置輪詢間隔(單位:秒,建議不低於5)
speed=10
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'}


coursedata=[]
activeList=[]
course_index=0
status=0
activates=[]
a=1
index=0

def login(username,passwd): #獲取cookie
    url='https://passport2-api.chaoxing.com/v11/loginregister'
    data={'uname':username,'code':passwd,}
    session = requests.session()
    cookie_jar = session.post(url=url, data=data, headers=headers).cookies
    cookie_t = requests.utils.dict_from_cookiejar(cookie_jar)
    return cookie_t

cookie=login(username,passwd)
uid=cookie['UID']

def taskactivelist(courseId,classId):
    global a
    url="https://mobilelearn.chaoxing.com/ppt/activeAPI/taskactivelist?courseId="+str(courseId)+"&classId="+str(classId)+"&uid="+uid
    res=requests.get(url,headers=headers,cookies=cookie)
    respon = res.status_code
    if respon==200:#網頁狀態碼正常
        data=json.loads(res.text)
        activeList=data['activeList']
        #print(activeList)
        for item in activeList:
            if("nameTwo" not in item):
                continue
            if(item['activeType']==2 and item['status']==1):
                signurl=item['url']#提取activePrimaryId
                aid = getvar(signurl)
                if(aid not in activates):
                    print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),'[簽到]',coursedata[i]['name'],'查詢到待簽到活動 活動名稱:%s 活動狀態:%s 活動時間:%s aid:%s'%(item['nameOne'],item['nameTwo'],item['nameFour'],aid))
                    sign(aid,uid)#print('調用簽到函數')
                    
                    a=2

    else:
        print('error',respon)#不知道爲啥...


def getvar(url):
    var1 = url.split("&")
    for var in var1:
        var2 = var.split("=")
        if(var2[0]=="activePrimaryId"):
            return var2[1]
    return "ccc"  


def sign(aid,uid):
    global status,activates
    url="https://mobilelearn.chaoxing.com/pptSign/stuSignajax?activeId="+aid+"&uid="+uid+"&clientip=&latitude=-1&longitude=-1&appType=15&fid=0"
    res=requests.get(url,headers=headers,cookies=cookie)
    push(SCKEY,res.text)
    if(res.text=="success"):
        try:
            message=MIMEText("用戶:"+uid+" 簽到成功!",'plain','utf-8')
            message['From']=Header("自動簽到程式",'utf-8') #設置顯示在郵件裏的發件人
            message['To']=Header("自動程序收件人",'utf-8') #設置顯示在郵件裏的收件人
            subject ='自動簽到程序腳本'
            message['Subject']=Header(subject,'utf-8') #設置主題和格式
            smtpobj=smtplib.SMTP_SSL(mail_host,465) #本地若是有本地服務器,則用localhost ,默認端口25,騰訊的(端口465或587)
            smtpobj.set_debuglevel(1)
            smtpobj.login(mail_user,mail_pass)#登錄QQ郵箱服務器
            smtpobj.sendmail(sender,receivers,message.as_string())#發送郵件
            print("用戶:"+uid+" 簽到成功!")
            smtpobj.quit()#退出
        except smtplib.SMTPException as e :
            print("Error:沒法發送郵件")
            print(e)
        print("用戶:"+uid+" 簽到成功!")
        activates.append(aid)
        status=2
    else:
        print(res.text,'簽到失敗')  
        activates.append(aid)

def push(SCKEY,msg):
    if SCKEY.isspace() or len(SCKEY)==0:
        return
    else:
        api = 'https://sc.ftqq.com/'+SCKEY+'.send'
        title = u"簽到辣!"
        content = '課程: '+coursedata[i]['name']+'\n\n簽到狀態:'+msg
        data = {
           "text":title,
           "desp":content
        }
        req = requests.post(api,data = data)        


url="http://mooc1-api.chaoxing.com/mycourse/backclazzdata?view=json&rss=1"
res=requests.get(url,headers=headers,cookies=cookie)
cdata=json.loads(res.text)
if(cdata['result']!=1):
    print("課程列表獲取失敗")
for item in cdata['channelList']:
    if("course" not in item['content']):
        continue
    pushdata={}
    pushdata['courseid']=item['content']['course']['data'][0]['id']
    pushdata['name']=item['content']['course']['data'][0]['name']
    #pushdata['imageurl']=item['content']['course']['data'][0]['imageurl']
    pushdata['classid']=item['content']['id']
    coursedata.append(pushdata)
print("獲取成功:")

for item in coursedata:#打印課程
        print(str(index)+".課程名稱:"+item['name'])
        index+=1
        
while 1:
    for i in range(index):
        time.sleep(speed)#休眠
        taskactivelist(coursedata[i]['courseid'],coursedata[i]['classid'])
        if a==2:
            a=0
        else:           
            print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),'[監控運行中]課程:',coursedata[i]['name'],'未查詢到簽到活動')  

  基於GitHub某倉庫代碼改的,如今因爲找不到原地址在哪兒了。因此若發現侵權,請聯繫我刪除!python

相關文章
相關標籤/搜索