我有一个C#winforms应用程序,其中嵌入了WebBrowser控件以实现网站自动化。我需要从应用程序内部以编程方式发送键盘笔划到嵌入式WebBrowser控件,即使应用程序隐藏或未聚焦。将文本设置为HTML文本框通常可以正常工作,但有时不会(因为带有AngularJS验证的HTML表单会忽略它,因为我认为它不是真正的打字)。
我花了两周的时间搜索并尝试了不同的方法:
SendInput或SendKeys:仅在应用程序被预先考虑(不好)时才能正常工作。
提升OnKeyDown和OnKeyPress事件:在表单级别和WebBrowser控件级别不能为我工作。
在DOM中使用JQuery提升keydown,keypress,keyup事件:没有成功。
对此有任何解决方案吗? 感谢
答案 0 :(得分:0)
经过大量的试验和错误后找到了解决方案。 AngularJS表单验证机制等待“更改”事件发生(而不是keydown,keyup,keypress)。触发此事件并不容易(JQuery.trigger没有完成这项工作)。我在WebBrowser控件中注入了以下函数,然后调用它。
setInputText = function (id, str, x) {
var el = $('#' + id);
if (typeof x === "undefined") {
x = 0;
el.focus();
}
if (x >= str.length) {
el.blur();
return;
}
var c = str.charAt(x);
el.val(el.val() + c);
//This is the magic: trigger change event in pure JS
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
el[0].dispatchEvent(evt);
//type each character every 75ms
setTimeout(function () { setInputText(id, str, ++x); }, 75);
return;
}