WebBrowser控件:单击将无法正常工作

时间:2012-07-04 08:57:36

标签: c# winforms click webbrowser-control invoke

我使用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”。

我得到的最好的是一个短暂的 - 只需一秒钟 - 复选框。为什么会这样?任何解决方案?

2 个答案:

答案 0 :(得分:1)

leppie的回答让我好奇,因为我从来没有读过有关InvokeMember(“check”)的任何内容,我用Google搜索了它!我得到的第一个答案是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 :(得分:1)

我已经回答了similar question

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

如果你有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";