我想遍历包含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()
,所以该过程不是自动的吗?
答案 0 :(得分:1)
考虑到您正在使用评估方法从UI中检索类名称为XYZ的所有元素,为什么不使用page.waitForSelector()
来请求伪娘等待使用该类的最后加载的元素被加载到UI中?
这样做,您将知道在触发您的评估方法之前,所有感兴趣的元素都已加载。
这将比要求它每次等待20秒的硬编码量要有效得多。您希望避免在自动化过程中始终使用硬编码的等待调用。