3

鉴于 Winforms Webbrowser DOM 中的以下 html,我正在尝试获取第二个元素value="type102"

    <div class="Input"><input type="radio" name="type" value="type101" 
onclick="setType('type101');"><a href="javaScript:setType('type101');" 
onclick="s_objectID=&quot;javascript:setType('type101');_1&quot;;return this.s_oc?
this.s_oc(e):true">type101</a></div>

    <div class="Input"><input type="radio" name="type" value="type102" 
onclick="setType('type102');" checked="checked"><a href="javaScript:setType('type102');" 
onclick="s_objectID=&quot;javascript:setType('type102');_1&quot;;return this.s_oc?
this.s_oc(e):true">type102</a></div>

我用过 HtmlElement htmlElem = browser.Document.GetElementById(....

HtmlElement htmlElem = browser.Document.All.GetElementsByName(....

之前,但在这种情况下,它们都是相同的,因此需要按值或 href 获取

是否可以在没有外部库的情况下直接获取第二个元素,或者我是否必须获取 GetElementsByName 的集合并遍历它们?

4

3 回答 3

3
HtmlElementCollection col=  webBrowser1.Document.GetElementsByTagName("input");
HtmlElement wanted;

foreach (HtmlElement item in col)
{
    if (item.GetAttribute("value")=="type102")
    {
        wanted = item;
        break;
    }
}
于 2012-10-17T13:36:01.340 回答
2
var elems = webBrowser1.Document.GetElementsByTagName("input");
var myInputElement = elems.First(e => !string.IsNullOrEmpty(e) && e.Trim().ToLower().Equals("type102"));
foreach (var elem in elems)
{
    var value = elem.GetAttribute("value");
    if (string.IsNullOrEmpty(value) && value.Trim().ToLower().Equals("type102"))
    {
        MessageBox.Show(value);
        break;
    }
}

或者让它更短

var elems = webBrowser1.Document.GetElementsByTagName("input");
var myInputElement = elems.First(e => !string.IsNullOrEmpty(e) && e.Trim().ToLower().Equals("type102"));

这是你想要的?您还可以查看HtmlAgilityPack以了解此类内容。

于 2012-10-17T13:35:52.507 回答
1
HtmlElement htmlElem = browser.Document.All.GetElementsByName(...)[1]
于 2012-10-17T13:34:58.583 回答