2012-07-04 4 views
3

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

<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); 
} 

где атр = "идентификатор", tag = "input", invoke = "click" и attName = либо "ich_lieb e_dich "или" ich $ liebe $ dich ".

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

+0

'InvokeMember ("чек")'? – leppie

+0

@abatishchev: есть – pzogr

+0

@leppie: не работает ... – pzogr

ответ

1

Ответ 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"); 
+0

+1 для поиска решения вашей проблемы :) – leppie

1

Я уже ответил на similar question

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

если у вас есть использование ID это:

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"; 
Смежные вопросы