2011-07-20 28 views
6

不触发onclick事件我使用DOTNET Web浏览器点击输入的元素 - 按钮。当这个点击事件被触发时,它会执行一个JS函数,它使用Google Recaptcher生成验证码,其源代码看起来像Recaptcha link。 现在的问题是,我无法触发onClick事件,我使用下面的代码:输入标签InvokeMember(“点击”)在Web浏览器中

HtmlElementCollection inputColl = HTMLDoc.GetElementsByTagName("input"); 
     foreach (HtmlElement inputTag in inputColl) 
     { 
      string valueAttribute = inputTag.GetAttribute("value"); 
      if (valueAttribute.ToLower() == "sign up") 
      { 
       inputTag.Focus(); 
       inputTag.InvokeMember("Click"); 
       break; 
      } 
     } 

我已经检查过了,我抓住右边的按钮,但不知道为什么onClick事件没有被解雇。 欢迎任何建议。

+0

您的代码为我工作。在浏览器控制文档完全准备好之前,是否有可能运行此代码。 –

+0

不,文档完全加载,我能够得到我想要的元素,我已经调试和检查,我能够抓住它。但是当我点击按钮时什么也没有发生,我猜它的点击事件没有被触发,而当我在Web浏览器上手动执行时,它会被点击。 –

+0

你把代码放在哪里?确保在文档被完全加载后调用它。并且请注意,Web浏览器控件的OnDocumentCompleted通常会调用两次,因此请检查Webbrowser的状态以确保其实际完成。 – longbkit

回答

3
  1. 添加参考Microsoft.mshtml;
  2. 看看下面的固定例如:

    HtmlElementCollection inputColl = HTMLDoc.GetElementsByTagName("input"); 
        foreach (HtmlElement inputTag in inputColl) 
        { 
         string valueAttribute = inputTag.GetAttribute("value"); 
         if (valueAttribute.ToLower() == "sign up") 
         { 
          inputTag.Focus(); 
          IHTMLElement nativeElement = el.DomElement as IHTMLElement; 
          nativeElement.click(); 
          break; 
         } 
        } 
    
0

确定 “点击” 是正确的名字吗?我有一些几乎完全相同的代码,完全相同的事情,属性名称是“onclick”。再看看页面的HTML。

  foreach (HtmlElement element in col) 
      { 
       if (element.GetAttribute(attribute).Equals(attName)) 
       { 
        // Invoke the "Click" member of the button 
        element.InvokeMember("onclick"); 
       } 
      } 
1

这应该可以肯定。我在包含onclick事件的Anchors和DIvs上测试了它。

HtmlElementCollection inputColl = HTMLDoc.GetElementsByTagName("input");  
foreach (HtmlElement inputTag in inputColl)  
{   
    string valueAttribute = inputTag.GetAttribute("value");   
    if (valueAttribute.ToLower() == "sign up")   
    { 
     obj = inputTag.DomElement;        
     mi = obj.GetType().GetMethod("click");        
     mi.Invoke(obj, new object[0]);   
    }  
} 

我一直无法打开链接查看代码,因此我没有专门针对您的案例进行尝试。 无论如何,如果这不起作用,可以在标记容器插入表格,在这种情况下,你必须解雇提交表单的情况下,不触发对SORM点击提交按钮。

不管怎样,可能你的代码将正常工作,以及如果你所说的“单击”为小写(我真的没有验证,只是猜测,螺母在C#中的情况下的事!)。

PS:见Webbrowser: sequencing activites when no DocumentCompleted is fired by a link on hosted webpage对于你的情况下一些有趣端代码,希望它可以帮助和可能有人通过回报帮助我!

+0

“click”不在方法列表中。它返回null为mi。 – Lali

-1

正如你已经拥有焦点的对象,尝试发送ENTER关键是这样的:

SendKeys.Send("{ENTER}") 
0

尝试

if (inputTag.InnerHtml == "sign up" || inputTag.InnerText.Contains("sign up")) 
{ 
    inputTag.InvokeMember("click"); 
} 

的条件刚玩,请检查您是否得到正确的按钮。顺便说一句,小案例“点击”InvokeMember。这是我使用的,它适用于我。