模拟键盘输入/将字符串插入文本区域(adwords) [英] simulate keyboard input / insert string into textarea (adwords)

查看:133
本文介绍了模拟键盘输入/将字符串插入文本区域(adwords)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to scrape keywords from https://adwords.google.com/ko/KeywordPlanner/Home using CefSharp (version 43)

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

I am able to log into the adwords portal programmatically.

但是,每当我尝试通过将element.valueelement.innerTextelement.innerHtml分配给所需的字符串来在特定的文本区域(id="gwt-debug-keywords-text-area")中插入一些文本(搜索关键字)时,都不会发生.

However, whenever I try to insert some text (search keywords) into the specific textarea (id="gwt-debug-keywords-text-area") by assigning element.value, element.innerText and element.innerHtml to the desired string, but nothing happens.

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

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

In the above code alert message is raised, yet the textbox still remains empty.

很明显,该文本区域上的键上/下事件被Google自己的大量JS代码拦截.不幸的是,Google的源代码非常混乱,对于像我这样的JS新手来说,调试和调试非常困难.遵循逻辑.

Apparently, key-up/down events on that textarea are being intercepted by google's own voluminous JS code. Unfortunately Googles sourcecode are highly obfuscated and it's very difficult for a JS-noob like me to debug & follow the logic.

如何在文本区域中插入/模拟键盘输入?

How may I insert / simulate keyboard typing into the textarea?

我尝试过的其他一些代码(另请参见注释掉的部分):

Some other code I've tried (also see the commented out sections):

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 of these methods work....

推荐答案

好,我找到了解决方法:

Ok, I found the solution:

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

这篇关于模拟键盘输入/将字符串插入文本区域(adwords)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆