【问题标题】:Simulate key strokes in HTML textbox in geckoWebBrowser在 geckoWebBrowser 中模拟 HTML 文本框中的击键
【发布时间】:2019-09-12 12:39:56
【问题描述】:

我正在使用“geckoWebBrowser1”组件。我已经导航到一个 URL,该 URL 将显示一个带有 ID 的登录文本框:login-email

现在我成功地将“someemail@hotmail.com”放入该文本框中。 但是,实际键入文本框检测到 keydown/keyup 等事件的电子邮件是必要的。因此,当我尝试单击登录按钮时,即使“someemail@hotmail.com”在那里,它也认为文本框中不存在任何文本。

所以我想知道当我在那里写电子邮件时如何安全地模拟关键事件。它必须是安全的,因此如果窗口不活动,则不应使用“SendKeys.Send”。我正在寻找一种安全的方法来做到这一点。例如是否可以为此注入javascript?

文本框的 HTML 如下所示:

<input type="email" autocomplete="username" name="email" id="login-email" autofocus="autofocus" placeholder="Enter e-mail" class="el-input__inner">

//我使用的代码

        private void geckoWebBrowser1_DocumentCompleted(object sender, Gecko.Events.GeckoDocumentCompletedEventArgs e)
        {
            //Input email address into this textBox when the "geckoWebBrowser1_DocumentCompleted" fires!

            //<input type="email" autocomplete="username" name="email" id="login-email" 
            //autofocus="autofocus" placeholder="Enter e-mail" class="el-input__inner">
            foreach (var elements in geckoWebBrowser1.Document.GetElementsByTagName("input"))
            {
                if (elements.Id.ToLower() == "login-email")
                {
                    elements.SetAttribute("value", "someemail@hotmail.com");
                    break;
                }
            }
        }

【问题讨论】:

    标签: javascript jquery html keyevent gecko


    【解决方案1】:

    我找到了解决问题的方法。下面的解决方案模拟了按键事件,并将每个字母一个一个地放入文本框中。

    谢谢!

            private void geckoWebBrowser1_DocumentCompleted(object sender, Gecko.Events.GeckoDocumentCompletedEventArgs e)
            {
                //Input email address
                //<input type="email" autocomplete="username" name="email" id="login-email" 
                //autofocus="autofocus" placeholder="Enter e-mail" class="el-input__inner">
                foreach (var elements in geckoWebBrowser1.Document.GetElementsByTagName("input"))
                {
                    if (elements.Id.ToLower() == "login-email")
                    {
                        String username = "someemail@hotmail.com";
                        DomEventArgs ev = geckoWebBrowser1.Document.CreateEvent("KeyEvents");
                        var webEvent = new Gecko.WebIDL.Event(geckoWebBrowser1.Window.DomWindow, ev.DomEvent as nsISupports);
                        webEvent.InitEvent("focus", true, false);
                        elements.GetEventTarget().DispatchEvent(ev);
                        var nsIEventVar = ((nsIDOMKeyEvent)ev.DomEvent);
                        char[] inputChars = username.ToCharArray();
                        foreach (var vchar in inputChars)
                        {
                            int keyCode = (int)(System.Windows.Forms.Keys)vchar;
                            nsIEventVar.InitKeyEvent(new nsAString("keypress"), true, false, geckoWebBrowser1.Window.DomWindow, false, false, false, false, (uint)keyCode, (uint)keyCode);
                            Xpcom.QueryInterface<nsIDOMEventTarget>(elements.DomObject).DispatchEvent(nsIEventVar);
                        }
    
                    }
                }
            }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多