C# 如何在WPF中获取webbrowser控件输入框的值?

C# 如何在WPF中获取webbrowser控件输入框的值?,c#,html,wpf,browser,C#,Html,Wpf,Browser,我添加了Microsoft.mshtml作为我的项目的参考,并取得了以下成就: mshtml.IHTMLDocument2 document = (mshtml.IHTMLDocument2)webbrowser.Document; string username = document.all["username"].GetAttribute("value"); 但是第二行不行。上面说 错误CS0021:无法将[]索引应用于类型为的表达式 “mshtml.IHT

我添加了Microsoft.mshtml作为我的项目的参考,并取得了以下成就:

        mshtml.IHTMLDocument2 document = (mshtml.IHTMLDocument2)webbrowser.Document;
        string username = document.all["username"].GetAttribute("value");
但是第二行不行。上面说

错误CS0021:无法将[]索引应用于类型为的表达式 “mshtml.IHTMLElementCollection”

当鼠标悬停在“全部”上时。如何访问所有元素?

尝试以下操作:

var document = (IHTMLDocument3) webbrowser.Document;
var value =
    document.getElementsByName("username")
            .OfType<IHTMLElement>()
            .Select(element => element.getAttribute("value"))
            .FirstOrDefault();
var document=(IHTMLDocument3)webbrowser.document;
var值=
document.getElementsByName(“用户名”)
第()类
.Select(element=>element.getAttribute(“值”))
.FirstOrDefault();

在挣扎了几个小时后,这个解决方案对我很有效

Dim document = DirectCast(MainBrowser.Document, IHTMLDocument3) 
Dim formName = document.getElementsByName(AppSettings("myFormName")).OfType(Of IHTMLElement)().Select(Function(element) element.getAttribute("name")).FirstOrDefault()

它起作用了。我可以问一下你的真实想法吗?getElementsByName的结果被包装成我可以对其执行LINQ查询的内容,您可以使用它按类型IHTMlement过滤结果,然后仅选择value属性,然后获取第一个结果?这是对的还是这也是一些COM IHTMLDocument3功能?使用document.all是否也可以这样做,或者是否存在在c#中不起作用或不方便的原因?方法
getElementsByName
返回
IHTMLElementCollection
,它实现了
IEnumerable
接口,因此我们可以使用LINQ对其进行迭代。为此,我们应该将每个元素安全地强制转换为
ihtmlement
document.all
还返回
IHTMLElementCollection
,这意味着您可以用与上述方法相同的方法处理它。