使用.NET的WebBrowser组件无法获取元素class属性值如何解决
问题原因
- .NET WebBrowser控件底层封装的是IE核心DOM接口,HTML标准中的
class属性在IE DOM的COM交互层中映射的属性名为className,直接调用GetAttribute("class")永远只能返回空字符串。 - 代码存在隐藏逻辑错误:while循环的判断条件逻辑运算符使用错误,
counter<counted || found会导致匹配到目标元素后循环依然不会终止,当counter超过集合总数时会触发索引越界异常,正确的逻辑应为counter < counted && !found,遍历到符合条件的元素后直接终止循环。
修正方案
将获取属性的代码从elem.GetAttribute("class")修改为elem.GetAttribute("className"),同时修正循环条件的逻辑错误即可,修正后的完整代码如下:
private void Form1_Load(object sender, EventArgs e) { this.webBrowser1.Navigate("https://repubblica.it"); } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { string divClassName = "menu-panel-col"; n = n + 1; HtmlDocument doc = webBrowser1.Document; HtmlElementCollection coll1= doc.GetElementsByTagName("div"); int counter = 0; int counted = coll1.Count; bool found = false; HtmlElement searchedElement = null; // 修正循环判断逻辑 while(counter < counted && !found) { HtmlElement elem=coll1[counter]; // 改用className获取class属性值 string str = elem.GetAttribute("className"); if(str!="") { string res = str; } if(str.Equals(divClassName)) { found = true; searchedElement = elem; } counter++; } string msg = ""; }
内容的提问来源于stack exchange,提问作者surferNet
相关产品推荐
相关产品推荐

