通过网络浏览器控件在 c# winform 中查找 Html 控件

Finding an Html Control in c# winform by a webbrowser control

我正在编写一个 Winform 应用程序,它将 Web 浏览器控件导航到特定的 URL 作为:

webBrowser1.Navigate("web.facebook.com");

现在我想获取此页面的所有 HTML 元素并检索这些控件的值,在谷歌搜索和所有我设法编写的代码片段之后,它没有显示错误但抛出例外说:

Object Reference not set to an instance of object.

mshtml.IHTMLInputElement email = (mshtml.IHTMLInputElement)webBrowser1.Document.GetElementById("email").DomElement;
MessageBox.Show(email.value);

此代码片段放置在网络浏览器控件的 Navigated 事件中。那我该怎么做呢?任何想法和建议表示赞赏。谢谢!

在第一个赋值处设置断点并找出返回空值的位:

  • webBrowser1.Document
  • webBrowser1.Document.GetElementById("email")
  • webBrowser1.Document.GetElementById("email").DomElement

所以做这样的事情:

var doc = webBrowser1.Document;
var elem = doc.GetElementById("email");
var email = elem.DomElement;

并单步执行代码。

在调试器中浏览 webBrowser1.Document 以查看它实际上包含您认为应该包含的内容可能也值得。

非常感谢大家,我找到了出路,我是这样做的!

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    try
    {
        mshtml.IHTMLInputElement email = (mshtml.IHTMLInputElement)webFacebook.Document.GetElementById("email").DomElement;
        MessageBox.Show(email.value);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

特别感谢@Eser! :)