使用 javascript 自动填充表单

Posted

技术标签:

【中文标题】使用 javascript 自动填充表单【英文标题】:Autofill a form with javascript 【发布时间】:2020-10-18 19:30:34 【问题描述】:

我有一个带有 12 个未输入字段的公式的小型 vue 应用程序。 我的初始状态看起来像:

form =  
  first_name: "",
  last_name: "",
... 

我必须手动测试提交过程,这很糟糕,因为我必须填写所有 12 个字段。 有没有办法编写一个脚本,只是粘贴在控制台中并填写所有字段?

我试过document.querySelector('input[name="first_name"]').value = "First Name" 等等。 在浏览器中可以看到字段都填好了,但是状态没有改变(可以在vue devtools中看到)。如果我点击提交按钮,required-Validation 就会启动,表示必须填写这些字段。

所以我发现,我需要以某种方式输入实际值,例如 puppeteer 所做的那样。知道如何实现吗?

【问题讨论】:

【参考方案1】:
Try to make a function handleSubmit for the rest 10 inputs which handle submit to true 

没有任何限制,并在 10 个输入和 10 个输入标记内调用它,将 onClick 引用到 this.handleSubmit 并将提交也设置为 在您允许在其他两个输入中提交的情况下为真,您想尝试它们,所以它 将在您验证所需的两个输入时提交表单。

【讨论】:

对不起这不是我想做的,我试图澄清:在我的例子中,我只使用了 2 个字段来显示,我在做什么而没有太多重复。我实际上在所有 12 个字段上都尝试了 document.querySelector('input[name="first_name"]').value = "First Name" document.querySelector('input[name="last_name"]').value = "Last Name" document.querySelector('input[name="date"]').value = "01-01-2000" 等等。它们都被填满了,但它们的状态并没有改变,这就是为什么尽管被填满,但每个字段的验证都失败了。 @Mario 这是个好主意,但我正在测试生产版本,所以如果人们会在输入字段中看到“John Does”,那就太难看了。【参考方案2】:

我建议使用环境变量,例如类似的东西

const DEVELOPMENT = "development";
const PRODUCTION = "production";
const environment = DEVELOPMENT;
const data = 
  firstName: environment === DEVELOPMENT ? "John" : "",
  lastName: environment === DEVELOPMENT ? "Doe" : "",
;

console.log(data);

这样你可以根据你所处的环境来控制使用哪些数据,通过做一些小的修改来扩展其他环境也更容易一些

例如添加舞台环境

const DEVELOPMENT = "development";
const PRODUCTION = "production";
const STAGE = "stage";
const environment = STAGE;
const data = 
  firstName:
    environment === STAGE ? "***" : environment === DEVELOPMENT ? "John" : "",
  lastName:
    environment === STAGE ? "***" : environment === DEVELOPMENT ? "Doe" : "",
;

console.log(data);

虽然阅读示例变得困难,但一种解决方案可能是使用函数来获取属性值。

无论如何,这就是我为这种情况提出解决方案的建议,并让您更轻松地进行扩展

有关在 vue 中使用环境变量的信息,请阅读此 SO answer

【讨论】:

以上是关于使用 javascript 自动填充表单的主要内容,如果未能解决你的问题,请参考以下文章

如何禁止表单用户名,密码自动填充

jquery 防止自动填充表单

使用自动填充表单控件(自动完成属性)使表单填写更快

如何自动填充表单框值填充另一个?

在 html 表单中禁用自动填充

禁用 Firefox 自动填充 html 表单但保持自动完成