【问题标题】:Uncheck a checkbox in webpage through WebBrowser control通过 WebBrowser 控件取消选中网页中的复选框
【发布时间】:2009-11-05 14:00:04
【问题描述】:

有没有办法取消选中/选中网页浏览器控件中加载的网页中的复选框?谢谢。

更新:(这是我最初尝试但没有运气)

HtmlDocument rememberme = this.webBrowser1.Document;
rememberme.GetElementById("remBox").SetAttribute("checked", "false");

【问题讨论】:

  • CHECKED 属性实际上不是布尔值,而是存在或不存在,这可能是 SetAttribute("checked", "false") 失败的原因。您也许可以完全删除该属性。
  • 您可以将其设置为 null,它应该可以工作:ele.SetAttribute("checked", null);

标签: c# .net winforms checkbox webbrowser-control


【解决方案1】:

你可以使用:

webBrowser.Document.InvokeScript

见:

InvokeScript

这样你就可以调用 JS 函数来对页面做你想做的事情。

另一种方法是使用 mshtml API,如下所示: ( ( HTMLInputElement )this.webBrowser1.Document.GetElementById( "test" ).DomElement ).@checked = false;

【讨论】:

  • 使用 JavaScript 取消选中单个复选框的正确方法是什么?
  • 这取决于 - 如果您知道复选框的 ID,则只需使用 document.getElementById( 'yourid' ).checked = false; 但如果它是动态的(如在控制中的 ASP.NET 中),则必须使用另一种方式 - 按类定位它名字,遍历DOM树什么的。
【解决方案2】:

您可以使用 HTML 元素的 InvokeMember 方法来调用 DOM 事件。在我们的例子中“点击”。如果你有一个 WebBrowser 控件,那么你所要做的就是找到元素并调用方法。

For Each ele As HtmlElement In Me.WebBrowser1.Document.All
        If ele.Name = "accept" Then
            ele.InvokeMember("click")
        End If
Next

在我的示例中,“接受”是复选框元素的名称。您可以将 SetAttribute() 用于其他一些控件,但模拟单击的最佳方法是使用 GetAttribute() 查找复选框状态,并在复选框设置为 false 时单击。希望对您有所帮助。

【讨论】:

    【解决方案3】:

    在 javascript 中,您应该能够使用 clientId 来设置 .checked = false。

    【讨论】:

    • 这与浏览器控件有什么关系?
    【解决方案4】:

    http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.invokescript.aspx 您需要分析页面结构以找出如何定位复选框并使用 Myles 的方法在 javascript 中选中/取消选中复选框。

    【讨论】:

    • 跳过.Net的包装类直接调用IE API会更复杂。
    • 我的意思是,一旦您在 webbrowser 控件中获得了文档,您就可以直接操作 dom 对象,而无需借助 javascript。
    【解决方案5】:

    LONG 版本是您必须使用 DOM 函数来查找要更新的控件的客户端 ID,然后设置它的值。

    一旦我开始工作,如果没有其他人比我做得更好,我可能会为你找到一些示例代码......

    编辑:

    基本上你需要做的就是:

    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 并在您可以使用 3 行代码设置控件的值时调用它。

    【讨论】:

    • 应该是input.@checked = false;。并且使用 JS 你不必引用 mshtml 并且你可以在一行中做到这一点 - this.webBrowser1.Document.InvokeScript( "uncheck" );.
    • 好吧,一行 C# + 一行 JS。
    • 好吧,如果我真的想的话,我可以将它压缩成一行 C#。 ;) 我怀疑实际上将脚本添加到页面并使用它最终会更多。
    • 我的答案中使用 mshtml 的解决方案实际上是一行;)而 JS 方法成为一行将需要访问页面源 - 否则有必要使用 mshtml API 插入您的脚本。
    猜你喜欢
    • 2012-06-30
    • 2015-01-29
    • 2013-06-24
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多