javascript - 如何解决 javascript 文本框上的按键要求?

标签 javascript jquery

您好,感谢您的阅读。

所以我尝试使用 Chrome 自动登录此表单。

https://app.patientaccess.com/login

我使用自己的 Chrome 扩展程序来执行此操作。它基本上只是一个自动填充字段的 JavaScript 文件。我将它用于一系列网站。

例如,这是我用于填写文本框的函数:

function fld(param, val){try{document.querySelectorAll(param)[0].value = val} catch(e){}}

我这样调用它:

fld("input[id='loginForm-email']", "mail@myemail.com")

对于大多数网站来说它都有效。但对于上面的患者访问网站,它没有,我认为原因是因为密码文本框需要物理按键(或监听更改事件或其他内容)。

当我运行我的脚本时,它很好地填充了文本框,但它不允许我单击下一步,因为即使文本框看起来已填充,网页也知道我实际上没有按下任何键。

为了解决这个问题,我必须让我的脚本填写表单,然后单击密码框,按空格键,删除我刚刚输入的空格,然后它让我登录,因为它知道我已经实际按下了在密码框中键入。

所以我的问题是如何让我的自动登录 JavaScript 在此网站上工作?

我认为脚本不能使用按键事件在文本框中输入内容,但这没关系,因为我可以以编程方式填充文本框(使用上面的 fld 函数)。但是我怎样才能让页面相信我已经在密码文本框中输入了内容,以便它可以让我提交表单呢?

正如我所说,我正在使用 JavaScript,如果需要,我可以包含 jQuery。

谢谢。

最佳答案

经过多次尝试和错误,我能够使用 JavaScript 解决这个问题:

var fireOnThis = document.querySelectorAll("[type='text']")[0]
const changeEvent = new Event('input', { bubbles: true, cancelable: true });
fireOnThis.dispatchEvent(changeEvent);

它工作得非常漂亮。我把它变成了一个函数,我所做的就是在自动填充文本字段后运行这个函数(它在填充字段之前不起作用,必须在填充字段之后)。

我在其他网站上尝试了许多其他解决方案,但没有一个有效,但这个有效。哎呀!

我从一个名为 Form Filler 的 Chrome 扩展中得到了这个概念。 。我在试图自动化的表单上尝试了扩展,令我惊讶的是,它毫无问题地填写了表单。所以我看了source code找出它是如何做到的,我发现了这个:

['input', 'click', 'change', 'blur'].forEach(event => {
  const changeEvent = new Event(event, { bubbles: true, cancelable: true });
  element.dispatchEvent(changeEvent);
});

所以我只是将其转换为我答案中的代码,并且效果很好。因此,这确实应该归功于 Form Filler 的开发者 Hussein Shabbir。

关于javascript - 如何解决 javascript 文本框上的按键要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58328410/

相关文章:

jquery - 在相关下拉列表中启用/禁用选项,而不触发具有相同类别的所有下拉列表

php - Laravel 5,单击表单提交按钮时不显示任何内容

来自 ID 的 JavaScript/Jquery 节点

javascript - 无法将字符串转换为 float

javascript - 使用 ".call"代替 "new"创建新的 JavaScript 对象

javascript - 在页面加载时运行 JS 来绘制 Canvas

Javascript - 平面对象的嵌套数组

javascript - 防止点击内部链接时点击外部li

javascript - 获取网页上使用 TAB 按钮选择的项目的标题

javascript - 如果少数键值对相同​​且另一个键值小于其他对象,则删除对象数组中的对象