Javascript 循环答题器

Javascript loop clicker

我正在尝试从 urlbar 创建一个 javascript 脚本 运行,对于特定页面上的每一行,单击一个按钮(允许我更改某个值),然后编辑它值,然后再次单击该按钮进行确认。我 运行 遇到了很多同时性的麻烦,因为它似乎要等到第一次点击 5000 毫秒,即使它没有被告知要暂停。当我测试用随机警报替换暂停之间的东西的结构时没有做同样的事情

暂停的原因是因为有一段短暂的加载动画,在此期间我无法执行代码。这有什么明显的错误吗?我知道有关闭的时髦东西,但我认为通过 busywaiting 我可以通过它,但事实并非如此。

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);
}

您的 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 函数中。