Управление WebBrowser: щелчок не работает

Я использовал событие DocumentComplete для автозаполнения формы. Все в порядке, кроме галочки. HTML-код следующий:

<span class="myClass" style="padding-left: 12px; vertical-align: bottom; cursor: pointer;">
<input id="ich_liebe_dich" type="checkbox" name="ich$liebe$dich">
<label for="ich_liebe_dich"> MyLabel</label>
</span>

Я пытался использовать:

webbrowser.Document.GetElementById("ich_liebe_dich").InvokeMember("click");

а также

webbrowser.Document.GetElementById("ich$liebe$dich").InvokeMember("click");

а также:

foreach (HtmlElement current in webbrowser.Document.GetElementsByTagName(tag))
{
    if (current.GetAttribute(attr).Equals(attName))
        current.InvokeMember(invoke);
}

где attr="id", tag="input", invoke="click" и attName= либо "ich_liebe_dich", либо "ich$liebe$dich".

Лучшее, что у меня было, это временно - всего на долю секунды - установленный флажок. Почему это произошло? Любые решения?


person pzogr    schedule 04.07.2012    source источник
comment
Обратите внимание на название метода. Это ById, а не ByName.   -  person Hans Passant    schedule 04.07.2012


Ответы (2)


Ответ leppie вызвал у меня любопытство, потому что я никогда нигде не читал об InvokeMember("check") и я погуглил! Первый ответ, который я получил, это http://social.msdn.microsoft.com/forums/en-US/winforms/thread/750b11dc-08f8-4cb4-bcaf-80c91f0fd425/

Я прочитал статью и нашел решение... Если я добавлю эту строку в событие DocumentCompleted, все будет работать нормально!

if (webbrowser.ReadyState==WebBrowserReadyState.Complete)

Кажется, что на странице есть фреймы, и событие DocumentCompleted срабатывает до загрузки всей страницы.

редактировать: я забыл упомянуть, что код, который я использовал (и работает), следующий:

webbrowser.Document.GetElementById("ich_liebe_dich").InvokeMember("click");
person pzogr    schedule 04.07.2012

Я уже ответил на похожий вопрос

webBrowser.Navigate("http://www.google.com");

если у вас есть идентификатор, используйте это:

webBrowser1.Document.GetElementById("id").InvokeMember("click");

если у вас есть тэг, используйте это

 webBrowser.Navigate("http://www.google.com");

В событии DocumentCompleted веб-браузера

HtmlElement textElement = webBrowser.Document.All.GetElementsByName("q")[0];
textElement.SetAttribute("value", "your text to search");
HtmlElement btnElement = webBrowser.Document.All.GetElementsByName("btnG")[0];
btnElement.InvokeMember("click");

если у вас есть класс имен, используйте это:

HtmlElementCollection classButton = webBrowser1.Document.All;
foreach (HtmlElement element in classButton) 
 {
     if (element.GetAttribute("className") == "button")
    {
       element.InvokeMember("click");
     }
 }

для добавления текста в текстовое поле google.com используйте это:

 webBrowser1.Document.GetElementById("gs_tti0").InnerText = "hello world";
person Alessio Koci    schedule 04.07.2012