什么是不一致的原因 - HTMLInputElement 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";
,直到所述输入字段被找我的代码工作正常。问题是,在什么地方我ahve上面贴的代码。我得到HTMLDocument的对象,然后我找了一个名为“登录”的HTMLInputElement。在这里,我面临着一个矛盾 - 文本框有时不能识别,所以当它到达txtbox1.SetAttribute
或txtbox1.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");
}
不隶属于 StackOverflow