C# 无法使用WPF WebBrowser组件访问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

我正在使用以下代码访问网页的DOM。我使用的是WPF WebBrowser组件(而不是WinForms组件,根据一些帖子,它工作得很好)。但对于WPF WebBrowser组件,我无法理解它。我正在引用mshtml程序集,根据一些帖子,我应该可以访问DOM。但是,当我在调试期间将鼠标悬停在doc变量上时,它会显示一个值“System.\u ComObject”,这让人困惑。我的目标是突出显示DOM中的搜索词,但无法访问它

            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。否则我需要你的建议的更多细节。不知道你的意思。