模拟键盘输入/将字符串插入文本区域(adwords)
simulate keyboard input / insert string into textarea (adwords)
我正在尝试使用 CefSharp(版本 43)
从 https://adwords.google.com/ko/KeywordPlanner/Home
中抓取关键字
我能够以编程方式登录 AdWords 门户。
但是,每当我尝试通过将 element.value
、element.innerText
和 element.innerHtml
分配给所需的字符串,但没有任何反应。
var txtElem = document.getElementById("gwt-debug-keywords-text-area");
txtElem.addEventListener("keydown", onKeyPress, false);
function onKeyPress(e) {
alert(e.keyCode);
}
function triggerKeyboardEvent(el, keyCode) {
var evt = document.createEventObject ?
document.createEventObject() : document.createEvent("Events");
if (evt.initEvent) {
evt.initEvent("keydown", true, true);
}
evt.keyCode = keyCode;
evt.which = keyCode;
el.dispatchEvent ? el.dispatchEvent(evt) : el.fireEvent("onkeydown", evt);
}
triggerKeyboardEvent(txtElem, "s".charCodeAt(0));
在上面的代码中出现了警告消息,但文本框仍然是空的。
显然,key-up/down 文本区域上的事件被 google 自己的大量 JS 代码拦截。不幸的是,谷歌的源代码被高度混淆,像我这样的 JS 菜鸟很难调试并遵循逻辑。
如何在文本区域中插入/模拟键盘输入?
我尝试过的一些其他代码(另请参阅注释掉的部分):
var txtElem = document.getElementById("gwt-debug-keywords-text-area");
txtElem.focus();
function simulateKeyEvent(character) {
var e = new KeyboardEvent("keydown", { bubbles: true, cancelable: true, key: character.charCodeAt(0), char: character, shiftKey: false });
//var e = new KeyboardEvent("keydown", { bubbles: true, cancelable: true, key: "a".charCodeAt(0), char: "a", shiftKey: true });
return !document.getElementById("gwt-debug-keywords-text-area").dispatchEvent(e);
var evt = document.createEvent("KeyboardEvent");
/*
if (e.initKeyboardEvent) { // Chrome, IE
e.initKeyboardEvent("keydown", true, true, document.defaultView, "Enter", 0, "", false, "");
} else { // FF
e.initKeyEvent("keydown", true, true, document.defaultView, false, false, false, false, character.charCodeAt(0), 0);
}
*/
//(evt.initKeyEvent || evt.initKeyboardEvent)('keypress', true, true, document.defaultView, 0, 0, 0, 0, 0, character.charCodeAt(0));
evt.initKeyboardEvent("keypress", true, true, document.defaultView, 0, 0, 0, 0, 0, character.charCodeAt(0));
return !document.getElementById("gwt-debug-keywords-text-area").dispatchEvent(evt);
}
simulateKeyEvent("s");
None 这些方法有效....
好的,我找到了解决方案:
function setKeywordText(text) {
var el = document.getElementById("gwt-debug-keywords-text-area");
el.value = text;
var evt = document.createEvent("Events");
evt.initEvent("change", true, true);
el.dispatchEvent(evt);
}
setKeywordText("test");
@masroore 的代码运行良好,今天救了我。但后来我发现 this method is deprecated 并且正在被丢弃。
用 new method 更新了代码,它做同样的事情:
function setKeywordText(text)
{
var el = document.getElementById("gwt-debug-keywords-text-area");
el.value = text;
var evt= new Event('change');
el.dispatchEvent(evt);
}
我正在尝试使用 CefSharp(版本 43)
从https://adwords.google.com/ko/KeywordPlanner/Home
中抓取关键字
我能够以编程方式登录 AdWords 门户。
但是,每当我尝试通过将 element.value
、element.innerText
和 element.innerHtml
分配给所需的字符串,但没有任何反应。
var txtElem = document.getElementById("gwt-debug-keywords-text-area");
txtElem.addEventListener("keydown", onKeyPress, false);
function onKeyPress(e) {
alert(e.keyCode);
}
function triggerKeyboardEvent(el, keyCode) {
var evt = document.createEventObject ?
document.createEventObject() : document.createEvent("Events");
if (evt.initEvent) {
evt.initEvent("keydown", true, true);
}
evt.keyCode = keyCode;
evt.which = keyCode;
el.dispatchEvent ? el.dispatchEvent(evt) : el.fireEvent("onkeydown", evt);
}
triggerKeyboardEvent(txtElem, "s".charCodeAt(0));
在上面的代码中出现了警告消息,但文本框仍然是空的。
显然,key-up/down 文本区域上的事件被 google 自己的大量 JS 代码拦截。不幸的是,谷歌的源代码被高度混淆,像我这样的 JS 菜鸟很难调试并遵循逻辑。
如何在文本区域中插入/模拟键盘输入?
我尝试过的一些其他代码(另请参阅注释掉的部分):
var txtElem = document.getElementById("gwt-debug-keywords-text-area");
txtElem.focus();
function simulateKeyEvent(character) {
var e = new KeyboardEvent("keydown", { bubbles: true, cancelable: true, key: character.charCodeAt(0), char: character, shiftKey: false });
//var e = new KeyboardEvent("keydown", { bubbles: true, cancelable: true, key: "a".charCodeAt(0), char: "a", shiftKey: true });
return !document.getElementById("gwt-debug-keywords-text-area").dispatchEvent(e);
var evt = document.createEvent("KeyboardEvent");
/*
if (e.initKeyboardEvent) { // Chrome, IE
e.initKeyboardEvent("keydown", true, true, document.defaultView, "Enter", 0, "", false, "");
} else { // FF
e.initKeyEvent("keydown", true, true, document.defaultView, false, false, false, false, character.charCodeAt(0), 0);
}
*/
//(evt.initKeyEvent || evt.initKeyboardEvent)('keypress', true, true, document.defaultView, 0, 0, 0, 0, 0, character.charCodeAt(0));
evt.initKeyboardEvent("keypress", true, true, document.defaultView, 0, 0, 0, 0, 0, character.charCodeAt(0));
return !document.getElementById("gwt-debug-keywords-text-area").dispatchEvent(evt);
}
simulateKeyEvent("s");
None 这些方法有效....
好的,我找到了解决方案:
function setKeywordText(text) {
var el = document.getElementById("gwt-debug-keywords-text-area");
el.value = text;
var evt = document.createEvent("Events");
evt.initEvent("change", true, true);
el.dispatchEvent(evt);
}
setKeywordText("test");
@masroore 的代码运行良好,今天救了我。但后来我发现 this method is deprecated 并且正在被丢弃。
用 new method 更新了代码,它做同样的事情:
function setKeywordText(text)
{
var el = document.getElementById("gwt-debug-keywords-text-area");
el.value = text;
var evt= new Event('change');
el.dispatchEvent(evt);
}