setTimeout是一个异步函数。它不会暂停后面代码的执行
document.getElementsByName("Username")[0].value = 'FamilyGuy'
function myFunction(){
//pag 1, delay a second. Giving user name time to fill
document.getElementById("NextButton").click();
}
//delay
setTimeout(myFunction, 1000);
function myFunction(){
//page 2, delay a second. Giving passwrd time to fill befor logging in
document.getElementsByName("Password")[0].value = 'this1sth3p4ssw0rd!'
}
//delay
setTimeout(myFunction, 1000);
document.getElementById("LoginButton").click();
//我正在使用此扩展插件
[1]:https://i.stack.imgur.com/LNMiJ.png
这意味着,在您的示例代码中,两个超时将同时运行,并且您的登录按钮将立即被按下。要解决这个问题,请将第二个超时放在第一个函数的末尾,而不是放在代码的主体中。还将登录按钮的按下放在第二个功能内。
document.getElementsByName("Username")[0].value = 'FamilyGuy'
function myFunctionB(){
//page 2, delay a second. Giving passwrd time to fill befor logging in
document.getElementsByName("Password")[0].value = 'this1sth3p4ssw0rd!'
document.getElementById("LoginButton").click();
}
function myFunctionA(){
//pag 1, delay a second. Giving user name time to fill
document.getElementById("NextButton").click();
//delay
setTimeout(myFunctionB, 1000);
}
//delay
setTimeout(myFunctionA, 1000);
我不知道NextButton的操作方式,但使用延迟等待Username值更改可能是不必要的。考虑使用以下代码:
function myFunction(){
document.getElementsByName("Password")[0].value = 'this1sth3p4ssw0rd!'
document.getElementById("LoginButton").click();
}
document.getElementsByName("Username")[0].value = 'FamilyGuy'
document.getElementById("NextButton").click();
//delay
setTimeout(myFunction, 1000);
这可能是实现下述(假设为所需(目标的一种可能实现方式:
- 显示一个带有输入框用户名、密码和按钮"下一步"、"登录"的屏幕
- 等待一段时间(比如1.5秒(后,用户名会自动填充
- 另一个2秒的延迟和"下一步"按钮点击由程序触发
- 延迟2秒后,密码自动填充
- 最后,再延迟1秒,程序触发"登录"按钮
时间延迟只是在代码段中随机分配的,可以根据需要进行更改。
了解使用这种方法的背景肯定会有所帮助,以满足更合适的答案。
const btnClicked = name => console.log(`${name} button clicked `);
setTimeout(
() => {
document.getElementById("Username").value = 'FamilyGuy';
setTimeout(
() => {
document.getElementById("NextButton").click();
setTimeout(
() => {
document.getElementById("Password").value = 'this1sth3p4ssw0rd!';
setTimeout(
() => {
document.getElementById("LoginButton").click();
},
1000
)
},
2000
)
},
2000
)
},
1500
);
<html>
<body>
<input id='Username' />
<button id='NextButton' onclick='btnClicked("Next")'>Next</button>
<input id='Password' />
<button id='LoginButton' onclick='btnClicked("Login")'>Login</button>
<script src='script.js'></script>
</body>
</html>