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);