[Python] Mechanize: Cliccare un link con testo uguale a...

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
ubuntumate
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1180
Iscrizione: giovedì 28 maggio 2015, 18:18
Distribuzione: Windows 7
Sesso: Maschile
Località: Milano

[Python] Mechanize: Cliccare un link con testo uguale a...

Messaggio 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
Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
ACM/IEEE Code of ethics.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Python] Mechanize: Cliccare un link con testo uguale a

Messaggio 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?
Ultima modifica di vaeVictis il giovedì 4 giugno 2015, 17:50, modificato 1 volta in totale.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
ubuntumate
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1180
Iscrizione: giovedì 28 maggio 2015, 18:18
Distribuzione: Windows 7
Sesso: Maschile
Località: Milano

Re: [Python] Mechanize: Cliccare un link con testo uguale a

Messaggio 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è.
Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
ACM/IEEE Code of ethics.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Python] Mechanize: Cliccare un link con testo uguale a

Messaggio da vaeVictis »

Posta l'url della pagina, o il sorgente.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
ubuntumate
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1180
Iscrizione: giovedì 28 maggio 2015, 18:18
Distribuzione: Windows 7
Sesso: Maschile
Località: Milano

Re: [Python] Mechanize: Cliccare un link con testo uguale a

Messaggio 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()
Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
ACM/IEEE Code of ethics.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Python] Mechanize: Cliccare un link con testo uguale a

Messaggio da vaeVictis »

Intendevo il sorgente html della pagina in cui devi cliccare "Accedi".
Quindi è "www.openwifimilano.it" ?
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
ubuntumate
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1180
Iscrizione: giovedì 28 maggio 2015, 18:18
Distribuzione: Windows 7
Sesso: Maschile
Località: Milano

Re: [Python] Mechanize: Cliccare un link con testo uguale a

Messaggio 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.
Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
ACM/IEEE Code of ethics.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Python] Mechanize: Cliccare un link con testo uguale a

Messaggio da vaeVictis »

ubuntumate [url=http://forum.ubuntu-it.org/viewtopic.php?p=4765563#p4765563][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: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.
Sì, devi darmi il sorgente tu. Perché, come giustamente dici, se lo apro io non vedo quel link :)
Aspetto allora, ciao :)
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
ubuntumate
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1180
Iscrizione: giovedì 28 maggio 2015, 18:18
Distribuzione: Windows 7
Sesso: Maschile
Località: Milano

Re: [Python] Mechanize: Cliccare un link con testo uguale a

Messaggio 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?
Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
ACM/IEEE Code of ethics.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Python] Mechanize: Cliccare un link con testo uguale a

Messaggio 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

Codice: Seleziona tutto

br.open('http://forum.ubuntu-it.org/')
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 :ciao:

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).
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
ubuntumate
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1180
Iscrizione: giovedì 28 maggio 2015, 18:18
Distribuzione: Windows 7
Sesso: Maschile
Località: Milano

Re: [Python] Mechanize: Cliccare un link con testo uguale a

Messaggio 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>.
Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
ACM/IEEE Code of ethics.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Python] Mechanize: Cliccare un link con testo uguale a

Messaggio da vaeVictis »

Codice: Seleziona tutto

for link in br.links(text_regex='.*Accedi.*'):
  break
else:
  link=None

Codice: Seleziona tutto

if link:
  br.open(link.url)
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Avatar utente
ubuntumate
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1180
Iscrizione: giovedì 28 maggio 2015, 18:18
Distribuzione: Windows 7
Sesso: Maschile
Località: Milano

Re: [Python] Mechanize: Cliccare un link con testo uguale a

Messaggio 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?
Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
ACM/IEEE Code of ethics.
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Python] Mechanize: Cliccare un link con testo uguale a

Messaggio da vaeVictis »

Riporta il codice che ti produce questo errore.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti