Eccoti qui il codice
Tieni presente che con HTML Agility Pack le ricerche devi farle usando XPath
Per qualsiasi chiarimento chiedi pure
Tieni conto che con questo codice non dipendi più dalla versione di Chrome, non devi più attendere che si carichi e dovrebbe quindi essere molto più veloce
' carico il file MHTML
Dim mhtml = My.Computer.FileSystem.ReadAllText("c:\vbn\hap\pagina_unica.mhtml") ' <<<<<<< TODO: correggere cartella e nome file
' trasformo MHTML in HTML
Dim html = mhtml.Replace("=3D", "=").Replace("=" & vbCrLf, "").Replace(vbCrLf, "")
Dim startIndex As Integer = html.IndexOf("<html", StringComparison.OrdinalIgnoreCase)
Dim endIndex As Integer = html.IndexOf("</html>", StringComparison.OrdinalIgnoreCase) + 7
html = html.Substring(startIndex, endIndex - startIndex)
' lo carico su HTML Agility Pack
Dim htmlDoc = New HtmlAgilityPack.HtmlDocument
htmlDoc.LoadHtml(html)
' mi estraggo la tabella principale
Dim mainTable = htmlDoc.DocumentNode.SelectSingleNode("//div[@class='BaseTable']")
' mi estraggo la riga "header"
Dim header = mainTable.SelectSingleNode(".//div[@class='BaseTable__header-row']")
' estraggo le colonne
Dim headerCols = header.SelectNodes(".//div[@class='BaseTable__header-column BaseTable__header-column--align-center']")
' creo il file CSV
' <<<<<<<< TODO: cambiare cartella e nome file CSV
Dim fp = New IO.StreamWriter(My.Computer.FileSystem.SpecialDirectories.Desktop & "\result.csv", False, New System.Text.UTF8Encoding(False)) ' UTF-8 without BOM
' aggiungo due colonne vuote
fp.Write(",")
' faccio il ciclo per leggere le intestazioni
For Each headerCol As HtmlAgilityPack.HtmlNode In headerCols
Dim nomeColonna = headerCol.InnerText
' scrivo intestazione
fp.Write("," & nomeColonna)
Next
fp.WriteLine("") ' fine riga "header"
' ora mi leggo le righe
Dim baseTableRows = mainTable.SelectNodes(".//div[@class='BaseTable__row']")
For Each baseTableRow As HtmlAgilityPack.HtmlNode In baseTableRows
' mi estraggo le colonne
Dim baseTableCols = baseTableRow.SelectNodes(".//div[contains(@class,'BaseTable__row-column')]")
' estraggo i dati
For x = 0 To baseTableCols.Count - 1
If x = 0 Then ' prima colonna, divido le due righe
Dim multiRiga = baseTableCols(x).SelectNodes(".//div[@data-dd-action-name='<MASKED-DATA>']")
Dim testo1 = multiRiga(0).InnerText
Dim testo2 = multiRiga(1).InnerText
' lo scrivo nel file CSV
fp.Write(testo1 & "," & testo2)
Else
Dim testo = baseTableCols(x).InnerText
' lo scrivo nel file CSV
fp.Write("," & testo)
End If
Next
fp.WriteLine("") ' fine riga
Next
fp.Close()