С# получить элемент по имени

Итак, я понял, как получить элемент по id, но я не знаю, как я могу получить элемент по имени.

private void SendData()
{
    webBrowser1.Document.GetElementById("textfield1")
        .SetAttribute("value", textBox1.Text);
    webBrowser1.Document.GetElementById("textfield2")
        .SetAttribute("value", textBox1.Text);
}

Проблема в HTML textfield1 - это идентификатор, а textfield2 - это имя. Итак, я хочу выяснить, как получить textfield2:

<html>
    <input type="text" id="textfield1" value="TEXT1"><br>
    <input type="text" name="textfield2" value="TEXT2"><br>
    <input type="submit" value="Submit">
</html>

person Patric Nøis    schedule 02.10.2015    source источник
comment
Что такое webBrowser1 и документ? Какую библиотеку/фреймворк вы используете?   -  person sara    schedule 02.10.2015
comment
@kai Это просто System.Windows.Forms.WebBrowser и его HtmlDocument.   -  person Yeldar Kurmangaliyev    schedule 02.10.2015


Ответы (3)


Вы можете получить HtmlElementCollection - например, используя метод GetElementsByTagName. Затем HtmlElementCollection имеет GetElementsByName метод:

webBrowser1.Document
    .GetElementsByTagName("input")
    .GetElementsByName("textfield2")[0]
        .SetAttribute("value", textBox1.Text);
person Yeldar Kurmangaliyev    schedule 02.10.2015

Вы можете использовать HtmlElementCollection .GetElementsByName, чтобы получить значение элементов

webBrowser1.Document.GetElementsByName("textfield2").SetAttribute("value", textBox1.Text);

РЕДАКТИРОВАТЬ

foreach (HtmlElement he in webBrowser1.Document.All.GetElementsByName("textfield2"))
{
    he.SetAttribute("value", textBox1.Text);
}
person Mohit Shrivastava    schedule 02.10.2015
comment
Вы уверены, что код работает так, как задумано? .GetElementsByName ДОЛЖЕН возвращать массив, поэтому вам придется использовать [0] перед .SetAttribute, или я ошибаюсь? - person Thomas; 02.10.2015
comment
У меня почему-то нет такого метода... Я использую .NET 4.5. - person Yeldar Kurmangaliyev; 02.10.2015
comment
HtmlDocument не содержит такого метода, он не компилируется. - person sara; 02.10.2015
comment
webBrowser1.Document.GetElementsByName(textfield2).SetAttribute(value, textBox2.Text); webBrowser1.Document.GetElementsByName(login_buton).InvokeMember(щелчок); я пробовал это, но не могу заставить его работать, я должен добавить что-то в свои коды или? - person Patric Nøis; 02.10.2015
comment
привет, webBrowser1.Document.GetElementsByName(textfield2).SetAttribute(value, textBox2.Text); получит коллекции элементов, а не один элемент, как в getelementbyid. попробуйте webBrowser1.Document.GetElementsByName(textfield2)[0].SetAttribute(value, textBox1.Text); Если не работает, можете ли вы опубликовать, какой именно код ошибки. Мне интересно, полностью ли загружен html. - person Padhu; 02.10.2015

Вы не можете получить доступ к элементам напрямую по имени, но вы можете получить к ним доступ, сначала найдя входные теги и проиндексировав результат, чтобы найти теги по имени.

webBrowser1.Document.GetElementsByTagName("input")["textfield2"]

or

webBrowser1.Document
    .GetElementsByTagName("input")
    .GetElementsByName("textfield2")[0]
person Shanaka Rusith    schedule 02.10.2015