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

时间:2009-12-21 17:24:15

标签: c# mshtml

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

    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.SetAttributetxtbox1.value时会抛出NullReferenceException。但是,这并不总是发生。有时不抛出异常并且代码工作得很好。 我已经尝试通过代码调试,但是当我通过代码调试时错误永远不会出现!

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

1 个答案:

答案 0 :(得分:2)

您确定代码运行时页面已满载吗?如果没有,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");
}