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

其中 attr="id"、tag="input"、invoke="click" 和 attName= "ich_liebe_dich" 或 "ich$liebe$dich"。

我得到的最好的结果是一个短暂的 - 只是几分之一秒 - 选中的复选框。为什么会发生这种情况?有什么解决办法吗?

4

2 回答 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");
于 2012-07-04T09:43:13.167 回答
1

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

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";
于 2012-07-04T12:47:45.120 回答