我使用HtmlAgilityPack来解析webbrowser控件的html文档。
我可以找到所需的htmlcode,但是在获取htmlcode之后,我想在WebbrowserControl.Document中重新运行相应的HtmlElement。
实际上,HtmlAgilityPack解析实时文档的脱机副本,而我想访问webbrowser控件的实时元素以访问一些呈现的属性,如currentStyle
或runtimeStyle
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(webBrowser1.Document.Body.InnerHtml);
var some_nodes = doc.DocumentNode.SelectNodes("//p");
// this selection could be more sophisticated
// and the answer shouldn't relay on it.
foreach (HtmlNode node in some_nodes)
{
HtmlElement live_element = CorrespondingElementFromWebBrowserControl(node);
// CorrespondingElementFromWebBrowserControl is what I am searching for
}
如果元素有一个特定的属性,这可能很容易,但我想要一个解决方案,可以对任何元素。
请帮我怎么办。
最佳答案
实际上,在webbroser控件中似乎没有直接更改文档的可能性。
但您可以从中提取html,重新编写,如下所示:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(webBrowser1.DocumentText);
foreach (HtmlAgilityPack.HtmlNode node in doc.DocumentNode.ChildNodes) {
node.Attributes.Add("TEST", "TEST");
}
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb)) {
doc.Save(sw);
webBrowser1.DocumentText = sb.ToString();
}
对于直接操作,您可以使用指向文档的非托管指针,但这超出了我的知识范围。