Nordmoen Skrevet 26. april 2008 Del Skrevet 26. april 2008 Hei igjen. Etter langt om lenge og lengere enn langt har jeg funnet ut at jeg nesten må få laget meg et lite program. Forløpig har jeg nesten ikke fått programert noe og bare lest, derfor trenger jeg noe å drive med. Problem stillingen min er at jeg vil prøve å lage et program som kan gå inn på en side som heter Itslearning som vi bruker på skolen og hente ut informasjon om hvilke fag som er highlighted(se spoiler). Problemene er mange for en som ikke kan programmere, men det jeg tenkte det var greit å spørre om er om det er mulig å få python til å logge inn på en side(Itslearning må logges inn på før du får opp siden med fag osv.) for å deretter hente ut informasjonen jeg trenger? Hvis ja, er det også mulig å lagre en bruker sitt brukernavn og passord trygt et sted så man bare trenger å skrive inn brukernavn og passord første gang programmet starter? På forhånd takk Lenke til kommentar
NevroMance Skrevet 26. april 2008 Del Skrevet 26. april 2008 Vil tro python kan gjøre dette, men vet ikke hvordan. Får å lagre brukernavn og passord trygt må du lage deg en krypteringsalgoritme. Så krypterer du passordet og brukernavnet ditt, lagrer de i en fil. Da du starter programmet igjen leser du inn fila og dekrypterer brukernavn og passordet igjen. Mange forskjellige krypteringsalgoritmer ute og går, bare å google for å finne noen. Lenke til kommentar
genstian Skrevet 26. april 2008 Del Skrevet 26. april 2008 Kort sagt ja, det finnes mange biblioteker som kan gjøre det f.eks pycurl eller standard biblioteket (som jeg ikke husker navnet på). Tror du finner noe ved et kjapt google søk. Lenke til kommentar
nercix Skrevet 23. mai 2008 Del Skrevet 23. mai 2008 Vil tro python kan gjøre dette, men vet ikke hvordan. Får å lagre brukernavn og passord trygt må du lage deg en krypteringsalgoritme. Så krypterer du passordet og brukernavnet ditt, lagrer de i en fil. Da du starter programmet igjen leser du inn fila og dekrypterer brukernavn og passordet igjen. Mange forskjellige krypteringsalgoritmer ute og går, bare å google for å finne noen. NEI.... Greitt nok at brukarnamn og passord er kryptert når det blir lagra på disk, men python må dekryptere det. Finner person x både fila med informasjonen, og python-scriptet er det kjapt gjort å dekryptere fila. Elles er det ikkje noko problem å hente ut, når du først får logga deg på må du lagra sessioninformasjonen du får, og hente ut nettsida du vil hente informasjon frå. Etter det er det å bruke regex-søk Lenke til kommentar
genstian Skrevet 23. mai 2008 Del Skrevet 23. mai 2008 (endret) Lagde denne for ei stund siden. Du kan logge inn på nettby med den og (bare for å teste om det virket) få 20 poeng med å poste kommentarer. De virktige fungsjonene her er vel NettByAction classen og login() fungsjonen import urllib import urllib2 import cookielib class NettbyInit: def __init__(self): self.username = "" self.password = "" self.cj = cookielib.CookieJar() self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cj)) self.url = "http://www.nettby.no/" self.f20pCommentID = "20800000" # 'diary_id' of 'edit_diary_comment.php' or 'id' of 'diary_entry' self.userID = '' class NettbyAction: def __init__(self, init, url, get='', post='', req=None, opener=None, headers=None): if not req: if init.userID: get = "user_id="+init.userID+"&"+get self.req = urllib2.Request(init.url+url+'?'+get, post) self.req.add_header("Host", "www.nett by.no") self.req.add_header("Referer", "www.nettby.no") if headers: for head in headers: req.req.add_header(head, headers[head]) else: self.req = req if not opener: self.resp = init.opener.open(self.req) else: self.resp = opener.open(self.req) class Nettby: def __init__(self): self.loop = True self.init = NettbyInit() self.loggedin = False self.cookies = {} self.action = '' while self.loop: if not self.loggedin: self.login() elif action == '0': self.logout() break elif action == '1': print "'0' : Quit" print "'1' : This help" print "'2' : My 20points fast hack" elif action == '2': self.fast20p() if self.loggedin and self.loop: action = raw_input("What to do('1' for help, '0' to quit)? ") def login(self): if not self.init.username: self.init.username = raw_input("Nettby Username: ") if not self.init.password: self.init.password = raw_input("Nettby Password: ") obj = NettbyAction(self.init, "sb_login.php", post=urllib.urlencode({'email': self.init.username,'password': self.init.password})) for c in self.init.cj: print c.name, " : ", c.value self.cookies[c.name] = c.value if 'user_id3' in self.cookies and 'key3' in self.cookies: print "Login Complete!\n" self.loggedin = True self.init.userID = self.cookies["user_id3"] else: print "Login Failed!\n" self.loop = False def logout(self, send=True, reset=True): # Send logout to nettby if send: obj = NettbyAction(self.init, "sb_logout.php", get=urllib.urlencode({"key":self.cookies["key3"]})) print obj.resp.read() #reset objects if reset: self.init.cj = cookielib.CookieJar() self.init.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.init.cj)) self.init.userID = '' self.loggedin = False self.cookies = {} def fast20p(self): if not self.init.f20pCommentID: print "You have to set a commentID in nettpy.py (NettbyInit class)" else: print "Started 20points hack, this takes about 10-15sec" i = 1 while i != 20: obj = NettbyAction(self.init, "user/sb_diary_comment.php", 'diary_id='+self.init.f20pCommentID, 'comment=NettBy%s' % i) i += 1 Nettby() Mini code for login import urllib, urllib2, cookielib cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) def action(url, get, post): global opener, cj req = urllib2.Request(url+'?'+urllib.urlencode(get), urllib.urlencode(post)) req.add_header("Host", "nettside.no") req.add_header("Referer", "nettside.no") # Mange sider tilatter bare request fra sin egen side, disse faker det return opener.open(req) resp = action("http://nettside.no/login.php", {"GET_username":"test", "GET_passord":"123"}, {"POST_username":"test", "POST_passord":"123"}) print resp.read() # Printer du siden du fikk etter innlogging # Print cookiene du fikk for c in cj: print c.name, " : ", c.value Utestet, håper den virker. EDIT: For å hente du data må du lage/bruke en parser som leser seg frem til den dataen du vil ha basert på den dataen du fikk av serveren (resp.read()) Endret 23. mai 2008 av hotstian Lenke til kommentar
Bjonski Skrevet 23. mai 2008 Del Skrevet 23. mai 2008 Stian, du burde fjerne brukernavn og passord fra scriptet. Folk kan misbruke det. Lenke til kommentar
genstian Skrevet 23. mai 2008 Del Skrevet 23. mai 2008 Oi, trodde det ikke var med i scriptet Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå