首页 > 编程语言 > 详细

Python实现方正抢课

时间:2015-09-09 16:47:50      阅读:649      评论: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(r‘alert.*?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(r‘id="__EVENTVALIDATION" value=.*"‘,response)
    __EVENTVALIDATION = __EVENTVALIDATION[0]
    __EVENTVALIDATION = __EVENTVALIDATION[30:-1]
    return __EVENTVALIDATION

def GetState(response):
    __VIEWSTATE = re.findall(r‘id="__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(r‘xkkh=.*?&xh=‘,find_list2[Newchoose])
        else:
            choostr1 = re.findall(r‘xkkh=.*?&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)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!