Есть ли способ снять или установить флажок на веб-странице, загруженной в элемент управления веб-браузером? Спасибо.
Обновление: (Это то, что я изначально пытался без везения)
HtmlDocument rememberme = this.webBrowser1.Document;
rememberme.GetElementById("remBox").SetAttribute("checked", "false");
Вы можете использовать:
webBrowser.Document.InvokeScript
см
Таким образом вы можете вызвать функцию JS, которая будет делать то, что вы хотите на странице.
Другой способ - использовать mshtml API, например:
( ( HTMLInputElement )this.webBrowser1.Document.GetElementById( "test" ).DomElement ).@checked = false;
document.getElementById( 'yourid' ).checked = false;
Но если он динамический (как в ASP.NET в управлении), то вам придется использовать другой способ - найти его по имени класса, пересечь дерево DOM или что-то еще.
Вы можете использовать метод InvokeMember элемента HTML для вызова события DOM. В нашем случае "click". Если у вас есть элемент управления WebBrowser, все, что вам нужно сделать, это найти элемент и вызвать метод.
For Each ele As HtmlElement In Me.WebBrowser1.Document.All
If ele.Name = "accept" Then
ele.InvokeMember("click")
End If
Next
В моем примере "accept" было именем элемента флажка. Вы можете использовать SetAttribute() для некоторых других элементов управления, но лучший способ эмулировать щелчок - найти, что такое состояние флажка, используя GetAttribute() и щелкнуть, если флажок установлен в значение false. Надеюсь, что это поможет.
http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.invokescript.aspx вам нужно проанализировать структуру страницы, чтобы узнать, как установить флажок и использовать метод Myles, чтобы установить/снять флажок в javascript.
Версия LONG состоит в том, что вам придется использовать функции DOM для поиска идентификатора клиента элемента управления, который вы хотите обновить, а затем просто установите его значение.
Возможно, я найду для вас пример кода, как только я приеду на работу, если никто другой не побьет меня...
EDIT:
В основном все, что вам нужно сделать, это:
HTMLDocumentClass doc = webBrowserControl.Document as mshtml.HTMLDocumentClass;
HTMLInputElement input = doc.all.item("checkboxID", 0) as HTMLInputElement;
input.value ="false"; //Could be 0, not sure...
//could also be input.@checked = false, sorry I haven't actually used this on a checkbox before... one of these should work though
Так что да, не уверен, почему кто-то будет изо всех сил писать JavaScript и вызывать его, когда вы можете установить контрольное значение с тремя строками кода.
input.@checked = false;
, А с помощью JS вам не нужно ссылаться на mshtml, и вы можете сделать это в одной строке - this.webBrowser1.Document.InvokeScript( "uncheck" );
,
В javascript вы можете использовать clientId для установки .checked = false.