我正在尝试从urlbar运行javascript脚本,对于特定页面上的每一行,单击一个按钮(允许我更改某个值),然后编辑该值,然后再次单击该按钮进行确认。我在同时性方面遇到了很多麻烦,因为它似乎等待第一次点击5000毫秒,即使它没有被告知暂停。当我测试结构替换停顿与rando警报之间的事情时没有做同样的事情
暂停的原因是bc有一个短的加载动画,在此期间我无法执行代码。在这个问题上有什么明显的错误吗?我知道有关闭的时髦的东西,但我想通过忙碌等待我可以通过它,但事实并非如此。
function pause(milliseconds) {
var dt = new Date();
while ((new Date()) - dt <= milliseconds) { /* Do nothing */ }
}
var q=document.getElementById("MainContent_gvProducts").children[0];
var l=q.children.length;
for(i=1;i<l;i++){
q.children[i].children[0].children[0].click();
pause(5000);
var x=q.children[i].children[7].children[0].value;
pause(1);
x=math.round(x);
pause(5000);
q.children[i].children[0].children[0].click();
pause(5000);
}
答案 0 :(得分:0)
您的pause
功能似乎非常黑客。
您应该使用setTimeout()或类似的东西。
如果你有能力使用最新的JS技术,我建议用超时创建一个promise
并使用async / await,如下所示:
async function pause(t = 1000) {
return new Promise(resolve => {
setTimeout(() => {
resolve(true)
}, t)
})
}
for(i=1;i<l;i++){
q.children[i].children[0].children[0].click();
await pause(1000)
var x=q.children[i].children[7].children[0].value;
pause(1);
x=math.round(x);
await pause(5000);
q.children[i].children[0].children[0].click();
await pause(5000);
}
注意:您的for
循环必须放在async
函数中。