码迷,mamicode.com
首页 > 编程语言 > 详细

Python实现方正抢课

时间:2015-09-09 16:48:07      阅读:825      评论:0      收藏:0      [点我收藏+]

标签:

import urllib
import urllib.request
import os
from bs4 import BeautifulSoup
import http.cookiejar
import re


cj = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
urllib.request.install_opener(opener)



def ShuaKe(DataList,i):
    request = urllib.request.Request(url=DataList[1],data=DataList[0])
    request.add_header(User-Agent,Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 OPR/29.0.1795.47)
    try:
        print("SETP1")
        urllib.request.urlopen(request)
    except:
        print("setp 1 ERROR")
        return 1

    loop = 2
    while loop < len(DataList):
        req = urllib.request.Request(DataList[loop+1],DataList[loop])
        req.add_header(User-Agent,Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 OPR/29.0.1795.47)
        try:
            rep=urllib.request.urlopen(req)
            html = rep.read().decode(gbk)
            result = re.findall(ralert.*?script,html)
            result = result[0][7:-11]
            print("正在刷课[消息反馈]:",result)    
        except :
            print("setp 2 ERROR")
            return 1
        loop = loop + 2





def GetTeacherInfo(TeachList,html):
    i=0
    Newstr = ‘‘
    soup =  BeautifulSoup(html, "html.parser")

    for tabb in soup.findAll(table)[0:1]:
        for trr in tabb.findAll(tr)[1:]:
            for tdd in trr.findAll(td)[1:6]:
                if i==0:
                    Newstr += str(tdd)
                    i += 1
                if i==5:
                    Newstr += str(tdd)
                    i+=1
                i+=1
            i = 0
            TeachList.append(Newstr)
            Newstr = ‘‘



def PostData(Data):
    postdata = urllib.parse.urlencode(Data).encode(utf-8)
    return postdata


def RequsetCreate(Url = None,Data = None,Header = {}):
    Req = urllib.request.Request(url = Url,data= Data,headers = Header)
    try:
        rep = urllib.request.urlopen(Req).read().decode(gbk)
        return rep
    except Exception as reason:
        print("出现错误,原因如下:" + str(reason))


def GetTion(response):
    __EVENTVALIDATION = re.findall(rid="__EVENTVALIDATION" value=.*",response)
    __EVENTVALIDATION = __EVENTVALIDATION[0]
    __EVENTVALIDATION = __EVENTVALIDATION[30:-1]
    return __EVENTVALIDATION

def GetState(response):
    __VIEWSTATE = re.findall(rid="__VIEWSTATE" value=.*",response)
    __VIEWSTATE = __VIEWSTATE[0]
    __VIEWSTATE = __VIEWSTATE[24:-1]
    return __VIEWSTATE


def GetName(reponse):
    result = re.findall(r<span id="xhxm">.*?同学,reponse)
    result = result[0][16:-2]
    print("欢迎您:"+result)
    return result

def GetUnicodeUrl(name,Site):
    b = ""
    for item in name:
        b += "%u" + "%x"%ord(item)
        UnicodeUrl = http://xk+str(Site)+.ahu.cn/xsxk.aspx?xh=+Username+&xm=+b+&gnmkdm=N121101
    return UnicodeUrl

def GetGbkUrl(name,Site):
    restr = str(name.encode(gbk))
    restr = restr.replace(r\x,%)
    restr = restr[2:-1]
    DeskTableUrl = http://xk+str(Site)+.ahu.cn/xsxk.aspx?xh=+Username+&xm=+restr+&gnmkdm=N121101
    return DeskTableUrl

def Login(SiteUrl,Username,Password,Site,DrDl_Nj):
    Site = Site + 1
    rep = RequsetCreate(Url= SiteUrl)
    __VIEWSTATE = GetState(rep)
    __EVENTVALIDATION = GetTion(rep)

    postdata = {
        __VIEWSTATE:__VIEWSTATE,
        tname:‘‘,
        tbtns:‘‘,
        tnameXw:yhdl,
        tbtnsXw:yhdl|xwxsdl,
        txtYhm:Username,
        txtXm:‘‘,
        txtMm:Password,
        rblJs:‘‘,
        btnDl:‘‘,
        __EVENTVALIDATION:__EVENTVALIDATION
    }
    postdata = PostData(postdata)
    PostList.append(postdata)
    PostList.append(SiteUrl)
    f = RequsetCreate(Url=SiteUrl,Data=postdata)
    try:
        name = GetName(f)
        UnicodeUrl = GetUnicodeUrl(name,Site)
        #print(UnicodeUrl)
        GbkUrl = GetGbkUrl(name,Site)
        #print(UnicodeUrl,GbkUrl)
    except Exception as reason:
        print("您输入的账号密码可能有错!程序错误原因如下:" + str(reason))


    print("1:手动选课")
    print("2:自动选课")
    input_value = int(input("请选择(1/2):"))
    if input_value == 1:
        while True:
            ChooseUrl = input("请输入链接:")
            ChoosePost = input("请输入PostData数据:")
            ChoosePost = ChoosePost.encode(utf-8)
            PostList.append(ChoosePost)
            PostList.append(ChooseUrl)
            global Value
            FUCK = input(是否继续添加需选课程->(Y or N):)
            if FUCK == Y or FUCK ==y:
                pass
            else:
                Value = 1
                break
        return 0
    else:
        pass
        
    print("自动获取选课参数仅支持特殊课程和体育课,跨专业和素质课只能手动输入参数。")
    print("然而手动怎么输,等我以后写了博客再发。。。")
    print(1:特殊课程)
    print(2:选体育课)
    Choose = int(input("请选择:(1/2):"))
    header = {
        Referer:http://xk+str(Site)+.ahu.cn/xs_main.aspx?xh=+Username,
        }
    rep = RequsetCreate(GbkUrl,Header = header)
    __VIEWSTATE = GetState(rep)
    __EVENTVALIDATION = GetTion(rep)
    postdata = {
        __EVENTTARGET:‘‘,
        __EVENTARGUMENT:‘‘,
        __LASTFOCUS:‘‘,
        __VIEWSTATE:__VIEWSTATE,
        DrDl_Nj:DrDl_Nj,
        zymc:‘‘,
        xx:‘‘,
        Button2:%D1%A1%D0%DE%BF%CE%B3%CC,
        __EVENTVALIDATION:__EVENTVALIDATION
    }
    postdata = PostData(postdata)
    rep = RequsetCreate(UnicodeUrl,Data = postdata)


    if Choose == 1:
        __VIEWSTATE = GetState(rep)
        __EVENTVALIDATION = GetTion(rep)
        postdata = {
            __EVENTTARGET:‘‘,
            __EVENTARGUMENT:‘‘,
            __LASTFOCUS:‘‘,
            __VIEWSTATE:__VIEWSTATE,
            DrDl_Nj:DrDl_Nj,
            zymc:‘‘,
            xx:‘‘,
            Button3:%CC%D8%CA%E2%BF%CE%B3%CC,
            __EVENTVALIDATION:__EVENTVALIDATION,
        }
        nums = 0
        postdata = PostData(postdata)
        rep = RequsetCreate(UnicodeUrl,Data=postdata)
        __VIEWSTATE = GetState(rep)
        __EVENTVALIDATION = GetTion(rep)

        find_list1 = re.findall(xsxjs.aspx\?xkkh.*?&nbsp,rep)
        for i in range(0,len(find_list1)):
            get_str = find_list1[i]
            get_str = get_str[426:437]
            print(nums,":",get_str)
            nums += 1


        postdata = {
            __EVENTTARGET:kcmcgrid$ctl14$ctl01,
            __EVENTARGUMENT:‘‘,
            __LASTFOCUS:‘‘,
            __VIEWSTATE:__VIEWSTATE,
            DrDl_Nj:DrDl_Nj,
            zymc:‘‘,
            xx:‘‘,
            __EVENTVALIDATION:__EVENTVALIDATION
        }

        postdata = PostData(postdata)
        rep = RequsetCreate(UnicodeUrl,Data=postdata)
        find_list2 = re.findall(xsxjs.aspx\?xkkh.*?&nbsp,rep)
        for i in range(0,len(find_list2)):
            get_str = find_list2[i]
            get_str = get_str[426:437]
            print(nums,":",get_str)
            nums += 1

        choose2 = int(input("请选择编号:"))
        if choose2 > 9:
            Newchoose = choose2 - 10
            choostr1 = re.findall(rxkkh=.*?&xh=,find_list2[Newchoose])
        else:
            choostr1 = re.findall(rxkkh=.*?&xh=,find_list1[choose2])


        choostr1 = choostr1[0]
        choostr1 = choostr1[5:-4]
        GetChUrl = SiteUrl[0:17]+/xsxjs.aspx?xkkh=+choostr1 +&xh=+Username

        header = {
            Referer:UnicodeUrl,
            User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 OPR/29.0.1795.47
        }
        #Url = None,Data = None,Header = {}
        req =RequsetCreate(Url = GetChUrl,Header = header)

        __VIEWSTATE = GetState(req)
        __EVENTVALIDATION = GetTion(req)

        TeachList = []
        GetTeacherInfo(TeachList,req)

        for i in range(0,len(TeachList)):
            print(i,":",TeachList[i][207:210],TeachList[i][222:-5])

        choose3 = int(input("选择哪位老师:"))
        choostr2 = TeachList[choose3][70:99]
        postdata = {
            __EVENTTARGET:Button1,
            __EVENTARGUMENT:‘‘,
            __VIEWSTATE:__VIEWSTATE,
            xkkh:choostr2,
            RadioButtonList1:0,
            __EVENTVALIDATION:__EVENTVALIDATION
        }

        postdata = PostData(postdata)
        PostList.append(postdata)
        PostList.append(GetChUrl)


    if Choose == 2:
        nums = 0
        UnicodeUrl = http://xk+str(Site)+.ahu.cn/xstyk.aspx?xh=+Username+&xm=+UnicodeUrl[44:-15]+&gnmkdm=N121102
        GbkUrl = http://xk+str(Site)+.ahu.cn/xstyk.aspx?xh=+Username+&xm=+GbkUrl[44:-15]+&gnmkdm=N121102
        rep = RequsetCreate(GbkUrl)
        __VIEWSTATE = GetState(rep)
        __EVENTVALIDATION = GetTion(rep)
        soup = BeautifulSoup(rep,"html.parser")
        List = []
        for option in soup.findAll(option)[3:-1]:
            option=str(option)
            List.append(option)
            print(str(nums),":",option[24:-9])
            nums += 1

        choose2 = int(input("请选择编号:"))
        choostr1 = List[choose2]
        choostr1 = choostr1[15:22]
        postdata = {
            __EVENTTARGET:ListBox1,
            __EVENTARGUMENT:‘‘,
            __LASTFOCUS:‘‘,
            __VIEWSTATE:__VIEWSTATE,
            DropDownList1:%CF%EE%C4%BF,
            ListBox1:choostr1,
            __EVENTVALIDATION:__EVENTVALIDATION
        }

        postdata = urllib.parse.urlencode(postdata)
        postdata = postdata.replace(%25CF%25EE%25C4%25BF,%CF%EE%C4%BF)
        postdata = postdata.encode(utf-8)

        req = urllib.request.Request(url=GbkUrl,data=postdata)
        req.add_header(Referer,GbkUrl)
        rep = urllib.request.urlopen(req)
        rep = rep.read().decode(gbk)
        __VIEWSTATE = GetState(rep)
        __EVENTVALIDATION = GetTion(rep)
        List=[]
        temp = nums+3
        nums = 0
        soup = BeautifulSoup(rep,"html.parser")
        for option in soup.findAll(option)[temp:-1]:
            option=str(option)
            List.append(option)
            print(str(nums),":",option[93:-21])
            nums += 1

        choose3 = int(input("请输入老师编号:"))
        choostr2 = List[choose3]
        choostr2 = choostr2[15:77]
        postdata = {
            __EVENTTARGET:ListBox2,
            __EVENTARGUMENT:‘‘,
            __LASTFOCUS:‘‘,
            __VIEWSTATE:__VIEWSTATE,
            DropDownList1:%CF%EE%C4%BF,
            ListBox1:choostr1,
            ListBox2:choostr2,
            __EVENTVALIDATION:__EVENTVALIDATION
        }
        postdata = urllib.parse.urlencode(postdata)
        postdata = postdata.replace(%25CF%25EE%25C4%25BF,%CF%EE%C4%BF)
        postdata = postdata.encode(utf-8)

        req = urllib.request.Request(url=UnicodeUrl,data=postdata)
        rep = urllib.request.urlopen(req)
        rep = rep.read().decode(gbk)
        __VIEWSTATE = GetState(rep)
        __EVENTVALIDATION = GetTion(rep)
        postdata = {
            __EVENTTARGET:‘‘,
            __EVENTARGUMENT:‘‘,
            __LASTFOCUS:‘‘,
            __VIEWSTATE:__VIEWSTATE,
            DropDownList1:%CF%EE%C4%BF,
            ListBox1:choostr1,
            ListBox2:choostr2,
            RadioButtonList1:0,
            button3:%D1%A1%B6%A8%BF%CE%B3%CC,
            __EVENTVALIDATION:__EVENTVALIDATION
        }
        postdata = urllib.parse.urlencode(postdata)
        postdata = postdata.replace(%25CF%25EE%25C4%25BF,%CF%EE%C4%BF)
        postdata = postdata.replace(%25D1%25A1%25B6%25A8%25BF%25CE%25B3%25CC,%D1%A1%B6%A8%BF%CE%B3%CC)
        postdata = postdata.encode(utf-8)
        PostList.append(postdata)
        PostList.append(GbkUrl)

















        


    

if __name__ == __main__:
    Value = 0
    PostList = []
    URLlist = [http://xk1.ahu.cn/default6.aspx,http://xk2.ahu.cn/default6.aspx,
            http://xk3.ahu.cn/default6.aspx,http://xk4.ahu.cn/default6.aspx,]
    print("有BUG请联系QQ:79235629,信安大神王日天、")
    Username = input("请输入用户名:")
    Password = input("请输入密码:")
    Site = int(input("请输入站点(0~3):"))
    DrDl_Nj = input("请输入年级(如2014):")
    # Username = ‘E41414005‘
    # Password = ‘12345678Aa~‘
    # Site=2
    # DrDl_Nj=‘2014‘
    Login(URLlist[Site],Username,Password,Site,DrDl_Nj)
    while True:
        if Value == 1:
            break
        FUCK = input(是否继续添加需选课程->(Y or N):)
        if FUCK == Y or FUCK ==y:
            Login(URLlist[Site],Username,Password,Site,DrDl_Nj)
        else:
            break


    #print(PostList)
    while True:
        ShuaKe(PostList,Site)


    

 

Python实现方正抢课

标签:

原文地址:http://www.cnblogs.com/You0/p/4794850.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!