C# 不一致的原因是什么-HTMLInputElement mshtml

C# 不一致的原因是什么-HTMLInputElement mshtml,c#,mshtml,C#,Mshtml,我的要求-我以编程方式打开Internet Explorer的实例。然后,我获取HTMLDocument并查找输入字段(textbox),然后设置其值 HTMLDocument oDoc = new mshtml.HTMLDocumentClass(); oDoc = (HTMLDocument)oBrowser.Document; HTMLInputElement txtbox1 = (HTMLInputElement)oDoc.all.item("login",0)

我的要求-我以编程方式打开Internet Explorer的实例。然后,我获取HTMLDocument并查找输入字段(textbox),然后设置其值

    HTMLDocument oDoc = new mshtml.HTMLDocumentClass();
    oDoc = (HTMLDocument)oBrowser.Document;

    HTMLInputElement txtbox1 = (HTMLInputElement)oDoc.all.item("login",0);
    txtbox1.setAttribute("value", "test_user_name", 0);
    //txtbox1.value = "test_user_name";
在查找输入字段之前,我的代码工作正常。问题出在我上面发布的代码的某个地方。获取HTMLDocument对象,然后查找名为“login”的HTMLInputElement。在这里,我面临一个不一致性-文本框有时无法识别,因此当它到达
txtbox1.SetAttribute
txtbox1.value
时,会抛出一个
NullReferenceException
。但是,这种情况并不总是发生。有时不会抛出异常,代码工作正常。 我已经尝试过通过代码进行调试,但是当我通过代码进行调试时,错误永远不会出现


我无法找出原因是什么?是什么导致这种不一致?有什么想法吗?

您确定代码运行时页面已完全加载吗?如果没有,DOM可能在执行代码时不包括您的控件

您应该添加webBrowser1.DocumentCompleted事件,然后在已完成的事件处理程序中执行代码,以确保DOM已完全创建

我还建议使用System.Windows.Forms中的WebBrowser控件,而不是axwebbrowser和mshtml。也就是说,如果您在自己的窗口中托管浏览器。我过去在mshtml方面遇到过一些问题,特别是与事件挂钩有关的问题

webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted)
.
.
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    var doc = webBrowser1.Document;
    var txtBox1 = doc.All["login"];
    txtBox1.SetAttribute("value", "test_user_name");
}