代码之家  ›  专栏  ›  技术社区  ›  pavanred

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

  •  1
  • pavanred  · 技术社区  · 15 年前

    我的要求-我以编程方式打开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”的htmlinputement。在这里,我面临着一个不一致的问题-文本框有时无法识别,因此当它到达 txtbox1.SetAttribute txtbox1.value 然后一个 NullReferenceException 被抛出。但是,这并不总是发生。有时不会抛出异常,代码工作正常。 我试过通过代码进行调试,但是当我通过代码进行调试时,错误永远不会出现!你说什么?

    我不知道原因是什么?是什么导致了这种不一致?有什么想法吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Mikael Svenson    15 年前

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

    您应该添加WebBrowser1.DocumentCompleted事件,然后在Completed事件处理程序中执行代码,以确保完全创建了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");
    }