在web浏览器中输入标签InvokeMember("Click")没有触发onclick事件

本文关键字:quot 事件 onclick Click web 标签 输入 InvokeMember 浏览器 | 更新日期: 2023-09-27 18:03:01

我正在使用Dotnet Web浏览器单击输入元素-按钮。当这个click事件被触发时,它执行一个JS函数,该函数使用Google Recaptcher生成captcha,其来源看起来像Recaptcha链接。现在的问题是,我无法触发onClick事件,我使用以下代码:

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事件没有被解雇。

在web浏览器中输入标签InvokeMember("Click")没有触发onclick事件

    添加对Microsoft.mshtml的引用
  1. 看下面的固定示例:

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

这肯定可以工作。我在包含onclick事件的锚和div上测试了它。

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

我无法打开链接查看代码,因此我没有专门针对您的情况进行尝试。无论如何,如果这不起作用,可能TAG容器被插入到表单中,在这种情况下,您必须触发表单的提交事件,而不是触发对sorm提交按钮的单击。

无论如何,如果你将"click"调用为小写,可能你的代码也会工作得很好(我真的没有验证,只是猜测,在c#中没有关系!)

PS:请参阅web浏览器:排序活动时没有DocumentCompleted是由托管网页上的一些有趣的侧代码为您的情况下的链接触发,希望它能帮助,并可能有人帮助我返回!

你确定"Click"是正确的名字吗?我有一些几乎相同的代码,做完全相同的事情,属性名称是"onclick"。再看一下这个页面的HTML。

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

Try

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

只是玩条件,检查你是否得到了正确的按钮。顺便说一句,在InvokeMember上"点击"一下。

当你已经有了焦点对象,尝试发送ENTER键像这样:

SendKeys.Send("{ENTER}")