Pagina 1 di 1
[Python] Mechanize: Cliccare un link con testo uguale a...
Inviato: giovedì 4 giugno 2015, 17:35
da ubuntumate
Ciao a tutti!
Siccome sono pigro ma pazzo,vorrei scrivere uno piccolo programmino che quando ,esco col portatile,mi permetta di loggarmi nella rete del comune in automatico,premendo solo un pulsante.La pagine iniziale contiene un link con testo accedi che mi reindirizza al form che chiede numero di telefono e password.Il problema è come fare a individuare il link Accedi,cliccarlo e farsi portare alla pagina del login e loggarsi per poter usufruire del servizio.Ecco quello cho ho combinato:
Codice: Seleziona tutto
def follow():
browser = Browser() # istanza di Mechanize.Browser()
browser.set_handle_robots(False) # Chissenefrega,io visito tutto quel che mi pare
response = browser.open(http://paginalogin) # apro la pagina del login
iter = browser.links(text_regex=Accedi) # cerco il link <a .......>Accedi</a> e ottengo un iteratore
for link in iter:
print link # in teoria dovrei stampare tutti gli url che hanno Accedi come testo e dovrei cliccarli
# qui com faccio a seguire il link e compilare il form?
return 0
Re: [Python] Mechanize: Cliccare un link con testo uguale a
Inviato: giovedì 4 giugno 2015, 17:37
da vaeVictis
Domanda: stai facendo tutto questo perché poi pensi che se accedi al sito con il browser sei già loggato?
Se la risposta è sì, non funziona
Detto questo, non devi seguire i link, ma cercare il form del login. Hai fatto qualche ricerca online? Ci stanno tonnellate di esempi.
Cerca "mechanize login form how to" e trovi tutto
edit:
credo di non aver capito cosa devi fare. Devi loggarti o cliccare un link?
Re: [Python] Mechanize: Cliccare un link con testo uguale a
Inviato: giovedì 4 giugno 2015, 18:00
da ubuntumate
Non ho capito la prima domanda,scusami.
Si ho già cercato su internet ovviamente,ma il fatto è che non posso andare direttamente alla pagina del login perchè mi dà il famoso 404,perchè il sito deve prima recuperare il MAC e l'ip(per sicurezza credo,avranno associato account-dispositivo)tramite l'homepage e poi tramite il link "Accedi" ti rimanda al form.È questo il cuore del problema,altrimenti se dovessi farlo per questo forum andrei direttamente alla pagina di login e mi loggherei.Per questo ci sono davvero tonnellate di guide su stackoverflow.
Risposta a edit: Devo cliccare un link nella home page che mi porta alla pagina di login per poi compilare il form.Come spiegato sopra è neccessario passare per la home page ahimè.
Re: [Python] Mechanize: Cliccare un link con testo uguale a
Inviato: giovedì 4 giugno 2015, 18:02
da vaeVictis
Posta l'url della pagina, o il sorgente.
Re: [Python] Mechanize: Cliccare un link con testo uguale a
Inviato: giovedì 4 giugno 2015, 18:12
da ubuntumate
Questo è il sorgente e naturalmente ho cambiato numero e password per motivi ovvi.
Codice: Seleziona tutto
from mechanize import Browser
numero="3333333333"
password="password"
def login():
browser = Browser()
browser.set_handle_robots(False)
response = browser.open("http://www.openwifimilano.it")
iter = browser.links(text_regex="Accedi")
# qui devo trovare il link per accedere
login()
Re: [Python] Mechanize: Cliccare un link con testo uguale a
Inviato: giovedì 4 giugno 2015, 18:15
da vaeVictis
Intendevo il sorgente html della pagina in cui devi cliccare "Accedi".
Quindi è "
www.openwifimilano.it" ?
Re: [Python] Mechanize: Cliccare un link con testo uguale a
Inviato: giovedì 4 giugno 2015, 18:20
da ubuntumate
Adesso sono a casa,se faccio CTRL + U sul sito indicato non si vede "Accedi" perchè sono su quella rete,ma quella di casa.Se vai sul sito openwifimilano.it vedi solo un'introduzione del servizio.Appena esco,mi salvo il sorgente.
Re: [Python] Mechanize: Cliccare un link con testo uguale a
Inviato: giovedì 4 giugno 2015, 18:28
da vaeVictis
Sì, devi darmi il sorgente tu. Perché, come giustamente dici, se lo apro io non vedo quel link

Aspetto allora, ciao

Re: [Python] Mechanize: Cliccare un link con testo uguale a
Inviato: giovedì 4 giugno 2015, 18:46
da ubuntumate
Volendo posso fare una prova con
il nostro forum,cliccando sulla voce "forum" e poi "Accedi".Tanto il concetto è quello,solo che posso farlo da casa senza spostarmi.
Codice: Seleziona tutto
from mechanize import Browser
br = Browser()
response = br.open("http://www.ubuntu-it.org")
# Ora come clicco su " forum"?
br.follow_link(text_regex="forum") # va bene?
Re: [Python] Mechanize: Cliccare un link con testo uguale a
Inviato: giovedì 4 giugno 2015, 21:32
da vaeVictis
Facciamo riferimento a questo forum.
Importi il Browser dal modulo mechanize e lo imposti come hai fatto
Codice: Seleziona tutto
from mechanize import Browser
br = Browser()
br.set_handle_robots(False)
Apri la pagina principale del forum
Cerchi il "link" del login
Codice: Seleziona tutto
for link in br.links():
if link.url.endswith('login'):
break
else: #linea aggiunta
link=None #linea aggiunta
Lo "clicchi"
Codice: Seleziona tutto
if link: #linea aggiunta, con i due spazi sotto
br.follow_link(link)
Al che, sei nella pagina del login.
Ora, per cercare il "link" puoi fare in diversi modi. Io ho usato un if di controllo sulla parte finale dell'url. Quando "pizzico" un link il cui url termina con la parola "login", tramite il break interrompo il ciclo for, quindi la variabile di nome link contiene l'url desiderato. Url che poi "clicco" con follow_link. Se riadatti al tuo caso la condizione che vedi nell'if, credo tu risolva il problema.
Fammi sapere
edit:
Ho editato il codice, contrassegnandoti le linee che ho aggiunto.
Con il codice aggiunto, controlli di aver preso proprio il link che stai selezionando e non l'ultimo dell'iterazione for (l'else viene eseguito se (e in caso dopo che) l'ultima iterazione non va a buon fine. Per questo, se non trova quello che cerchi, imposta a None la variabile link, cosa che puoi controllare prima di fare operazioni sulla variabile).
Re: [Python] Mechanize: Cliccare un link con testo uguale a
Inviato: venerdì 5 giugno 2015, 14:11
da ubuntumate
Ottimo! Grazie mille per l'aiuto!
Adesso provo ad adattarlo al mio caso,usando sempre questo forum come riferimento(fino a settimana prossima non ho modo di recuperare il sorgente),usando però regex al posto di endswith.Vorrei seguire un link in base a quel che sta in mezzo ai tag <a> </a>.
Re: [Python] Mechanize: Cliccare un link con testo uguale a
Inviato: venerdì 5 giugno 2015, 14:36
da vaeVictis
Codice: Seleziona tutto
for link in br.links(text_regex='.*Accedi.*'):
break
else:
link=None
Re: [Python] Mechanize: Cliccare un link con testo uguale a
Inviato: venerdì 12 giugno 2015, 12:17
da ubuntumate
Grazie per la risposta che si è rivelara risolutrice .
L'ultimo problema che ho sorge quando voglio comporre l'url: ad esempio se faccio
Codice: Seleziona tutto
utente = "user"
url = "www.sito.it/utente =" + utente .....etc
br.open(url)
mi dice "TypeError: cannot concatenate 'str' and 'builtin_function_or_method' objects".Come faccio a comporre un 'url?
Re: [Python] Mechanize: Cliccare un link con testo uguale a
Inviato: venerdì 12 giugno 2015, 13:57
da vaeVictis
Riporta il codice che ti produce questo errore.