WebBrowser控件:点击无效

3

我使用了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);
}

在属性为"id",标签为"input",触发为"click"且attName为"ich_liebe_dich"或"ich$liebe$dich"的情况下。

我得到的最佳结果只是暂时选中了复选框,只持续了一小会儿,为什么会这样?有什么解决办法吗?


注意方法名称。它是ById,而不是ByName。 - Hans Passant
2个回答

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

1

我已经回答过一个类似的问题

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

如果您有ID,请使用此ID:

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

如果您有标签名称,请使用它

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

在 Web 浏览器的 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";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接