我正在使用winforms webbrowser控件开发自动化程序。我能够在前几个网页上获得htmlelement。但是我无法从某些页面获取htmlelement,而且我使用的方法与我在前几个网页中所做的相同(少数第一页htmlelement被成功检索)。
HtmlElement createButton = this.extendedWebBrowser2.Document.GetElementById("createButton");
HtmlElement textArea = this.extendedWebBrowser2.Document.GetElementById("query");
HtmlElement filename = this.extendedWebBrowser2.Document.GetElementById("filename");
HtmlElement cancelBtn = this.extendedWebBrowser2.Document.GetElementById("cancelBtn");
它返回null,我不知道为什么它返回null,但是在页面上存在元素。为什么以及如何做,我可以检测到html元素?什么样的原因导致它无法被发现?
答案 0 :(得分:1)
很久以前我上次尝试使用webbrowser控件,但在旧版本的.net中有一种方法可以使用这种方式:
HtmlElement createButton = this.extendedWebBrowser2.Document.Body.GetElementById("createButton");
注意Body
。
也许有帮助?
答案 1 :(得分:0)
您在等待文档加载事件吗?在文档加载完毕之前,DOM有时无法使用。
您可以订阅an event on the browser control。如果您在那里进行所有处理,那应该不是问题。
答案 2 :(得分:0)
无法获取Html元素的原因是因为Html元素嵌入在FrameSet中。要访问FrameSet:
HtmlWindow docWindow = extendedWebBrowser2.Document.Window;
foreach (HtmlWindow frameWindow in docWindow.Frames)
{
implementation code...
}
答案 3 :(得分:0)
if (objBrowser.Document.Window != null) {
foreach (HtmlWindow myframe in objBrowser.Document.Window.Frames) {
HtmlElementCollection htmlControls = myframe.Document.Body.GetElementsByTagName("OPTION");
foreach (HtmlElement optEle in htmlControls) {
optEle.SetAttribute("selected", "true");
}
}
}