Loggarsi su pagina web

Stato
Discussione chiusa ad ulteriori risposte.

HackLife

Utente Silver
26 Maggio 2008
57
11
0
73
Cheppale direte, hacklife posta solo problemi in questa sezione xD
Avete anche ragione. Comunque: sto cercando di fare un proramma che legga una pagina dopo esservici loggato.
Ammettiamo che c'è pagina tale.jsp in cui ci sono due form, user e pwd e un bottone, "login". Se premo "login" si attiva la funzione javascript "submit()" che a sua volta non fa altro che
Codice:
document.login.submit()[/quote]
btw, user e password sono in un form di input la cui "action" è settata "taleLogon".
Come posso fare si che python si loggi in questa pagina?
 
http://codespeak.net/lxml/lxmlhtml.html#forms

una volta m'è captiato che desse alcuni problemi, ho risolto usando document_fromstring al posto di parse.
 
Geniale Chuzz, grazie! Ora è tardi, ma domani provo 8D
Però non riesco a usarlo... Ottengo un errore se provo ad accedere a .forms dopo aver fatto un _ElementTree da un url... Uhm... Sai cosa potrei sbagliare?
Codice:
from lxml import html
root = html.parse("http://paginaacaso.com")

#AttributeError: 'lxml.etree._ElementTree' object has no attribute 'forms'
 
esattamente il problema che dicevo io... in alcune cose è un po' gay, usando html.parse() parsa con etree, come ho detto si risolve con html.document_fromstring()

inoltre submit form ti fà automaticamente urlopen(), ti devi arrangiare con cookiejar ed urllib2.
 
Almeno ora non mi da errori =P però la lista forms rimane vuota anche se presa da una pagina con form... Mi sa che devo pastrugnarci un po' =)
 
grazie Malex
vorrei precisare:
Codice:
def pastrugnarci(): 
    try:
        getSomeHelp()
    except NobodyCares:
        return "smanettarci da solo"

def getSomeHelp():
    if someoneCares:
         return "Happy!"
    else:
         return False
Cioé, io dico che mi merito un aiuto solo per il tempo che ho perso a scrivere sta stronzata xD
 
MMMh comunque...
l'errore "IOError: [Errno 22] La sintassi del nome del file, della directory o del volume è incorretta", se ottenuto prima ancora di cambiare valore a qualunque campo dalla funzione html.submit_form(form) a cosa può essere dovuto?
 
ok , o quella pagina è scritta veramente da culo, e allora prova a usare il soup parser, o magari fa delle stronzate con l'useragent di urllib, o non lo so
per la seconda domanda, prova controllare che action ha il form.
 
@Chuzz: ha un'azione con un nome "personalizzato" °° Cioé tipo "loginsocietà"....
o quella pagina è scritta veramente da culo
mmmmmm si.
@Rob: Come le regex? Il perl non sono buono...

Ammettendo che la pagina faccia cagare e non ci sia nessuna libreria compatibile per compilare e mandare i form, non è possibile connettersi direttamente alla pagina successiva al login mandando contemporaneamnete le informazioni? Quello che normalmente si potrebbe fare cambiando l'url nel caso la richiesta fosse get...
 
http://docs.python.org/library/urllib.html
il secondo argomento data è per le richieste post
cmq leggiti l'HOWTO ufficiale,
http://docs.python.org/howto/urllib2.html

puoi usare le regexp solo se si tratta di un hack veloce e se la pagina di login è fissa, e allora tanto fare direttamente il POST saltando la pagina di login. magari se ti serve solamente un qualche token.

ho capito perchè viene l'IOError. in pratica l'action è relativa (/login?blabla) e usando fromstring, non aggiunge l'url base (http://www.sitogay.com). sto guardando come risolvere, dovrebbe bastare un
myform.action = base_url + myform.action
 
MMmmm sento che stiamo scivolando sul terreno di "non capisco più un pazzo di quel che viene detto"...
So come funzionano le regex, ma non come usarle per autenticarmi. Né l'howto ufficiale sembra funzionare nel mio caso. Dev'essere una pagina stupida.
tanto fare direttamente il POST saltando la pagina di login
Ma a che pagina devo fare il post?
Ricordo che nella pagina di login non c'è nessuno method specificato, ma al contrario che onkeypress=document.login.submit(). Grazie eh...

Stavo pensando una via alternativa. Python non può mandare codice javascript alla pagina? Come data magari?
 
Robertof ha detto:
Ma scusa allora non sto capendo.
Tu che vuoi fare?

Accedere tramite uno script a una pagina per la quale è richiesto il login. In pratica devo automatizzare il salvataggio su file di una serie di dati protetti da login.
 
:omfg:

quel codice javascript alla fine non non fa altro che inviare il form, eh, come submit_form() o come se premessi il pulsante invia

la pagina a cui fa il post è il valore action, non c'entra (relativamente) method

prima di poter loggare da python devi capire come fa dal browser

tipo il codice che hai scritto tu alla fine si fa così (dall'howto)
Codice:
import urllib
import urllib2

url = 'http://www.someserver.com/loginsocieta/insommaValoreAction'
values = {'user' : 'myuser',
          'pwd' : 'mypassword' }

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()

regexp, lxml et similia servono solo se devi ricavare automaticamente i dati del form.
 
Appunto , io avevo capito il contrario ovvero che doveva prendere dalla pagina web di login dei deati ..
Allora basta fare come ha detto Chuzz.
 
Stato
Discussione chiusa ad ulteriori risposte.