提问人:Pan ache 提问时间:8/20/2023 更新时间:8/21/2023 访问量:115
如何将 WebView2 文档加载到 HtmlAgilityPack 中
How to load a WebView2 document into HtmlAgilityPack
问:
我无法弄清楚如何将 WebView2 文档加载到 HTML Agility Pack 中。我正在使用 JavaScript 将 DOM 作为字符串获取。但是,当我将 DOM 字符串加载到 HtmlAgilityPack 文档中时,每次尝试解析它都会返回 null。
这将编译:
string dom = await webView21.CoreWebView2.ExecuteScriptAsync("document.body.outerHTML"); // Get the DOM with JavaScript
if (dom.Contains("div"))
System.Diagnostics.Debug.WriteLine("At least one div in the DOM"); // Prints
HtmlAgilityPack.HtmlDocument htmlDocument = new HtmlAgilityPack.HtmlDocument();
htmlDocument.LoadHtml(dom);
var divs = htmlDocument.DocumentNode.SelectNodes("//div");
if (divs == null)
System.Diagnostics.Debug.WriteLine("divs is null"); // Prints
当我运行这个代码片段时,第一个 if 子句确认字符串 dom 包含至少一个 div。但是,当字符串加载到 htmlDocument 中时,第二个 if 子句显示变量 divs 为 null。变量 divs 的计数应至少为 1。我在做一些愚蠢的事情,但我不知道是什么。
答:
0赞
Pan ache
8/20/2023
#1
使用 JavaScript 获取 DOM 将 unicode 字符留在字符串 dom 中,即。“\u003C”代替“<”。获取 DOM 后,可以使用以下命令删除这些
dom = System.Text.RegularExpressions.Regex.Unescape(dom);
这回答了这个问题。
顺便说一句,使用“documentElement”而不是“body”会得到更多的dom,即。
string dom = await webView.ExecuteScriptAsync("document.documentElement.outerHTML"); // Get the DOM with JavaScript
评论
0赞
David Risney
9/2/2023
它不仅仅是无法逃避的。ExecuteScriptAsync 的结果是执行脚本的 JSON 编码结果。在...outerHTML,结果是 JavaScript 字符串,因此 ExecuteScriptAsync 的结果是 JSON 编码的 JavaScript 字符串。因此,您需要将 JSON 解析为字符串,并提取该 JavaScript 字符串的值。这里对此进行了更多讨论:learn.microsoft.com/en-us/microsoft-edge/webview2/how-to/...
评论