C# 无法使用WPF WebBrowser组件访问DOM
我正在使用以下代码访问网页的DOM。我使用的是WPF WebBrowser组件(而不是WinForms组件,根据一些帖子,它工作得很好)。但对于WPF WebBrowser组件,我无法理解它。我正在引用mshtml程序集,根据一些帖子,我应该可以访问DOM。但是,当我在调试期间将鼠标悬停在doc变量上时,它会显示一个值“System.\u ComObject”,这让人困惑。我的目标是突出显示DOM中的搜索词,但无法访问它C# 无法使用WPF WebBrowser组件访问DOM,c#,wpf,visual-studio-2017,mshtml,C#,Wpf,Visual Studio 2017,Mshtml,我正在使用以下代码访问网页的DOM。我使用的是WPF WebBrowser组件(而不是WinForms组件,根据一些帖子,它工作得很好)。但对于WPF WebBrowser组件,我无法理解它。我正在引用mshtml程序集,根据一些帖子,我应该可以访问DOM。但是,当我在调试期间将鼠标悬停在doc变量上时,它会显示一个值“System.\u ComObject”,这让人困惑。我的目标是突出显示DOM中的搜索词,但无法访问它 IHTMLDocument2 doc = WebB
IHTMLDocument2 doc = WebBrowserComponent.Document as IHTMLDocument2;
if (doc != null)
{
StringBuilder html = new StringBuilder(doc.body.outerHTML);
var words = SearchWords;
foreach (String key in words)
{
String substitution = "<span style='background-color: rgb(255, 255, 0);'>" + key + "</span>";
html.Replace(key, substitution);
}
doc.body.innerHTML = html.ToString();
}
IHTMLDocument2 doc=WebBrowserComponent。文档为IHTMLDocument2;
如果(doc!=null)
{
StringBuilder html=新的StringBuilder(doc.body.outerHTML);
变量词=搜索词;
foreach(单词中的字符串键)
{
字符串替换=“键+”;
替换(键,替换);
}
doc.body.innerHTML=html.ToString();
}
我添加了一个按钮来突出显示与代码相关的项目:
XAML的代码:
<StackPanel>
<Button Content="HightLight" Click="Button_Click"> </Button>
<WebBrowser x:Name="webBrowser" Source="https://www.bing.com/" Width="800" Height="380"/>
</StackPanel>
cs代码为:
private void Button_Click(object sender, RoutedEventArgs e)
{
IHTMLDocument2 doc = webBrowser.Document as IHTMLDocument2;
if (doc != null)
{
StringBuilder html = new StringBuilder(doc.body.outerHTML);
dynamic document = webBrowser.Document;
string str = document.getElementById("sb_form_q").value;
var words = new[] { str,"Bing" };
foreach (String key in words)
{
String substitution = "<span style='background-color: rgb(255, 255, 0);'>" + key + "</span>";
html.Replace(key, substitution);
}
doc.body.innerHTML = html.ToString();
document.getElementById("sb_form_q").value = str;
}
}
private void按钮\u单击(对象发送者,路由目标)
{
IHTMLDocument2 doc=webBrowser.Document作为IHTMLDocument2;
如果(doc!=null)
{
StringBuilder html=新的StringBuilder(doc.body.outerHTML);
动态文档=webBrowser.document;
字符串str=document.getElementById(“sb_form_q”).值;
var words=new[]{str,“Bing”};
foreach(单词中的字符串键)
{
字符串替换=“键+”;
替换(键,替换);
}
doc.body.innerHTML=html.ToString();
document.getElementById(“sb_form_q”).value=str;
}
}
结果图片如下:
我无法重现错误,您能告诉我遗漏了哪一步吗?您应该强制转换
文档
属性以更正COM接口,或者使用调用脚本
method@PavelAnikhouski这不是我在代码中已经在做的事情吗?我要把它投给IHTMLDocument2。否则我需要你的建议的更多细节。不知道你的意思。