3

Winforms Webbrowser DOMに次のhtmlがある場合、2番目の要素を次のように取得しようとしています。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で取得する必要があります

外部ライブラリなしで2番目の要素を直接取得することは可能ですか、それとも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 に答える