Valutazione 4.87/ 5 (100.00%) 5838 voti

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: 233
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: 233
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: 233
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: 233
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: 17154
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: 233
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: 233
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: 17154
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: 233
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: 233
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: 17154
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: 233
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: 17154
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "MACRO per LOGIN e PASSWORD":

Macro colora
Autore: Statix
Forum: Applicazioni Office Windows
Risposte: 4

Chi c’è in linea

Visitano il forum: Anthony47, Statix e 22 ospiti