Puppeteer-循环遍历多个URL的正确方法

时间:2018-07-13 14:47:30

标签: javascript node.js puppeteer

我想遍历包含URL的数组并将元素推入另一个数组。

这是我使用的代码:

for (var i=0; i < links.length ; i++){
    await page.goto(links[i], { timeout: 0, waitUntil: ['domcontentloaded'] });
    await page.waitFor(20000); 

    var values = await page.evaluate(
        () => [...document.querySelectorAll('.XYZ')]
        .map(element => element.getAttribute('src'))
        ); //get the elements location
        media.push(values); // push to array
    );
    console.log(media);
}

此代码有效。但是,请注意第三行是await page.waitFor(20000);

我正在使用它,等待,以便页面已加载。 如果我省略此行,有时,名为values的变量为undefined

我尝试了其他时间延迟值,它的值越低,被不确定的机会就越大。

在不浪费大量时间的情况下,遍历数组的正确方法是什么?

由于我在waitUntil: ['domcontentloaded']方法中使用了page.goto(),所以该过程不是自动的吗?

1 个答案:

答案 0 :(得分:1)

考虑到您正在使用评估方法从UI中检索类名称为XYZ的所有元素,为什么不使用page.waitForSelector()来请求伪娘等待使用该类的最后加载的元素被加载到UI中?

这样做,您将知道在触发您的评估方法之前,所有感兴趣的元素都已加载。

这将比要求它每次等待20秒的硬编码量要有效得多。您希望避免在自动化过程中始终使用硬编码的等待调用。