VB.Net Webview2 Как я могу получить исходный код html?

Я успешно отображаю веб-сайт на WebView2 в моем проекте VB.net (Visual Studio 2017), но не могу получить исходный код html. Посоветуйте, пожалуйста, как получить html-код.

Мой код:

Private Sub testbtn_Click(sender As Object, e As EventArgs) Handles testbtn.Click
        WebView2.CoreWebView2.Navigate("https://www.microsoft.com/")
End Sub

Private Sub WebView2_NavigationCompleted(sender As Object, e As CoreWebView2NavigationCompletedEventArgs) Handles WebView2.NavigationCompleted
        Dim html As String = ?????
End Sub

Спасибо за ваш совет заранее.

4 ответа

Решение

Я только начал сегодня возиться с WebView2 и искал то же самое. Мне удалось собрать это решение:

Dim html As String
html = Await WebView2.ExecuteScriptAsync("document.documentElement.outerHTML;")

' The Html comes back with unicode character codes, other escaped characters, and
' wrapped in double quotes, so I'm using this code to clean it up for what I'm doing.
html = Regex.Unescape(html)
html = html.Remove(0, 1)
html = html.Remove(html.Length - 1, 1)

Конвертировал мой код с C# на VB на лету, поэтому, надеюсь, не пропустил никаких синтаксических ошибок.

Добавляя к ответу @Xaviorq8, вы можете использовать Span избавиться от генерации новых строк с помощью Remove:

html = Regex.Unescape(html)
html = html.AsSpan()[1..^1].ToString();

Я должен отдать должное @Xaviorq8; его ответ был необходим, чтобы решить мою проблему. Я успешно использовал .NET WebBrowser и HtmlAgilityPack, но хотел заменить WebBrowser на .NET WebView2.

Фрагмент (рабочий код с WebBrowser):
      using HAP = HtmlAgilityPack;
HAP.HtmlDocument hapHtmlDocument = null;
hapHtmlDocument = new HAP.HtmlDocument();
hapHtmlDocument.Load(webBrowser1.DocumentStream);
HtmlNodeCollection nodes = hapHtmlDocument.DocumentNode.SelectNodes("//*[@id=\"apptAndReportsTbl\"]");
Фрагмент (неудачный код с WebView2):
      using HAP = HtmlAgilityPack;
HAP.HtmlDocument hapHtmlDocument = null;
string html = await webView21.ExecuteScriptAsync("document.documentElement.outerHTML");
hapHtmlDocument = new HAP.HtmlDocument();
hapHtmlDocument.LoadHtml(html);
HtmlNodeCollection nodes = hapHtmlDocument.DocumentNode.SelectNodes("//*[@id=\"apptAndReportsTbl\"]");

Успех с WebView2 и HtmlAgilityPack

      using HAP = HtmlAgilityPack;
HAP.HtmlDocument hapHtmlDocument = null;
string html = await webView21.ExecuteScriptAsync("document.documentElement.outerHTML");
// thanks to @Xaviorq8 answer (next 3 lines)
html = Regex.Unescape(html);
html = html.Remove(0, 1);
html = html.Remove(html.Length - 1, 1);
hapHtmlDocument = new HAP.HtmlDocument();
hapHtmlDocument.LoadHtml(html);
HtmlNodeCollection nodes = hapHtmlDocument.DocumentNode.SelectNodes("//*[@id=\"apptAndReportsTbl\"]");

Принятый ответ находится на правильном пути. Однако не хватает важной вещи:

Возвращаемая строка NOT HTMLEncoded, его !

Итак, чтобы сделать это правильно, вам нужно десериализоватьJSON, что так же просто:

      Dim html As String
html = Await WebView2.ExecuteScriptAsync("document.documentElement.outerHTML;")
html = Await JsonSerializer.DeserializeAsync(Of String)(html);
Другие вопросы по тегам