node.js - $eval 未能在 foreach 循环内选择
问题描述
我有一个代码,我需要在 foreach 循环中执行 $eval 但它不工作,它抛出 item.$eval 不是函数的错误。
但是“项目”成功创建没有问题
let items = await newPage.$$eval('.slide', el => el);
items.forEach(async (item) => {
let ProductName = '';
try {
ProductName = await item.$eval('.name', el => el.innerText);
} catch (error) {
}
});
解决方案
函数中的参数page.$$eval()
是一个元素数组。您只需将这个元素数组从浏览器上下文返回到 Node.js 上下文,但由于 DOM 元素不可序列化,您只会得到一个空对象数组,它们没有.$eval()
方法。
您可以改为使用page.$$()
来获取 ElementHandles 数组。此外,最好将 for-of 循环与异步函数一起使用,而不是.forEach()
使流程更可预测:
let items = await newPage.$$('.slide');
for(const item of items) {
let ProductName = '';
try {
ProductName = await item.$eval('.name', el => el.innerText);
} catch (error) {
}
}
推荐阅读
- concatenation - 如何在 POWER BI 中使用 CONCATENATEX 或类似函数获取具有多种类型的 Distinct ID
- c# - Identity Server Saml2AuthExtensions Idp 发起的 SSO
- stm32 - 支持 DMA 的 ADC 与 FreeRTOS
- php - 带有 xml 元素的文本位
- javascript - 如果 columnDefs 中有很多目标,如何测试列索引?
- node.js - 如何使用电报捕获编辑的消息
- firebase - Firebase Analytics 中的事件未显示在 Big Query 中
- c++ - 以下问题是多线程问题。我需要在下一行打印“完成”而不使用“\n”或“endl”
- rxjs - 使用 Subject next() 调用 observables 不起作用
- arrays - Go 的 sync.pool 可以用于数组/切片吗?