Gå til innhold

Anbefalte innlegg

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).

 

 

189872.jpeg

 

 

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
Videoannonse
Annonse

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
  • 4 uker senere...
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

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 av hotstian
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...