Automatizza Internet Explorer (IE) utilizzando VBA

Questa pagina contiene esempi di codifica per automatizzare Internet Explorer (IE) utilizzando VBA.

** Aggiornamento 6/7/2019: Attualmente, il modo migliore per ottenere l'automazione web con VBA è utilizzare Selenium. Questo articolo NON copre il selenio. Gli esempi seguenti funzioneranno e potrebbero essere sufficienti per le tue esigenze. Tuttavia, se hai esigenze più avanzate o vuoi diventare un esperto di automazione web, ti consiglio vivamente di utilizzare invece Selenium. Il corso di Dan Strong sull'automazione Web (sconto disponibile tramite questo link) è una risorsa fantastica per imparare il selenio:

(Ricevo una commissione di affiliazione dal corso di Dan)

Passare a una pagina Web con VBA

Il primo pezzo di codice apre IE e naviga su un sito web. Il secondo pezzo di codice apre IE, accede a un sito Web e interagisce con una casella di input.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page()'Questo caricherà una pagina web in IEDim I As LongDim URL come stringaDim IE come oggettoDim objElement As ObjectDim objCollection As Object"Crea oggetto InternetExplorer"Imposta IE = CreateObject ("InternetExplorer.Application")'Imposta IE.Visible = True per rendere visibile IE o False per l'esecuzione in backgroundIE.Visible = True"Definisci URL"URL = "https://www.automateexcel.com/excel/""Vai all'URL"IE. Naviga nell'URL' La barra di stato consente all'utente di sapere che il sito Web è in fase di caricamentoApplication.StatusBar = URL & " si sta caricando. Attendere… "' Attendi durante il caricamento di IE… 'IE ReadyState = 4 indica che la pagina Web è stata caricata (il primo ciclo è impostato per evitare di saltare inavvertitamente il secondo ciclo)Do While IE.ReadyState = 4: DoEvents: Loop "Do While"Esegui fino a IE.ReadyState = 4: DoEvents: loop "Esegui fino a""Pagina web caricata"Application.StatusBar = URL & "Caricato""Scarica IE"Imposta IE = NienteSet objElement = NothingImposta objCollection = NienteFine sottotitolo

Un problema molto comune che le persone incontrano quando si lavora con IE in VBA è che VBA tenta di eseguire il codice prima che Internet Explorer sia completamente caricato. Usando questo codice, dici a VBA di ripetere un ciclo finché IE non è pronto (IE.ReadyState - 4).

1234 ' Attendi durante il caricamento di IE… 'IE ReadyState = 4 indica che la pagina Web è stata caricata (il primo ciclo è impostato per evitare di saltare inavvertitamente il secondo ciclo)Do While IE.ReadyState = 4: DoEvents: Loop "Do While"Esegui fino a IE.ReadyState = 4: DoEvents: loop "Esegui fino a"

Inoltre, nota questa riga di codice:

1 IE.Visibile = VERO

Questo codice alterna se IE viene eseguito in background o in primo piano.

Apri l'URL e inserisci i dati nel modulo utilizzando VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 'Questo deve andare in cima al tuo modulo. È usato per impostare IE come finestra attivaFunzione di dichiarazione pubblica SetForegroundWindow Lib "user32" (ByVal HWND As Long) As LongSub Automate_IE_Enter_Data()'Questo caricherà una pagina web in IEDim I As LongDim URL come stringaDim IE come oggettoDim objElement As ObjectDim objCollection As ObjectDim HWNDSrc As Long"Crea oggetto InternetExplorer"Imposta IE = CreateObject ("InternetExplorer.Application")'Imposta IE.Visible = True per rendere visibile IE o False per l'esecuzione in backgroundIE.Visible = True"Definisci URL"URL = "https://www.automateexcel.com/vba""Vai all'URL"IE. Naviga nell'URL' La barra di stato consente all'utente di sapere che il sito Web è in fase di caricamentoApplication.StatusBar = URL & " si sta caricando. Attendere… "' Attendi durante il caricamento di IE… 'IE ReadyState = 4 indica che la pagina Web è stata caricata (il primo ciclo è impostato per evitare di saltare inavvertitamente il secondo ciclo)Do While IE.ReadyState = 4: DoEvents: LoopEsegui fino a IE.ReadyState = 4: DoEvents: Loop"Pagina web caricata"Application.StatusBar = URL & "Caricato"'Ottieni l'ID finestra per IE così possiamo impostarlo come finestra di attivazioneHWNDSrc = IE.HWND'Imposta IE come finestra attivaSetForegroundWindow HWNDSrc"Trova e compila la casella di input"n = 0Per ogni oggetto in IE.document.allSe itm = "[oggetto HTMLInputElement]" Alloran = n + 1Se n = 3 Alloraitm.Value = "foglio di lavoro"itm.Focus 'Attiva la casella di input (fa apparire il cursore)Application.SendKeys "{w}", True 'Simula una sequenza di tasti 'W'. True dice a VBA di aspettare'finché la sequenza di tasti non è terminata prima di procedere, consentendo'javascript sulla pagina per eseguire e filtrare la tabellaVai a endmacroFinisci seFinisci seProssimo"Scarica IE"endmacro:Imposta IE = NienteSet objElement = NothingImposta objCollection = NienteFine sottotitolo

GetElement in IE usando VBA

L'interazione con gli oggetti in Internet Explorer può essere spesso un problema. È necessario identificare con quale oggetto specifico lavorare. Nel codice sopra, stiamo cercando la terza istanza di "[object HTMLInputElement]" (un modulo di input). Quindi inseriamo "orksheet" nel modulo di input (itm.value = "orksheet"), spostiamo il cursore nel modulo di input (itm.focus) e digitiamo "w". In questo caso è necessario digitare "w" per attivare il javascript utilizzato per filtrare la tabella.

Esistono metodi più diretti per selezionare gli oggetti, tuttavia questo metodo dovrebbe funzionare se tutto il resto fallisce.

Per utilizzare questi altri metodi, dovrai utilizzare le seguenti opzioni:

1234 IE.document.getelementbyid("ID").value = "value" 'Trova per IDIE.document.getelementsbytagname("ID").value = "value" 'Trova per tagIE.document.getelementsbyclassname("ID").value = "value" 'Trova per classeIE.document.getelementsbyname("ID").value = "value" 'Trova per nome

È possibile riscontrare problemi durante l'utilizzo di questi metodi se sono presenti più elementi con lo stesso nome. Utilizzando un ciclo (come nel codice di esempio sopra), è possibile specificare quale istanza dell'elemento utilizzare.

Interagisci con IE usando VBA

Nel codice sopra usiamo l'evento: Messa a fuoco (itm.focus) per attivare il cursore nel modulo.

Puoi trovare altri esempi di eventi, metodi e proprietà di oggetti/elementi qui: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Non tutti questi funzioneranno con ogni oggetto/elemento e potrebbero esserci un po' di tentativi ed errori quando si interagisce con gli oggetti in IE.

Invia chiavi a Internet Explorer

Abbiamo usato il comando Sendkeys nel codice sopra:

1 Application.SendKeys "{w}", True

Le chiavi di invio dovrebbero generalmente essere l'ultima risorsa. Di solito dovresti essere in grado di interagire direttamente con gli oggetti, tuttavia a volte è più semplice usare semplicemente il comando Sendkeys. Sendkeys è essenzialmente lo stesso della digitazione con la tastiera. È necessario assicurarsi che le finestre e gli oggetti corretti siano selezionati prima di procedere. Le chiavi di invio possono anche attivare eventi che vengono eseguiti in base all'interazione dell'utente sul Web. Nell'esempio sopra, usiamo Sendkeys per attivare il filtro Javascript nella tabella che usiamo nella pagina web.

Sendkeys ha due ingressi:
1. il tasto per entrare (generalmente circondato da {}… {enter}, {q}… .)
2. Attendere il completamento di Sendkeys prima di procedere TRUE/FALSE. In genere vorrai che questo sia impostato su TRUE quando lavori con Internet Explorer.

Esegui Internet Explorer in background

Per eseguire Internet Explorer in background devi fare due cose:

1. Chiama la macro contenente il codice IE con Application.Run in modo che la macro venga eseguita in background mentre continui a lavorare:

1 Application.Run ("Automatizza_IE_Load_Page")

Nota: questo codice potrebbe potenzialmente interrompere il tuo lavoro o il tuo lavoro potrebbe interferire con il codice. Ad esempio, se utilizzi SendKeys, Sendkeys potrebbe inviare una sequenza di tasti all'applicazione sbagliata. Stai molto attento con questo.
2. Nascondi IE:

1 IE.Visible = False

Selenio e VBA

Se hai trovato utile questo articolo, potresti voler dare un'occhiata al corso di Dan Strong sull'automazione Web. Spiega come utilizzare il selenio con VBA.

(Ricevo una commissione di affiliazione dal corso di Dan)

Testimonianza di uno degli studenti di Dan

https://excelvbaisfun.com/wp-content/uploads/2019/06/dan_strong_complete_web_automation_course_review_VbFn2vwul8A_1080p.mp4

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave