Javascript循环点击器

时间:2018-03-14 21:51:24

标签: javascript closures pause

我正在尝试从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);
}

1 个答案:

答案 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函数中。

相关问题