javascript - 模拟键盘输入/将字符串插入文本区域(adwords)

标签 javascript c# html google-chrome google-chrome-devtools

我正在尝试使用 CefSharphttps://adwords.google.com/ko/KeywordPlanner/Home 抓取关键字(第 43 版)

我能够以编程方式登录到 adwords 门户。

但是,每当我尝试通过分配 element.value 将一些文本(搜索关键字)插入特定文本区域(id="gwt-debug-keywords-text-area")时element.innerTextelement.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));

在上面的代码中,出现了警告消息,但文本框仍然是空的。

显然,该文本区域上的上键/下键事件被谷歌自己的大量 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");

这些方法都不起作用....

最佳答案

好的,我找到了解决方案:

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");

关于javascript - 模拟键盘输入/将字符串插入文本区域(adwords),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33063418/

相关文章:

c# - 如何使用 RichTextBox 显示 html 内容?

jquery - 图片在屏幕后面旋转,1px 问题

javascript - 我们可以从维基词典 api 中获得所需的部分吗?

javascript - 通过javascript向html添加元素的最简单方法是什么

javascript - 将一个 div 替换为另一个

c# - 如何在 C# 中的一行中设置多个变量值?

c# - 在 sql server 中创建用户、登录并授予权限

javascript - 如何在使用jquery替换类后添加类

html - 如何测试网站的更大显示器?

javascript - 在 Javascript 中按值给出一系列目标的排名分数