itu oto kayıt (test edilmedi)

Posted by admin on February 8, 2012

İTÜ’de gelecek dönem 2. sınıf olacağım ve 2. sınıflar dersleri en son seçiyor. Kontenjan sıkıntısı dorukta demek. Geçen akşam can sıkıntısından ne yapacağımı şaşırmış bir vaziyetteyken, İTÜ’deki 2. sınıfların çilesine çözüm olabilecek bişey yapmak geldi içimden. Henüz tam bitmedi ama 1-2 kod parçasıyla %100 çalışır duruma gelecektir -heralde-. Neden hazır diye soracak olursa zaten ömrümde 1 defa ders kayıt ekranı gördüm 😀 onuda 4-5 sn içersinde doldurup gönderdim. Hatırladığım kadarıyla da bu python scriptini yaptım. Eğer herşeyi doğru hatırlıyorsam sadece 94. satırdaki bir değişikle program çalışır olacak. üst ve alt dönem arkadaşlardan html çıktısı talep edip seçimlerden önce bir update yapacam bu sayfayı. Blogumu takip eden İtü’lülere faydam olsun.

Yalnız, başlıkta da vurguladığım gibi test etme imkanım olmadı ve henüz tam değil. Sorumluluk kabul etmiyorum kısacası.

Ayrıca bu scriptin çalışabilmesi için mechanize kütüphanesini yüklemeniz lazım. İndirmek için: mechanize

Yok ben anlamam python falan diyenler için test edip kullandıktan sonra düzgün çalışırsa bir exe dosyası haline getirebilirim.

Lafı daha fazla uzatmadan işte kodlar (tekrar söylüyorum henüz çalışmaz 94. satıra ders kayıtlarının başlama saatine yakın verdiği uyarıyla ilgili bir ayrıcı kod girilmesi lazım, bunu girdikten sonra bile sorun çıkartabilir. Test etmedim henüz.)

 

import mechanize as mechanize
import re, cookielib
from time import sleep

print """
###########################################################
##               ITU Sis Otokayit programi               ##
###########################################################
## Kullanim icin 4 komut vardir:                         ##
## kur, gir, baslat ve cik.                              ##
## Programi actiktan sonra sirasiyla bu kodlarin         ##
## yonergelerini uygulayin. Saat yaklastiginde baslat    ##
## diyin. Program test asamasindadir. Sorumluluk kabul   ##
## etmez. Sansiniz bol olsun. Simdi kur komutuyla islemi ##
## baslatin.                                             ##
## Not: Itu sis 5 dk islem yapmazsaniz sizi sistemden    ##
## atabilir bu nedenle programi acilmaya 5 dk kala fln   ##
## acmanizi oneririm.                                    ##
###########################################################
"""
kur=False
giris=False
devam=True
cik=False
while cik==False:
    komut=raw_input(u'Komut giriniz:')

    if komut=='kur':
        print "Kurulum baslatiyor. Sisteme program sisteme girmek icin sizden bilgileri alacak."
        user=raw_input(u'kullanici adiniz:')
        sifre=raw_input(u'sifreniz:')
        pin=raw_input(u'pin numarasi:')
        print "Gerekli bilgiler alindi. Simdi alacaginiz dersin crnleri virgulle ayirarak bitisik olarak yaziniz."
        print "ornek:12345,24567,43212"
        crn=raw_input(u'crn:')
        print "Bilgiler kaydedildi. Simdi giris komutunu kullanarak sisteme  dahil olun."
        kur=True

    if komut=="giris":
        if not kur:
            print "Giris yapabilmek icin once kur komutuyla ayarlarinizi girmeniz lazim."
        else:
            br=mechanize.Browser()
            cj = cookielib.LWPCookieJar()
            br.set_cookiejar(cj)
            br.set_handle_robots(False)

            br.open('http://ssb.sis.itu.edu.tr:9000/pls/PROD/twbkwbis.P_WWWLogin')

            br.select_form(nr=0)

            br.form['UsernameTbx']=user
            br.form['PasswordTbx']=sifre

            br.submit()

            br.select_form(nr=0)

            br.form['PIN']=pin

            br.submit()
            print "Giris yapildi. Ders secim sayfasi zorlaniyor..."
            while giris==False:
                try:
                    br.open('http://ssb.sis.itu.edu.tr:9000/pls/PROD/bwskfreg.P_AltPin')
                    br.select_form(nr=0)
                    girdimi=True
                    try:
                        br.submit()
                    except Exception, e:
                        girdimi=False
                    if girdimi:
                        giris=True
                        print "Ders kayit donemi secildi."
                    else:
                        print "Sisteme giris yapildi fakat donem secilemedi. Tekrar deneniyor..."
                        sleep(2)
                except Exception, e:
                    print "Ders kayıt sayfasi aktif degil. Tekrar deneniyor..."
                    sleep(5)

            print "Giris yapildi. Simdi isterseniz baslat komutunu aktif edebilirsiniz."

    if komut=="baslat":
        if not kur:
            print "Baslatabilmek icin once kur komutuyla ayarlarinizi girmeniz ve giris yapmaniz lazim."
        elif not giris:
            print "Baslatabilmek icin once giris yapmaniz lazim."
        else:
            while devam==True:
                try:
                    br.open('http://ssb.sis.itu.edu.tr:9000/pls/PROD/bwskfreg.P_AltPin')
                    html=br.response().read()
                    r=re.search('',html)
                    if r:
                        print "Ders secme islemi henuz baslamadi Tekrar deneniyor..."
                        sleep(2)
                    else:
                        br.select_form(nr=1)
                        crn=crn.split(',')

                        for i in range(1,len(crn)+1):
                            br.form.find_control(id="crn_id"+str(i)).value=crn[i-1]
                        gonder=True
                        try:
                            br.submit(name='REG_BTN', label='Submit Changes')
                        except Exception, e:
                            gonder=False

                        if gonder:
                            print "Programa gore dersler secildi. Basari kontrol ediliyor..."
                            html=br.response().read()
                            r=re.search('Web Kayd',html)
                            if r:
                                print "Ders basariyla secildi."
                                devam=False
                            else:
                                print "Ders secimi olmadi. Panikle itu sis'e girmeyi denesen iyi olur."
                                devam=False
                                print "Programin ders secmeyi tekrar denemesi icin tekrar baslat yazabilirsiniz."
                        else:
                            print "Form gonderilemedi. Tekrar deneniyor..."
                            sleep(2)

                        print br.response().read()
                except Exception, e:
                    print "ITU sis herzamanki gibi yine coktu! Yeniden deniniyor..."
                    sleep(2)

    if komut=="cik":
        print "Programdan cikiliyor. Umarim faydam dokunmustur."
        cik=True