If you use VBA there is no need to install Selenium Basic. You can download and call Edge Driver directly like:
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver
Set shell = CreateObject("WScript.Shell")
shell.Run "c:\download\msedgedriver.exe --port=9515", 0, False
' Wait for the driver to be available
If Not WaitForDriver("http://localhost:9515/status", 5000) Then
MsgBox "Error: msedgedriver did not respond."
WScript.Quit
End If
' Create session
sessionJson = "{""capabilities"": {""alwaysMatch"": {""browserName"": ""MicrosoftEdge""}}}"
sessionResponse = SendRequest("http://localhost:9515/session", "POST", sessionJson)
sessionId = ParseJson(sessionResponse).value.sessionId
' Navigate to Google
navJson = "{""url"":""https://www.google.com""}"
SendRequest "http://localhost:9515/session/" & sessionId & "/url", "POST", navJson
' Execute JavaScript
scriptJson = "{""script"":""return document.title;"",""args"":[]}"
jsResult = SendRequest("http://localhost:9515/session/" & sessionId & "/execute/sync", "POST", scriptJson)
MsgBox ParseJson(jsResult).value
' End session
SendRequest "http://localhost:9515/session/" & sessionId, "DELETE", ""
Function ParseJson(jsonText)
Dim html, jsonObj
Set html = CreateObject("htmlfile")
html.Write "<script>document.write('')</script>"
html.Close
Set jsonObj = html.parentWindow.eval("(" & jsonText & ")")
Set ParseJson = jsonObj
End Function
Function WaitForDriver(url, timeout)
Set http = CreateObject("MSXML2.XMLHTTP")
startTime = Timer
Do
On Error Resume Next
http.Open "GET", url, False
http.Send
If http.Status = 200 Then
WaitForDriver = True
Exit Function
End If
On Error GoTo 0
WScript.Sleep 500
Loop While (Timer - startTime) < (timeout / 1000)
WaitForDriver = False
End Function
Function SendRequest(url, method, body)
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open method, url, False
http.setRequestHeader "Content-Type", "application/json"
http.Send body
SendRequest = http.ResponseText
End Function
There is one problem is that the diver and the Browser versions tend to get out of synch. You can use this script to to keep web driver up to date.
Set fso = CreateObject("Scripting.FileSystemObject")
DownloadLatestSelenium
WScript.Echo "Done"
'==========================================
Sub DownloadLatestSelenium()
Dim oShell: Set oShell = WScript.CreateObject("WSCript.shell")
Dim oHttp: Set oHttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")
oHttp.Open "GET", "https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver", False
oHttp.Send
Dim s: s = oHttp.responseText
Dim iPos: iPos = InStr(1, s,"Stable Channel")
iPos = InStr(iPos, s,"/edgedriver_win64.zip""")
s = Mid(s, iPos - 50, 100)
iPos = InStr(1, lcase(s),"https://")
s = Mid(s, iPos)
iPos = InStr(1, s, """")
Dim sUrl: sUrl = Mid(s, 1, iPos - 1)
Dim sFolder: sFolder = GetBaseFolder()
Dim sFilePath: sFilePath = sFolder & "\edgedriver_win64.zip"
If fso.FileExists(sFilePath) Then
fso.DeleteFile sFilePath, True
End If
DownloadFile sUrl, sFilePath
'WScript.Echo "Downloaded " & sFilePath
Dim sEdgeDriverPath: sEdgeDriverPath = sFolder & "\msmsedgedriver.exe"
If fso.FileExists(sEdgeDriverPath) Then
fso.DeleteFile sEdgeDriverPath, True
End If
UnzipFile sFilePath, sFolder
If fso.FileExists(sEdgeDriverPath) = False Then
WScript.Echo "File could not be unzipped"
Exit Sub
End If
Dim sSeleniumVersion: sSeleniumVersion = GetMajorVersion(fso.GetFileVersion(sEdgeDriverPath))
'WScript.Echo "Downloaded Version: " & sSeleniumVersion
Dim sDestFilePath: sDestFilePath = "c:\download\msedgedriver.exe"
Dim sDestSeleniumVersion: sDestSeleniumVersion = GetMajorVersion(fso.GetFileVersion(sDestFilePath))
If sDestSeleniumVersion = sSeleniumVersion Then
WScript.Echo "No Action Needed. Quitting. Versions are is the same " & sSeleniumVersion & vbCrLf & sEdgeDriverPath & vbCrLf & sDestFilePath
Exit Sub
Else
If fso.FileExists(sDestFilePath) Then
fso.DeleteFile sDestFilePath, True
fso.CopyFile sEdgeDriverPath, sDestFilePath
WScript.Echo "Downloaded Version: " & sSeleniumVersion & " <> Dest Version " & sDestSeleniumVersion & " Updated: " & sDestFilePath
End If
End If
sDestFilePath = "c:\download\edgedriver_" & sSeleniumVersion & ".exe"
If fso.FileExists(sDestFilePath) = False Then
fso.CopyFile sEdgeDriverPath, sDestFilePath
WScript.Echo " Updated: " & sDestFilePath
End If
End Sub
Sub UnzipFile(zipPath, destFolder)
Dim winrarPath, shell, cmd, archiveName
winrarPath = "C:\Program Files\WinRAR\WinRAR.exe"
If fso.FileExists(winrarPath) Then
' Use WinRAR to extract the zip
cmd = Chr(34) & winrarPath & Chr(34) & " x -o+ -ibck " & Chr(34) & zipPath & Chr(34) & " " & Chr(34) & destFolder & Chr(34)
Set shell = CreateObject("WScript.Shell")
shell.Run cmd, 0, True
Else
' Use Shell.Application to extract
Set shell = CreateObject("Shell.Application")
Dim source, destination, items
Set source = shell.NameSpace(zipPath)
Set destination = shell.NameSpace(destFolder)
If Not source Is Nothing And Not destination Is Nothing Then
' 20 = 16 (Yes to All) + 4 (No UI)
destination.CopyHere source.Items, 20
Wscript.Sleep 1000
Else
WScript.Echo "Error: Invalid zip file or destination."
End If
End If
Set shell = Nothing
End Sub
Sub DownloadFile(sUrl, sFilePath)
Dim oHTTP: Set oHTTP = CreateObject("Microsoft.XMLHTTP")
oHTTP.Open "GET", sUrl, False
oHTTP.Send
If oHTTP.Status = 200 Then
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write oHTTP.ResponseBody
oStream.SaveToFile sFilePath, 2
oStream.Close
Else
WScript.Echo "Error Status: " & oHTTP.Status & ", URL:" & sUrl
End If
End Sub
Function GetBaseFolder()
Set oFile = fso.GetFile(WScript.ScriptFullName)
GetBaseFolder = oFile.ParentFolder
End Function
Function GetMajorVersion(s)
i = InStr(s,".")
If i <> 0 Then
GetMajorVersion = Mid(s, 1,i - 1)
Else
GetMajorVersion = s
End If
End Function
Selenium Type Library? If not select the Reference in Tools>References