U trendu

Access – Automatizacija Internet Explorer-a

Microsoft Internet Explorer verzije 5 i novije, dolazi sa prilično dobrim i svestranim, ali slabo dokumentovanim objektnim modelom. Ukoliko ste već imali prilike da koristite kontrolu Web Browser unutar Access-a, onda ste sigurno već upoznati sa mogućnostima Explorer-ovog objektnog modela. Sva funkcionalnost objektnog modela Internet Explorer-a (ne računajući tu spoljnu podršku kao što su skript jezici) nalazi se unutar dve DLL biblioteke:

  • shdocvw.dll (Microsoft Internet kontrole)
  • mshtml.tlb (Microsoft HTML objektna biblioteka )

Uz pomoć funkcija iz ovih biblioteka, možete recimo automatizovati Internet Explorer da lokalno snima HTML fajlove, pregleda ih, i zatim parsira i prikaže određene delove tokom runtime-a aplikacije.

U narednim redovima predstavljamo vam programski kod koji prolazi kroz sve otvorene prozore Internet Explorer-a, tražeći u adresnoj liniji HTML fajlova string URL_TO_SEARCH. Ukoliko pronađe takav prozor, ukazuje korisniku na njega i omogućava mu da snimi taj fajl lokalno. Dodatno, programski kod će proći i kroz sve HTML elemente na stranici i pokušaće da pronađe anchor, čiji se opis nalazi u varijabli ANCHOR_DESC_TO_SEARCH. Ukoliko pronađe ovakav element, odštampaće adresu (URL) anchor-a u prozoru za debagovanje.


Sub sTestIEAutomation()
On Error GoTo ErrHandler
Dim objShellWins As SHDocVw.ShellWindows
Dim objIE As SHDocVw.InternetExplorer
Dim objDoc As Object
Dim i As Integer
Dim strOut As String
Dim intFree As Integer
Dim clsDialog As CDialog
Const URL_TO_SEARCH = "https://www.krstarica.com"
Const ANCHOR_DESC_TO_SEARCH = "Dodaj link"

Set objShellWins = New SHDocVw.ShellWindows
For Each objIE In objShellWins
With objIE
If (InStr(1, _
.LocationURL, _
URL_TO_SEARCH, vbTextCompare)) Then
Set objDoc = .Document
If (TypeOf objDoc Is HTMLDocument) Then
Set clsDialog = New CDialog
With clsDialog
.hWnd = hWndAccessApp
.StartDir = CurDir
.ModeOpen = False
.DefaultExtension = "htm"
.Title =
"Izaberite folder za snimanje fajla"
.Filter =
"HTML Fajlovi (*.htm, *.html)|*.htm"
strOut = .Action
End With
If Len(strOut) Then
intFree = FreeFile
Open strOut For Output As #intFree
Write #intFree,
objDoc.body.parentElement.innerHTML
Close #intFree
With objDoc.all
For i = 1 To .Length
If (TypeOf .Item(i)
Is HTMLAnchorElement) Then
If .Item(i).nodeName = "A" Then
If (InStr(1, _
.Item(i).innerText, _
ANCHOR_DESC_TO_SEARCH, _
vbTextCompare)) Then
Debug.Print objDoc.all.Item(i).href
Exit For
End If
End If
End If
Next
End With
End If
End If
Exit For
End If
End With
Next

ExitHere:
On Error Resume Next
Close #intFree
Set clsDialog = Nothing
Set objDoc = Nothing
Set objIE = Nothing
Set objShellWins = Nothing
Exit Sub
ErrHandler:
With Err
MsgBox "Greska: " & .Number & vbCrLf
& .Description, _
vbCritical Or vbOKOnly, .Source
End With
Resume ExitHere
End Sub

Pratite Krstaricu i preko mobilne aplikacije za Android i iPhone.