我是一名运营低下的员工,未经授权可以更改计算机上的程序和权限,因此我想自动执行一些重复性很高的数据输入。我知道有很多程序可以做到这一点,但是,为了便于讨论,我们假设我不允许其中的任何一个,而我只能通过Chrome中的debug F12菜单编写脚本。我可能还不太了解这些单词。
我必须在第三方供应商的高度动态的网站上运行测试用例,并且我已经成功编写了JavaScript,该JavaScript将文本添加到DOM中的元素并按下“下一步”按钮。
问题是,.click()
按下“下一步”按钮后,页面需要花费一些时间来更新,并且更新会在以下情况下创建不在DOM中的新元素:脚本已初始化。我需要找到一种方法来延迟脚本的执行,直到DOM包含我需要更新的所有元素为止。
作为一个非常原始的概念证明,我为每个页面编写了预填充函数,然后在上一个函数的末尾依次调用每个函数,并使用setTimeout(nextfunct, 10000)
来使页面更新在执行下一行之前。 (我打算通过尝试创建某种对象侦听器(而不是任意的10秒延迟)来完善这一点,但我什至无法做到这一点。)这种方法会产生两个错误。
1)该脚本似乎正在检查元素setTimeout()
之前是否在DOM上,因此仍然给我一个错误。如果nextfunct
被定义为
document.getElementById("doesntexistyet").value = "Fill Me";
console.log("nextfunct ran");
我将收到错误消息,指出没有ID为"doesntexistyet
“的元素,而不是立即延迟10秒之后。下一页的元素将不会更新。
2)DOM更新中断了我的脚本。在上面的代码中,控制台输出永远不会出现在我的控制台中。如果我注释掉丢失的元素,则该功能仅打印注释,它仍不会出现在控制台中。但是,如果我注释掉代码并将setTimeout
切换为1ms,则"nextfunct ran"
将出现在控制台中,直到页面更新为止,此时控制台将被删除。
有没有可以仅使用Vanilla JS和浏览器实现的方法?我敢肯定有一个关键字可以搜索到有人在此之前讨论过的地方,但是似乎绝大多数JS自动填充讨论都是针对人们设计要集成到网站中的代码的,
谢谢