Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击html元素';setTimeout()之后无法工作_Javascript_Userscripts - Fatal编程技术网

Javascript 单击html元素';setTimeout()之后无法工作

Javascript 单击html元素';setTimeout()之后无法工作,javascript,userscripts,Javascript,Userscripts,我有一个用户脚本,可以在页面上加载按钮列表。然后,它尝试在循环中逐个单击所有按钮。这是我的职责 const clickButtons = async function(listButtons) { const filteredButtons = Array.from(listButtons).filter(x => shouldButtonBeClicked(x.innerText)); for (let i = 0; i < filteredButtons.leng

我有一个用户脚本,可以在页面上加载按钮列表。然后,它尝试在循环中逐个单击所有按钮。这是我的职责

const clickButtons = async function(listButtons) {
    const filteredButtons = Array.from(listButtons).filter(x => shouldButtonBeClicked(x.innerText));
    for (let i = 0; i < filteredButtons.length; i++) {
        filteredButtons[i].click();
    }
}
const clickButtons=异步函数(listButtons){
const filteredButtons=Array.from(listButtons).filter(x=>shouldButtonBeClicked(x.innerText));
for(设i=0;i
上述代码按预期工作。没有问题。单击所有按钮

但是,当我尝试在每次单击之前添加一些等待时间时,它不起作用。没有一个按钮被点击。注意循环中第一行的wait()

const wait = async function(time) {
    return new Promise(resolve => setTimeout(resolve, time));
}
const clickButtons = async function(listButtons) {
    const filteredButtons = Array.from(listButtons).filter(x => shouldButtonBeClicked(x.innerText));
    for (let i = 0; i < filteredButtons.length; i++) {
        await wait(1000);
        filteredButtons[i].click();
    }
}
const wait=async函数(时间){
返回新承诺(resolve=>setTimeout(resolve,time));
}
常量clickButtons=异步函数(listButtons){
const filteredButtons=Array.from(listButtons).filter(x=>shouldButtonBeClicked(x.innerText));
for(设i=0;i

我在这里遗漏了什么?

通过单击来解决承诺应该是可行的

await wait(1000).then((res)=> filteredButtons[i].click());
        
您可以尝试以下方法:

const wait=async函数(时间){
返回新承诺(resolve=>setTimeout(resolve,time));
}
常量clickButtons=异步函数(listButtons){
const filteredButtons=Array.from(listButtons).filter(x=>shouldButtonBeClicked(x.innerText));
forEach(异步函数(filteredButton,索引){
等待等待(1000);
filteredButtons[索引]。单击();
//或
//filteredButton.click();
});
}

。也许按钮在同一时间变了?@Ivar,我有这个疑问。但是我已经验证了元素在timeout@Ivar看来按钮毕竟是从以前的操作中改变过来的。我等待了一秒钟,然后取回要单击的按钮,这样之前的任何操作都不会影响它。成功了。谢谢