Eseguire click in pagina web con script

Area di discussione libera.

Moderatore: Staff

Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3803
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Eseguire click in pagina web con script

Messaggio da joe »

Mailnesia punto com è un sito che fornisce una casella di posta temporanea, non richiede registrazione ecc... vorrei eliminare tutti i messaggi di una casella di posta utilizzando uno script, tipo via curl, per poi integrare l'operazione in uno script bash ad esempio, ma potrebbe non bastare curl, e allora ben vengano soluzioni differenti.

Mi aiuto con un esempio concreto. Creo una casella email su mailnesia, potete farlo anche voi da "mailnesia.com", è sufficiente scrivere una parola nel form e avrete fatto, quella parola sarò il vostro indirizzo, io ad esempio scrivo slacky (non è vero, ma quasi):

https://mailnesia.com/mailbox/slacky

All'indirizzo sopra si trova la pagina che rappresenta in pratica la webmail della nostra casella.

Ora invio un messaggio di test:

Codice: Seleziona tutto

echo -e "From: joe@invalid.invalid\nSubject: Test Slacky" | sendmail slacky@mailnesia.com
A questo punto nella nostra casella via browser basta fare il reload della pagina ed ecco che appare il nuovo messaggio. Su slackware dovrebbe essere presente e funzionante il comando sendmail anche a voi.

Ora vogliamo svuotare la casella email, c'è il bottone del cestino in alto a sinistra "delete all mail".
Si può cliccare ed ecco che ci chiede conferma, confermiamo e, nel mio caso dopo aver di nuovo ricaricato la pagina, la casella appare di nuovo vuota.

Come posso realizzare questo passaggio con curl o similare sistema da mettere in comandi script?
Io stavo provando ad analizzare la fazenda con webdevtools in firefox. ma dopo qualche tentativo alla carolna, chiedo qui. Non so se sia necessario preparare headers, cookies e tutto quanto in modo da replicare una sessione di collegamento e comunque poi non saprei come tradurre la pressione del bottone in un comando curl, non so neanche se sia possibile...

Fare la prova è semplicissimo rapido ed indolore, per cui se siete ferrati in questo campo non vi sarà difficile fare una prova, e anche trovare la soluzione credo.
Mi piacerebbe capire questo meccanismo, per cui grazie in anticipo a chi vuole provare! ;)

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Eseguire click in pagina web con script

Messaggio da targzeta »

Devi riprodurre i passi del browser. Vedi cosa manda il browser e mandali via curl. Di solito si tratta, appunto, di mandare header e contenuti particolari, niente di più. Se devi simulare una sessione (abbastanza probabile), allora devi iniziarla, via curl, prendere il cookie dalla risposta e poi mandarlo nelle richieste successive.

Qui su due piedi non posso fare un test, però non è una cosa complicata. Secondo me, se ci ti metti riesci. Sia curl che wget ti permettono di fare tutte queste cose.

Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3803
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Eseguire click in pagina web con script

Messaggio da joe »

Grazie dell'appoggio.
È che non sono un drago con l'interpretazione dei dev tools di Firefox. Però mi piacerebbe imparare questo "magheggio"... mi sembra di tornare a secoli fa quando c'era il giochino "haxtor" per hackers in erba. :lol:

Ho cercato parecchio prima di postare proprio per vedere se lo trovavo spiegato magari con un esempio pratico in rete anche cercando tra vari video del tubo. Alla fine mi sono arreso e ho provato a chiedere qui.
Intuisco che la cosa non sia difficile, ma mi manca qualche base sulla parte di web scripts e simili. Ma soprattutto nei vari strumenti sviluppatore di Firefox ad esempio, bisogna sapere dove e cosa guardare.

Se ti va di darmi qualche dritta, sono tutt'orecchi... o tutto schermo. ;)
Partiamo dall'esempio:

1. mi invio una mail all'indirizzo mailnesia, così c'è qualcosa da cancellare
2. mi collego con Firefox alla pagina della mia casella mailnesia
3. apro i dev tools (F12 su Firefox)
4. seleziono la scheda rete
5. nella pagina della casella mail, clicco il cestino e do conferma di cancellazione di tutte le mail mail
6. nella scheda rete dei dev tools si è aggiunta una nuova riga (stato 200, metodo POST, dominio "mailnesia.com"; file "nomecasella" esempio "slacky" - in realtà passando sopra col mouse sarebbe un indirizzo tipo "https://mailnesia.com/mailbox/slacky"; iniziatore "jquery.min.js:4(xhr)"; tipo "html")
7. se clicco su questa nuova riga si ottengono vari altri dettagli, in pratica varie altre schede che riguardano la richiesta eseguita cliccando la conferma di cancellazione: Header, Cookie, Richiesta, Risposta, Tempi, Analisi dello stack, Sicurezza

Va be' mi fermo qui con la descrizione e aspetto qualche hint su cosa andare a vedere... aggiungo che ad esempio nella scheda "richiesta" si trova:

Codice: Seleziona tutto

delete	"1"
Il che è abbastanza esplicativo, anche se non ho idea di come riutilizzarlo in curl, tanto per dire.

Spero che l'esempio così descritto aiuti a mettere qualche elemento in più per orientarci un attimo più nel pratico, aggiungo che ho descritto quello che ho fatto, ma completamente a naso e a casaccio. Non ho idea se "si faccia così" o si debba analizzare diversamente l'azione... per cui prendete con le pinze le mie osservazioni da ignorante sul tema dev tools.

Grazie ancora della risposta! :D

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3803
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Eseguire click in pagina web con script

Messaggio da joe »

Allora, cercando un po' sul tubo ieri ho trovato qualche video che dà l'idea di come "scoprire" quale comando cURL riceve il server quando premiamo il bottone di conferma della cancellazione dei messaggi. Il discorso è abbastanza generico e credo che la procedura si possa seguire almeno in parte anche per altri siti, poi bisogna vedere come sono costruiti, io purtroppo a livello web e vari script sono una capra, per cui vi riporto la parte pratica.

Il sito di mailnesia permette di raggiungere la mailbox "example" all'indirizzo del tipo:

https://mailnesia.com/mailbox/example

Poniamo che nella casella vi siano dei messaggi e che si voglia cancellarli tutti, di fatto svuotandola.
Via interfaccia web clicchiamo sull'icona "cestino", salta fuori un popup che richiede la conferma, premiamo OK e la casella si svuota.

Se mentre eseguiamo questi click abbiamo preventivamente aperto la finestra degli strumenti sviluppatore, "dev tools", in Firefox si apre ad esempio con "F12", possiamo capire qualcosa in più.
Vediamolo in step sinteticamente:
  • Apriamo l'indirizzo della casella mailnesia nel browser
  • Premiamo F12 per aprire la finestra dev tools (che sarà relativa alla pagina precedente cioè sempre la casella mailnesia)
  • Nei dev tools ci spostiamo nella scheda "rete".
  • osserviamo varie richieste aventi tutte il metodo "GET"
  • torniamo nella finestra della pagina mailnesia e clicchiamo il cestino per eliminare tutti i messaggi presenti, confermiamo al pop up
  • ed ecco che nella finestra dev tools si aggiunge una richiesta, sta volta avente metodo "POST"
  • click destro sulla richiesta, "copia valore", "copia con cURL"
Ora abbiamo nella clipboard, pronto da incollare nella shell, il comando cURL per eliminare tutti i messaggi della casella mailnesia. Il comando contiene vari header e diversa roba che di fatto può essere scremata. Io sono andato ad intuito e ho sintetizzato il seguente comando:

Codice: Seleziona tutto

curl 'https://mailnesia.com/mailbox/example' -X POST --data-raw 'delete=1'
Ho provato e funziona. Per cui missione compiuta. :thumbright:
Continua...

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3803
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Eseguire click in pagina web con script

Messaggio da joe »

Va bene, volevo solo aggiungere che a quel punto il server risponde con:

Codice: Seleziona tutto

<div class="alert-message success">Deleted all emails in example</div>
E quindi conferma lo svuotamento della casella, basta poi premere F5 per ricaricare la pagina e constatiamo che effettivamente non ci sono più messaggi.

Per la cronaca la casella email "example" esiste davvero su mailnesia, è infatti una parola piuttosto ovvia, come anche il classico "pippo"...
Queste caselle evidentemente sono state scelte da qualcuno per iscriversi a vari servizi di poco conto e sono finite per diventare ricettacoli di spam.

Mailnesia però mette a disposizione la possibilità di associare uno o più alias ad una certa casella.
Ad esempio io potrei scegliere "heyjoe" come casella mailnesa, e poi collegarci un alias tipo "joe". Così se in vari form di registrazione utilizzo l'indirizzo "joe at mailnesia", posso in seguito sganciarlo in modo che non mi arrivi spam sulla casella vera "heyjoe at mailnesia".
Il giochino della cancellazione così come la visualizzazione del contenuto non riescono su un indirizzo alias, se io cercassi di visionare il contenuto di "joe at mailnesia" mi risponde picche. Il che rende questo servizio un attimo meno esposto.

Aggiungo che si può anche visualizzare il contenuto della casella via "rss", anche da shell con curl, ad esempio così si ha un'idea speditiva dei messaggi presenti:

Codice: Seleziona tutto

curl https://mailnesia.com/rss/example 2>/dev/null |grep '<title>'
Così si vede anche il link corrispondente al messaggio:

Codice: Seleziona tutto

curl https://mailnesia.com/rss/example 2>/dev/null |grep A1 '<title>'

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Eseguire click in pagina web con script

Messaggio da targzeta »

joe ha scritto:
lun 15 apr 2024, 12:58
...

Codice: Seleziona tutto

curl 'https://mailnesia.com/mailbox/example' -X POST --data-raw 'delete=1'
Appena eseguito ed appena cancellato tutto :D.

Te l'avevo detto che ce l'avresti fatta!!

Grazie per la condivisione,
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3803
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Eseguire click in pagina web con script

Messaggio da joe »

:lol:
Eppure nella documentazione si suggeriva di usare "example". Vatti a fidare!
In ogni caso era una casella piena di spam e facilmente si riempirà di altrettanta robaccia in futuro, non hai fatto un gran danno.

Io invece mi stavo chiedendo come mai non funzioni per bene il tentativo di invio di un messaggio mail dal mio sistema "localhost" per capirci a una casella mailnesia.com.
Quello che mi insospettisce è che i messaggi, arrivano alla casella di destinazione dopo davvero troppo tempo, e sembra in modo abbastanza random.
Non so se dipenda dal fatto che il mio localhost (con postfix non configurato, quello di default di slackware 15.0) non è un server con dominio rinomato tipo gmail, hotmail o altri servizi blasonati, oppure se sia colpa di qualche altra cosa.

Per non parlare d'aria fritta, metto il comando di invio messaggio qui di seguito:

Codice: Seleziona tutto

echo -e "From: paperino@paperopoli.invalid\nSubject: Prova da Sendmail via shell!" | sendmail mickey.mouse@mailnesia.com
Per avere un po' di privacy in più, come già spiegato, basta creare la casella email scegliendo un nome un po' più anonimo tipo "topolinomascherato", poi si entra nella casella e vi si associa l'alias "mickey.mouse". così se qualcuno tenta di entrare nella casella mickey.mouse, mailnesia gli nega l'accesso rispondendo che quello è già l'alias di un'altra casella esistente.

Se volete fare una prova con una casella a vostra scelta... così poi riportate l'esito.
Se non inserirete il campo "From:" vedrete come mittente il vostro nome utente sul sistema locale, seguito dal dominio locale che si può vedere col comando hostname. Nel mio caso è un nome di dominio inventato con desinenza ".local". Dipende da come avete impostato all'installazione di slackware (o anche in seguito ovvio) che di default se ricordo bene è "darkstar.example.net".

Domanda, vi funziona?
Riuscite a vedere i messaggi su mailnesia aggiungersi quasi istantaneamente?
Oppure non li vedete se non dopo parecchi minuti?

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3803
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Eseguire click in pagina web con script

Messaggio da joe »

No, il comando sopra, che sfrutta sendmail, e quindi il server postfix locale non sembra funzionare bene.
Alla fine ho fatto alcuni tentativi con un approccio più simil_client e ho "scoperto" che mailnesia accetta mail via smtp liscio su porta 25.
Dopo aver fatto qualche tentativo con telnet e netcat, stavo cercando un'alternativa più razionale con una soluzione send-expect usando quindi expect, ma poi mi sono detto... figurarsi se qualcosa di semi pronto in python non si trova. E infatti...

Ecco uno scriptino d'altri tempi, prendetelo con le pinze, non sono un devdrago:

Codice: Seleziona tutto

#!/usr/bin/python -OO
import smtplib
server_add = "mailnesia.com"
port = 25
sender = "sender@invalid.invalid"
receiver = "example@"+server_add
subject = "Testing stuff"
message = """\
From: {f}
To: {t}
Subject: {s}

"""
server = smtplib.SMTP(server_add, port)
server.sendmail(sender, receiver, message.format(f=sender,t=receiver,s=subject))
server.quit
OK, poi si può estendere a seconda delle finalità... ad esempio non sarebbe difficile passargli vari parametri da riga di comando come argomenti tipo sender, corpo del mesaggio ecc... va be', non è il mio scopo. Tirando le somme, con questa serie di accrocchi si può sfruttare una casella mailnesia, senza altri servizi, con registrazione necessaria o similari per:

- cancellare eventuale contenuto dalla casella
- inviare sulla casella un messaggio
- leggere dalla casella delle informazioni

Il tutto in modo automatizzabile e per varie finalità.
Un esempio: posso mettere come oggetto del messaggio, o nel corpo dello stesso il mio IP pubblico. Da un secondo PC collegato dall'altro capo del mondo posso collegarmi e leggerlo, e magari stabilire una connessione ad un qualche servizio che gira in ascolto sul PC di partenza. Potrebbe tornare utile se all'altro capo del mondo il PC fosse nattato e il locale non avesse IP statico.
Certo ci sono sistemi più canonici e ottimali per lo scopo tipo ddns, ma in questo modo usando un sistema "improprio", il collegamento che si volesse mettere in piedi sarebbe un po' meno individuabile? In ogni caso sarebbe comunque un'alternativa.

Rispondi