木偶:超时或睡眠,或在Page.Evaluate()中等待

时间:2019-05-13 21:09:17

标签: javascript node.js puppeteer

我需要一种方法来增加单击页面内元素之间的延迟。评估功能

下面是我尝试的方法,它不起作用

const result = await page.evaluate(async () => {
        let variants = document.querySelectorAll(".item-sku-image a");


        variants.forEach(async variant => {   
           await new Promise(function(resolve) { 
           setTimeout(resolve, 1000)
           });         
            await variant.click()
        });
        return data
    });

更新:

下面的for循环仅对一个元素有效 当我尝试在其中使用另一个for循环-太疯狂了

const variants = [...document.querySelectorAll(".item-sku-image a")]; // Turn nodelist into an array
const sizes = [...document.querySelectorAll(".item-sku-size a")]; // Turn nodelist into an array

for (let variant of variants){
  // wait one second
  await new Promise(function(resolve) {setTimeout(resolve, 1000)});
  await variant.click()
  for (let size of sizes){
   // wait one second
   await new Promise(function(resolve) {setTimeout(resolve, 1000)});
   await size.click()
 }
}

1 个答案:

答案 0 :(得分:1)

.forEach不能与诺言或async...await一样使用。

改为使用for..of

const variants = [...document.querySelectorAll(".item-sku-image a")]; // Turn nodelist into an array
for (let variant of variants){
  // wait one second
  await new Promise(function(resolve) {setTimeout(resolve, 1000)});
  await variant.click()
}

易于阅读,理解和实施。

以下是一些参考资料: