Imports System.Text.Json
Imports Microsoft.Web.WebView2
Imports MZhtml
Private WithEvents WV2 As WinForms.WebView2
Private IconsFolder As String = "...."
Private DownloadFolder As String
Private Site_Uri As Uri
Private Navigation_Completed As Boolean
WV2 = New WinForms.WebView2
Site_Uri = New Uri("https://...")
DownloadFolder = $"{IconsFolder}\{Site_Uri.Host}"
If Not IO.Directory.Exists(DownloadFolder) Then
IO.Directory.CreateDirectory(DownloadFolder)
End If
Dim t As Task = WV2.EnsureCoreWebView2Async(Nothing)
Do Until t.IsCompleted
Application.DoEvents()
Loop
Navigation_Completed = False
WV2.CoreWebView2.Navigate(Site_Uri.ToString)
Do Until Navigation_Completed
Application.DoEvents()
Loop
WV2.Dispose()
Private Async Sub WV2_NavigationCompleted(
sender As Object,
e As Core.CoreWebView2NavigationCompletedEventArgs
) Handles WV2.NavigationCompleted
Try
Dim html As String = Await WV2.ExecuteScriptAsync("document.documentElement.o uterHTML;")
html = CStr(JsonSerializer.Deserialize(html, GetType(String)))
Dim idoc2 As IHTMLDocument2 = CType(New HTMLDocument, IHTMLDocument2)
idoc2.write(html)
idoc2.close()
Dim document As HTMLDocument = CType(idoc2, HTMLDocument)
Dim links = document.querySelectorAll("link[rel*='icon'] , link[rel='image_src']")
For Each link As HTMLLinkElement In links
DownloadFile(New Uri(Site_Uri, link.href).ToString)
Next
Dim metas = document.querySelectorAll("meta[property='og:image'] , meta[name='msapplication-TileImage']")
For Each meta As HTMLMetaElement In metas
DownloadFile(New Uri(Site_Uri, meta.content).ToString)
Next
Navigation_Completed = True
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
End Sub
Sub DownloadFile(File_Address As String)
If File_Address.Contains("?") Then
File_Address = File_Address.Split("?"c)(0)
End If
Try
My.Computer.Network.DownloadFile(address:=File_Add ress,
destinationFileName:=$"{DownloadFolder}\{File_Addr ess.Split("/"c).Last}",
userName:=String.Empty,
password:=String.Empty,
showUI:=False,
connectionTimeout:=10000,
overwrite:=True)
Catch ex As Exception
Console.WriteLine($"Error downloading {File_Address}{vbCrLf}{ex.Message}")
End Try
End Sub