我的要求 - 我打开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";

,直到所述输入字段被找我的代码工作正常。问题是,在什么地方我ahve上面贴的代码。我得到HTMLDocument的对象,然后我找了一个名为“登录”的HTMLInputElement。在这里,我面临着一个矛盾 - 文本框有时不能识别,所以当它到达txtbox1.SetAttributetxtbox1.value然后NullReferenceException被抛出。但是,这并不总是发生。有时没有抛出异常,代码工作得很好。 我已经通过代码试图调试,但误差不会显示出来,当我通过代码调试!

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

有帮助吗?

解决方案

您肯定你的代码运行时的页面完全加载?如果没有,DOM可能不包括你在你执行你的代码的时间控制。

您应该在完成事件处理程序添加一个webBrowser1.DocumentCompleted事件,然后执行你的代码,以确保DOM完全建立。

我也建议使用来自System.Windows.Forms的代替axwebbrowser和MSHTML web浏览器控件。也就是说,如果你是托管在自己的窗口浏览器。我已经经历了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");
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top