如何使用 jQuery 在输入字段中模拟输入?

IT技术 javascript jquery greasemonkey keyboard-events textinput
2021-02-24 20:26:50

我想要的是<input>使用 javascript模拟在字段中输入

我有以下代码:

var press = jQuery.Event("keydown");
press.ctrlKey = false;
press.which = 65;
$("#test").trigger(press);

但是当我加载页面时,#test输入字段没有输入字符,'65'的键码代表'A',但没有'A'输入。

基本上我想要的是使用 Greasemonkey 自动输入网站。

请给我一些想法或一些我可以用来做到这一点的图书馆。
非常感谢!

1个回答

你可以发送按键事件,任何监听它们的东西都会得到它们,但它们不会改变 input,所以你不会看到字母A出现,例如。这主要是一个安全问题;有关此问题的讨论,请参阅“手动触发事件”

因此,如果您希望字母出现,则必须在发送键事件时更改输入的值。有一个 jQuery 插件,请参阅$.fn.sendkeys插件”

您可以<input>此 jsFiddle 中查看 a对用户应用的键、键事件和该插件的react

作为参考,这是来自 jsFiddle 的关键代码段:

$("button").click ( function (zEvent) {
    if (zEvent.target.id == "simA_plain") {
        console.log ("Send Plain key event");
        var keyVal = 65;
        $("#eventTarg").trigger ( {
            type: 'keypress', keyCode: keyVal, which: keyVal, charCode: keyVal
        } );
    }
    else {
        console.log ("Use the Plugin to simulate a keystroke");
        $("#eventTarg").sendkeys ("B") ;
    }
} );


如果您只是想“模拟输入”,那么该插件就足够了<input>但是,根据您真正想做的事情,您可能需要执行以下一项或多项操作:

  1. 只需将文本设置为您想要的内容即可。
  2. 发送一个keydown事件,如果页面的 javascript 触发了该事件。
  3. 同样,change如果页面的 javascript 触发了事件,则发送事件等。
  4. 只需找到并直接调用页面的 javascript。使用脚本注入,该位置黑客unsafeWindow和/或@grant none模式来做到这一点。
  5. 还有什么?陈述您的真实目标并链接到目标页面。
它真的很有帮助:)
2021-05-02 20:26:50
请问与此等效的 Javascript 是什么?我正在尝试在 Chrome 扩展程序中的第三方网站上手动模拟键入搜索,但无法弄清楚如何触发他们的搜索代码,因为手动类型和搜索的行为与程序化搜索的行为不同......
2021-05-03 20:26:50
@isa,这是另一个站点的问题。但这可能是您的浏览器,或其配置或扩展。或者,可能是您所在的网络。
2021-05-04 20:26:50
哦,我想这可能是我的问题,但我不知道为什么。它把我带到了小提琴页面,它的云图标一直在跳,内容似乎没有加载。
2021-05-15 20:26:50
@isa,我刚刚检查了链接和小提琴。两者似乎仍然有效。为什么/它究竟如何“不起作用”的?
2021-05-17 20:26:50