Automazione VBA ed Internet Explorer: problema di input in un sito web

Anonimo
2013-08-19T11:29:31+00:00

Buongiorno a tutti, 

rieccoci con un nuovo problema (stavolta piu' pratico). Ho scritto il seguente codice VBA che va su un sito web, inserisce il nome utente, clicca un bottone per procedere alla password e dunque dovrebbe procedere con l'input della stessa. Tuttavia, essendo la password molto strana (si inserisce un valore per volta) mi da' continuamente errore nonostante il ragionamento sembra essere giusto. Copio e incollo il codice qui sotto, in maniera tale che il sant'uomo/donna che potrebbe aiutarmi dovra' solo copiare il codice ed incollarlo in una macro per eseguirlo. Al momento di compilazione della password, il sistema With form non funziona per via di un errore di run-time 424 (necessario oggetto)... non riesco a spiegarmi perche', dal momento che lo stesso oggetto viene riconosciuto in altre applicazioni con la medesima logica! Grazie in anticipo a chiunque possa aiutarmi, siete preziosissimi.

------------------- INIZIO CODICE ---------------------------------

Sub Alior()

Dim appIE As Object

Dim sURL As String

Dim UserN As Object

Dim PW As Object

Dim Element As Object

Dim btnInput As Object

Dim ElementCol As Object

Dim Link As Object

Dim strCountBody As String

Dim lStartPos As Long

Dim lEndPos As Long

Dim TextIWant As String

Dim GetIE As Object

Set GetIE = CreateObject("internetexplorer.application")

Application.ScreenUpdating = False

Set appIE = GetIE

'On Error GoTo Messaggiodierrore

sURL = "https://aliorbank.pl/hades/od/Login"

With appIE

.navigate sURL

'togli il commento alla linea sotto per vedere il web

.Visible = True

End With

Do While appIE.Busy

Loop

Do While appIE.Busy

Loop

Do While appIE.Busy

Loop

Set UserN = appIE.document.getElementsbyName("p_alias")

If Not UserN Is Nothing Then

UserN(0).Value = "00000000"

End If

Set ElementCol = appIE.document.getElementsByTagName("span")

For Each btnInput In ElementCol

If btnInput.InnerHTML = "Dalej" Then

btnInput.Click

Exit For

End If

Next btnInput

Do While appIE.Busy

Loop

Do While appIE.Busy

Loop

Do While appIE.Busy

Loop

Dim inputname()

ReDim inputname(1 To 11)

For i = 1 To 11

inputname(i) = "PASSFIELD" & i

Select Case i

Case 1

With appIE.document.forms("MaskLoginForm")

.elements(inputname(i)) = "P"

End With

Case 2

With appIE.document.forms("MaskLoginForm")

.elements(inputname(i)) = "P"

End With

Case 3

With appIE.document.forms("MaskLoginForm")

.elements(inputname(i)) = "P"

End With

Case 4

With appIE.document.forms("MaskLoginForm")

.elements(inputname(i)) = "P"

End With

Case 5

With appIE.document.forms("MaskLoginForm")

.elements(inputname(i)) = "P"

End With

Case 6

With appIE.document.forms("MaskLoginForm")

.elements(inputname(i)) = "P"

End With

Case 7

With appIE.document.forms("MaskLoginForm")

.elements(inputname(i)) = "P"

End With

Case 8

With appIE.document.forms("MaskLoginForm")

.elements(inputname(i)) = "P"

End With

Case 9

With appIE.document.forms("MaskLoginForm")

.elements(inputname(i)) = "P"

End With

Case 10

With appIE.document.forms("MaskLoginForm")

.elements(inputname(i)) = "P"

End With

Case 11

With appIE.document.forms("MaskLoginForm")

.elements(inputname(i)) = "P"

End With

End Select

Next i

Exit Sub

Messaggiodierrore:

appIE.Quit

evabeh = MsgBox("Something went wrong with Alior. Please download individually until you get the " _

& "confirmation message.", vbCritical, "Liquidity Overview")

End Sub

------------------- INIZIO CODICE ---------------------------------

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2013-08-19T12:20:09+00:00

...

Ciao Matteo,

certo questi polacchi le studiano proprio tutte per evitarti il login. ;)

Dopo aver inserito il codice di accesso e confermato, spostati sulla pagina indicata in calce e solo a caricamento avvenuto della nuova pagina inizia la digitazione della password.

https://aliorbank.pl/hades/od/BANKLOGIN

Andrea.

La risposta è stata utile?

0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-08-19T13:10:13+00:00

    Ok, in effetti quando uso 

    For i = 1 To 11

    appIE.Document.all("PASSFIELD" & i).Value = "P"

    Next

    la password mi si compila. Pero' i problemi sono i seguenti:

    1. Il motivo di tutto quel Select Case / For e' dato dal fatto che la password non e' PPPPPPPPPPPP, ma chiaramente contiene valori diversi. Dunque, in dipendenza al valore da inserire, devo distinguere in qualche modo se scrivere una lettera piuttosto che un'altra.
    2. Non so se ci hai fatto caso, ma a volte spuntano 10 e a volte 11 campi da compilare. Adesso me ne sono spuntati 10 e, arrivati all'undicesimo, mi ha chiaramente dato errore in quanto non trovava l'undicesimo oggetto. Come faccio a dire al codice di ignorare l'errore (altrimenti mi si interrompe e non puo' andare avanti)?

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-08-19T12:58:48+00:00

    Mmmm sai che non e' la prima volta che ho questo problema? Alcuni siti vogliono che clicchi sulla pagina (o roba simile) altrimenti i campi non si attivano. 

    Ho provato a spostarmi sulla pagina come mi hai detto con il seguente codice (che ho aggiunto tra la conferma del primo passo e la digitazione della password), ma continua a non funzionare... a te funzionava?

    ...

    Yes, Sir.

    Io personalmente modificherei tutto quell'ambardan di ciclo FOR NEXT con quest'altro, oltre a ciò nota la diversa compilazione della password.

    Andrea.


    appIE.navigate "https://aliorbank.pl/hades/od/BANKLOGIN"

    ' attendi quanto bast

    For i = 1 To 11

    appIE.Document.all("PASSFIELD" & i).Value = "P"

    Next


    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-08-19T12:57:58+00:00

    Ho provato a spostarmi sulla pagina come mi hai detto con il seguente codice (che ho aggiunto tra la conferma del primo passo e la digitazione della password), ma continua a non funzionare... 

     Intendo che non mi da' alcun messaggio di errore, perche' la pagina in effetti si carica e anche eseguendo il codice in modalita' debug gli elementi sembrano essere assegnati, tuttavia i valori non vengono scritti (e non posso infatti neppure cliccare il tasto di login).

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2013-08-19T12:49:56+00:00

    Mmmm sai che non e' la prima volta che ho questo problema? Alcuni siti vogliono che clicchi sulla pagina (o roba simile) altrimenti i campi non si attivano. 

    Ho provato a spostarmi sulla pagina come mi hai detto con il seguente codice (che ho aggiunto tra la conferma del primo passo e la digitazione della password), ma continua a non funzionare... a te funzionava?

    sURL2 = "https://aliorbank.pl/hades/od/BANKLOGIN"

    With appIE

    .navigate sURL2

    .Visible = True

    End With

    Do While appIE.Busy

    Loop

    newHour = Hour(Now())

    newMinute = Minute(Now())

    newSecond = Second(Now()) + 5

    waitTime = TimeSerial(newHour, newMinute, newSecond)

    Application.Wait waitTime

    La risposta è stata utile?

    0 commenti Nessun commento