Condividi:        

MACRO per LOGIN e PASSWORD

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

MACRO per LOGIN e PASSWORD

Postdi scanacc » 03/04/18 13:30

Carissimi, vorrei creare una macro per entrare nel sito di https://www.borsaitaliana.it/borsa/user/login.html
per ora uso
Codice: Seleziona tutto
Public IE As Object

Sub PCFLoginPROVA()
myURL = "https://www.borsaitaliana.it/borsa/user/login.html"
'
If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.Application")
'
With IE
    .navigate myURL
    .Visible = True
    Do While .busy: DoEvents: Loop    'Attesa not busy
    Do While .readyState <> 4: DoEvents: Loop 'Attesa documento
End With
'
myStart = Timer
Do
    DoEvents
    If Timer > myStart + 3 Or Timer < myStart Then Exit Do
Loop
 
    Do Until Not IE.busy And IE.readyState = 4
        DoEvents
    Loop


' Input the userid and password
    IE.document.getElementById("j_username").Value = "Sandro1234"
    IE.document.getElementById("j_password").Value = "Sandro1234"
    IE.document.getElementById("submit").Click

    Do Until Not IE.busy And IE.readyState = 4
        DoEvents
    Loop
End Sub

Mi apre il sito ma non mi scrive niente sia nel form della username che in quello della password.
Esaminando l'elemento relativo alla username leggo:
Codice: Seleziona tutto
<input name="j_username" class="m-form__input | t-input__reg | u-mt | required" type="text" placeholder="Inserisci Username*" value="">

ma quale è il valore dove devo indirizzare la ricerca?
Ci sto sbattendo la testa da qualche giorno ma non riesco a venirne a capo.
Grazie per l'aiuto che saprete darmi
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Sponsor
 

Re: MACRO per LOGIN e PASSWORD

Postdi scanacc » 03/04/18 14:47

Ho provato anche ad usare il codice per entrare su pc-facile postato da Anthony.
Ho corretto ad hoc la riga di codice Set myColl = IE.document.getElementsByTagName("j_username")
Codice: Seleziona tutto
Public IE As Object

Sub PCFLoginPROVA()
myURL = "https://www.borsaitaliana.it/borsa/user/login.html"

'
If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.Application")
'
With IE
    .navigate myURL
    .Visible = True
    Do While .Busy: DoEvents: Loop    'Attesa not busy
    Do While .readyState <> 4: DoEvents: Loop 'Attesa documento
End With
'
myStart = Timer
Do
    DoEvents
    If Timer > myStart + 3 Or Timer < myStart Then Exit Do
Loop
'
'Questo codice e' specifico per login su pc-facile:
myLogin = "xxxxxx"
myPassw = "jjjjjj"
'
Set myColl = IE.document.getElementsByTagName("j_username")
    myColl(0).Value = myLogin
    myColl(1).Value = myPassw
    myColl(2).Click
'Fine codice specifico
'
Stop
'Chiusura sessione
IE.Quit
Set IE = Nothing
End Sub

Ma mi da debug su myColl(0).Value = myLogin
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: MACRO per LOGIN e PASSWORD

Postdi scanacc » 03/04/18 19:21

Ho riletto il post viewtopic.php?t=97767
ma penso proprio che non ce la farò mai ... però ci proverò
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: MACRO per LOGIN e PASSWORD

Postdi scanacc » 04/04/18 19:25

Sto provando con la querySelector ma mi da sempre un errore sull'indirizzo.
Codice: Seleziona tutto
With IE.document
    Dim elem As Object
    Set elem = .querySelector("html > body.page-login > div.box-login > form#form1.box-login-form > div.button-wrap > button.btn")
    elem.click
End With


:x :x :x
PS Questo però era un percorso sulla mia intranet e non su Borsa Italiana
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: MACRO per LOGIN e PASSWORD

Postdi Anthony47 » 04/04/18 20:07

Ma secondo te i siti sono tutti uguali? E nel sorgente del sito hai trovato un tag j_username?
Prova questo snippet:
Codice: Seleziona tutto
'Questo codice e' specifico per login su borsaitaliana.it:
myLogin = "xxxxxx"
myPassw = "jjjjjj"
'
IE.document.all("j_username").Value = myLogin
IE.document.all("j_password").Value = myLogin
Set myColl = IE.document.getElementsByClassName("l-box -pt -center")
myColl(0).getElementsByTagName("button")(0).Click
Do While IE.Busy: DoEvents: Loop    'Attesa not busy
Do While IE.readyState <> 4: DoEvents: Loop 'Attesa documento
'Fine codice specifico

(in sostituzione del blocco che usi nella macro del secondo tuo messaggio)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: MACRO per LOGIN e PASSWORD

Postdi scanacc » 04/04/18 23:56

Perfetto! Ho provato a replicare il tuo codice cambiandolo nel mio sito intranet
Codice: Seleziona tutto
myLogin = "XXXXXXXXXX"
myPassw = "YYYYYYYYYY"
'
IE.document.all("username").Value = myLogin
IE.document.all("password").Value = myPassw 'c'era un piccolo errore (il myLogin era ripetuto 2 volte)
myStart = Timer
Do
    DoEvents
    If Timer > myStart + 4 Or Timer < myStart Then Exit Do
Loop


Set myColl = IE.document.getElementsByClassName("button-wrap") 'l'ho trovato esaminando gli elementi prendendo a paragone quanto da te postato
myColl(0).getElementsByTagName("button")(0).Click 'idem per button
Do While IE.Busy: DoEvents: Loop    'Attesa not busy
Do While IE.ReadyState <> 4: DoEvents: Loop 'Attesa documento


In pratica sono riuscito a capire un pò di più sull'argomento.
Grazie
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: MACRO per LOGIN e PASSWORD

Postdi scanacc » 06/04/18 18:27

Ma per pigiare l'altro bottone che si trova nella pagina dove approdo devo usare la stessa tecnica
Codice: Seleziona tutto
Set myColl = IE.document.getElementsByClassName("XXXXXXXX")
myColl(0).getElementsByTagName("YYYYYYY")(0).Click
Do While IE.Busy: DoEvents: Loop    'Attesa not busy
Do While IE.ReadyState <> 4: DoEvents: Loop 'Attesa documento

oppure non ci combina proprio niente?
Se Si dove c'è lo (0) devo mettere altri valori tipo (1) etc?
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: MACRO per LOGIN e PASSWORD

Postdi Anthony47 » 06/04/18 23:37

Si, nelle pagine successive devi usare "lo stesso approccio".
Ma quale e' l'approccio? Te lo spiego:
a) esamini il sorgente html dell'elemento che devi cliccare
b) determini come indirizzarlo: un ID, un Tag, un Class, un Name, ...
c) determini con quali combinazione di istruzioni riesci a fare la cosa.
(riferito a un pulsante da cliccare)

Ad esempio, se si tratta di un <button> all'interno di un <Div> che abbia Class="cippo_cippa" puoi
1) crearti la collezione dei Div
Codice: Seleziona tutto
myColl = IE.document.GetElementsByTagName("div")

Una alternativa spesso vantaggiosa potrebbe essere creare la collezione per "class", se la stessa class e' usata poche volte nella pagina web e c'e' un altro elemento affidabile per identificare poi nella collezione il "nostro" elemento
Codice: Seleziona tutto
myColl = IE.document.GetElementsByClassname("cippo_cippa")


2) scansioni la collezione per trovare l'elemento che abbia classname="cippo_cippa"
Codice: Seleziona tutto
for each myObj in myColl
    if myObj.ClassName = "cippo cippa" then
        'vedi punto 3
        Exit For
    End If
Next myObj
'altre istruzioni successive

3) trovato il div con class giusto prendi il primo <button> (o il secondo, o quello che e' il pulsante da pigiare) e lo clicchi (da inserire nel blocco del 2, vedi sopra)
Codice: Seleziona tutto
        myObj.GetElementsByTagName("button")(0).Click

4) a questo punto completi la navigazione
Codice: Seleziona tutto
Do While IE.Busy: DoEvents: Loop    'Attesa not busy
Do While IE.readyState <> 4: DoEvents: Loop 'Attesa documento

Devi pero' prestare attenzione a cosa succede sul "click": se si tratta di un hyperlink allora c'e' una reale navigazione a un nuovo url e l'attesa di IE.Busy e IE.readyState e' sufficiente. Se invece si tratta di una azione prodotta da uno script allora IE.Busy e IE.readyState al 99% non sono sufficienti per indicarti che il nuovo document e' presente: devi trovare degli agganci all'interno del "document" che confermi la disponibilita' della nuova pagina. Puo' essere una tabella che ha almeno un tot di righe che non si incrementano dopo 2 secondi di attesa; puo' essere un pulsante prima assente e poi presente; puo' essere un campo che assume un valore predeterminabile; insomma puo' essere qualsiasi cosa che si puo' capire solo guardando la pagina.

Determinato il "che cosa guardare" determini (come detto al punto c) "come fare la cosa", cioe' come fatto a mo' di esempio nei punti 1, 2, 3 e 4 sopra.

Inutile dirti che per qualcosa piu' mirato serve l'accesso alla pagina web...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: MACRO per LOGIN e PASSWORD

Postdi scanacc » 07/04/18 11:53

Grazie! Mi hai dato molti elementi su cui applicarmi
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: MACRO per LOGIN e PASSWORD

Postdi scanacc » 07/04/18 23:23

Caro Anthony grazie mille per il tuo aiuto. Ho capito ma non ci sto riuscendo. Per il momento su questa ricerca mi fermo qui. Penso però che cercherò di fare a Livorno un corso di VBA perchè questa materia è affascinante.
Questo è quello che sono riuscito a fare
Codice: Seleziona tutto
Public IE As Object

Sub NAVIGA()
myURL = "https://www.MIOSITO.it"

If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.Application")
'
With IE
    .Navigate myURL
    .Visible = True
    Do While .Busy: DoEvents: Loop    'Attesa not busy
    Do While .ReadyState <> 4: DoEvents: Loop 'Attesa documento
End With
If Sheets("GERARCHIA").Range("H3").Value = "" Then
Exit Sub
End If

myLogin = Sheets("Firme").Range("D1").Value
myPassw = Sheets("GERARCHIA").Range("H3").Value
'
IE.document.all("username").Value = myLogin
IE.document.all("password").Value = myPassw

Set myColl = IE.document.getElementsByClassName("button-wrap")
myColl(0).getElementsByTagName("button")(0).Click
Do While IE.Busy: DoEvents: Loop    'Attesa not busy
Do While IE.ReadyState <> 4: DoEvents: Loop 'Attesa documento

IE.Navigate Sheets("Firme").Range("F1").Value
Set IE = Nothing
End Sub


L'ultimo aiutino che vorrei è questo: Quando esco senza aver fatto il logout e magari dopo 10 minuti rientro, compare il debug in quanto IE va direttamente nella HOME precedentemente visualizzata senza richiedere l'inserimento di Username e Password . Come potrei ovviare a questo debug?
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: MACRO per LOGIN e PASSWORD

Postdi Anthony47 » 08/04/18 23:25

Puoi verificare quale sia l'url corrente con LocationURL; quindi, ad esempio, dopo la navigazione iniziale:
Codice: Seleziona tutto
if IE.LocationURL = "l'Url dove si fa login" then
'fai il login
    IE.document.all("username").Value = myLogin
    IE.document.all("password").Value = myPassw

    Set myColl = IE.document.getElementsByClassName("button-wrap")
    myColl(0).getElementsByTagName("button")(0).Click
    Do While IE.Busy: DoEvents: Loop    'Attesa not busy
    Do While IE.ReadyState <> 4: DoEvents: Loop 'Attesa documento
else
    'gia' loggato, non fare niente e continua
Endif

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: MACRO per LOGIN e PASSWORD

Postdi scanacc » 22/04/18 13:33

Antony, ci sto riprovando ovviamente senza riuscirti.
Ma secondo te queste informazioni che ho sono sufficienti per capire le impostazioni che devo dare per fare click su "Estrai Griglia?"
Codice: Seleziona tutto
<span id="exportBOReport" onclick="doEseguiReportCalcAction();" class="text" style="font-weight: bold; text-decoration: underline; cursor: pointer; ">Estrai Griglia</span>
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: MACRO per LOGIN e PASSWORD

Postdi Anthony47 » 22/04/18 23:53

Queste automazioni si fanno in genere provando e riprovando.
Da quel (poco) che vedo se sei forrtunato potrebbe funzionare questa istruzione:
Codice: Seleziona tutto
IE.document.getElementById("exportBOReport").Click
seguita dalle due righe con cui fai Attesa not busy e Attesa documento

Il problema in questi casi (dove si va a eseguire uno script, non una vera navigazione) e' che spesso per avere disponibile il "document" successivo queste due attese non sono sufficienti; prova a mettergli in coda una attesa di 3-5 sec:
Codice: Seleziona tutto
myStart = Timer
Do
    DoEvents
    If Timer > myStart + 4 Or Timer < myStart Then Exit Do
Loop


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: MACRO per LOGIN e PASSWORD

Postdi scanacc » 01/11/20 17:33

Non ci riuscirò mai ma se qualcuno sa che queste poche iformazioni possano servirmi a far pigiare questo bottone sono contento
Immagine
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: MACRO per LOGIN e PASSWORD

Postdi Anthony47 » 01/11/20 18:31

Anthony ha scritto:Da quel (poco) che vedo se sei forrtunato potrebbe funzionare questa istruzione:
Codice: Seleziona tutto
    IE.document.getElementById("exportBOReport").Click

seguita dalle due righe con cui fai Attesa not busy e Attesa documento


Vuoi dire che non sei stato fortunato con quell'istruzione? Hai avuto qualche errore?

Come gia' detto, queste sono automazioni (a tempo) che si impostano provando e riprovando; senza l'accesso al sito non si va lontano.

A oggi mi sento di confermare che questa dovrebbe funzionare:
Codice: Seleziona tutto
IE.document.getElementById("exportBOReport").Click

Prova questo codice, magari se sei fortunato raccogliamo qualche utile informazione:
Codice: Seleziona tutto
On Error GoTo 0
Stop
Debug.Print "--> " & IE.document.getElementById("exportBOReport").innerText
IE.document.getElementById("exportBOReport").Click
Stop
IE.document.getElementById("exportBOReport").FireEvent ("onclick")
Stop
Quando si ferma sul primo stop dovrebbe essere pronto per cliccare il tuo link misterioso; premi F5 per continuare con l'esecuzione fino al secondo stop.
Controlla se la pagina web si e' aggiornata come farebbe se manualmente avessi cliccato sull'elemento; se Sì allora sei fortunato e ha funzionato; se No allora apri la finestra "Immediata" del vba (premendo Contr-g dovrebbe aprirsi subito, oppure Menu /Visualizza /Finestra Immediata); copia la riga che comincia con "-->" nel tuo prossimo messaggio.
Se l'istruzione .click non ha sortito nessun effetto allora ripremi F5 per arrivare fino al terzo stop dopo aver eseguito l'istruzione .FireEvent; se cosi' funzionasse allora sei ancora fortunato, perche' ora sai cosa devi usare; se No, nemmeno cosi' funziona, allora significa che non sei fortunato e alla cieca non ne usciamo.
Potrebbe darsi che per errore (o per cattiveria) il progettista della pagina ha inserito piu' elementi con lo stesso Id "exportBOReport"; potrebbe darsi che il tuo elemento sia all'interno di un iframe, e quindi non accessibile in modo diretto da IE.document; potrebbe darsi che la tua pagina non sia gestibile tramite IE (ma in questo caso non riusciresti a navigarci nemmeno "a mano", cioe' cliccando tu gli elementi); potrebbe darsi che...
Insomma, solo interagendo col sito si puo' avere qualche buona speranza; altrimenti conta in gran parte la fortuna.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: MACRO per LOGIN e PASSWORD

Postdi scanacc » 02/11/20 10:48

Grazie per l'aiuto.
Prima di fare le prove che mi hai indicato (che non so se mi riusciranno perfettamente) ti vorrei dire che la scritta che compare con il primo comando che mi hai proposto
Codice: Seleziona tutto
myStart = Timer
Do
    DoEvents
    If Timer > myStart + 4 Or Timer < myStart Then Exit Do
Loop
IE.document.getElementById("exportBOReport").Click

è:
"Variabile oggetto o variabile del blocco With non impostata"
Per cui non so se il tuo comando iniziale non funziona, so solo che c'è questo messaggio che non so come risolvere.
Cosa dovrei provare a fare?
PS
Ho anche sostituito questo comando
Codice: Seleziona tutto
IE.document.getElementById("exportBOReport").Click
con
Codice: Seleziona tutto
IE.document.getElementById("exportBOReport").FireEvent ("onclick")
ed il messaggio è rimasto uguale
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: MACRO per LOGIN e PASSWORD

Postdi Anthony47 » 02/11/20 13:42

Beh, ora sappiamo che IE.document.getElementById("exportBOReport") non individua nessun elemento...
Qaundo ti va in debug dovresti avere la pagina InternetExplorer aperta; prova a cliccare manualmente sull'elemento e dicci se "naviga" fino all'indirizzo desiderato.
Se No, allora il sito non supporta piu' I.E.; se Sì allora devi analizzare il codice html per scoprire qualcosa, ad esempio se quella parte e' inserita nel main body o in un iframe.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: MACRO per LOGIN e PASSWORD

Postdi scanacc » 02/11/20 16:49

Si. Quando clicco su "Estrai Griglia" si apre la richiesta su dove salvare il FILE. Vedi immagine
Immagine
Come faccio a sapere se quella parte è inserita nel main body o in un iframe?
scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: MACRO per LOGIN e PASSWORD

Postdi scanacc » 02/11/20 21:12

scanacc
Utente Senior
 
Post: 350
Iscritto il: 06/12/15 10:30

Re: MACRO per LOGIN e PASSWORD

Postdi Anthony47 » 03/11/20 00:22

Ma quell'immagine e' stata "scattata" sulla finestra InternetExplorer, quando la macro e' ferma perche' in errore?

Per identificare il contenitore di quella tabella (anzi, mi pare sia una tabella all'interno di una cella di un'altra tabella) devi ispezionare il codice html della finestra InternetExplorer (credo che per IE il comando sia "Esamina elemento") e trovare chi e' il "padre"; in particolare potresti cercare la presenza del tag "<iframe>".
Ma quale e' tutta la macro?
Puoi almeno pubblicare una parte piu' lunga di codice html, sempre per poter cercare se ci sono altri agganci disponibili?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "MACRO per LOGIN e PASSWORD":

Password Imap (email)
Autore: lukarello7
Forum: Discussioni
Risposte: 8

Chi c’è in linea

Visitano il forum: Gianca532011 e 64 ospiti