Веб-автоматизация. Как ввести текст в поле форматированного текста на веб-сайте (текстовое поле), определенное классом?

Я пробовал это в течение нескольких дней и полностью застрял. Если бы кто-нибудь мог мне помочь, я был бы очень благодарен; Я использую VB.NET.

HTML-код:

    <tbody>
    <tr>
    <td class="chat-attachment-cell"><a href="#" id="attachment-link" class="attachment-link"></a></td> 
    <td class="chat-input-cell">

    <textarea class="chat-message-input"></textarea>

    </td> 
    <td class="chat-send-cell"><a href="#" class="chat-send-button"> alt="Send" width="66" height="66" border="0">
    </a>
    </td>
    </tr>
    </tbody>

Текстовое поле, в которое мне нужно ввести, это этот бит

    <textarea class="chat-message-input"></textarea>

Заранее благодарим за любую оказанную помощь


person Kent Taylor    schedule 28.07.2018    source источник
comment
Смотрите мой ответ здесь: Возможный дубликат Есть ли возможность обращаться к элементам на сайте, у которых нет идентификатора?   -  person Visual Vincent    schedule 28.07.2018
comment
Ответ на ваш вопрос можно найти по ссылке, которую Visual Vincent разместил выше....   -  person Zeddy    schedule 29.07.2018
comment
@Visual Vincent Я думаю, что в вашей энциклопедии отсутствует webBrowser1.Document.All с поиском атрибутов с использованием свойства OuterHtml (которое нацелено на все содержимое тега). (И я беспокоюсь о том, чтобы писать слишком много :)   -  person Jimi    schedule 29.07.2018
comment
@Jimi Джими: я не уверен, что вы имеете в виду ... Почему вы хотите искать элементы с определенными атрибутами, используя OuterHtml, а не GetAttribute()?   -  person Visual Vincent    schedule 29.07.2018
comment
@Visual Vincent Что ж, если вы не можете предварительно отфильтровать элементы с помощью GetElementsByTagName() или у вас есть идентификатор, вы можете перейти к Document.All и использовать GetElementsByName(). Если у вас нет даже этого, вы можете проверить значение OuterHtml и протестировать весь тег, который он возвращает. Думаю, отсюда и GetElementsByClassName().   -  person Jimi    schedule 29.07.2018
comment
@Jimi: я знаю о Document.All (фактически я использую его в третьем примере), однако я до сих пор не понимаю, зачем проверять весь тег поверх GetAttribute()? Чтобы проверить несколько атрибутов, используйте несколько вызовов GetAttribute(). Сопоставление более одного атрибута (или всего тега) с использованием OuterHtml — плохая идея, поскольку (в зависимости от того, как работает веб-сайт) атрибуты не всегда могут быть в одном и том же порядке.   -  person Visual Vincent    schedule 29.07.2018
comment
@Visual Vincent Да, но вы вызываете GetAttribute() для элемента, который вы уже идентифицировали, или для элементов в уже отфильтрованной коллекции (GetElementsByTabName()). Что, если у вас есть только имя класса элемента (без имени тега, без идентификатора, без имени)?   -  person Jimi    schedule 29.07.2018
comment
@Jimi: я изменил первый пример и отметил GetElementsByTagName() в его описании. :)   -  person Visual Vincent    schedule 29.07.2018


Ответы (1)


Вы выбираете элемент, а затем меняете свойство .innertext на то, что хотите.

Есть несколько способов сделать это, и я не могу привести вам пример, потому что я не знаю, что вы используете, и не знаю весь html, но, например, это может выглядеть так:

WebBrowser1.Document.GetElementById("someid").InnerText="Sometext"

Для начала вы можете попробовать посмотреть, как выглядит полученная вами коллекция элементов, тогда вы сможете понять, что делать дальше.

Dim test = WebBrowser1.Document.GetElementsByTagName("textarea")

Например на этой странице:

  Dim test = WebBrowser1.Document.GetElementsByTagName("tbody")
   test(1).InnerText = "Hi there"

введите здесь описание изображения

person CruleD    schedule 28.07.2018
comment
Однако элемент не определяется идентификатором, он определяется классом. ‹класс textarea=чат-сообщение-ввод›‹/textarea› - person Kent Taylor; 28.07.2018
comment
Я сказал, что это может выглядеть так. Мы не знаем, что он использует/хочет использовать, ни весь html. например, если это веб-браузер, мы можем выбрать элемент, используя имя класса. - person CruleD; 28.07.2018
comment
Я использую встроенный веб-браузер, по умолчанию в панели инструментов, а не дополнительный плагин или что-то в этом роде. - person Kent Taylor; 28.07.2018
comment
И используете ли вы какую-то дополнительную библиотеку, например, htmlagilitypack? - person CruleD; 28.07.2018