javascript - 如何获取块中的元素?
问题描述
我无法获得内部块
在页面上我得到了 div.className 的列表。但我怎样才能获得价值$('.className').children('.subClassName')
?
const rows = await page.$$eval('.market_listing_row', items => items)
const prices = await rows.$$eval('.market_table_value.market_table_value > .normal_price', items => items.map(item => item.textContent))
我想得到每个subObject
,但我不能通过可变行来做到这一点。
试过了
const rows = await page.$$('.market_listing_row', items => items)
const prices = await rows.$$eval('.market_table_value.market_table_value > .normal_price', items => items.map(item => item.textContent))
但是出现错误
TypeError: rows.$$eval 不是函数
解决方案
你有两种可能性。
选项 1:只使用一个选择器
如果你想要.class2
inside的选择器.class1
,这很简单.class1 .class2
:因此,您可以编写以下代码:
const prices = await page.$$eval('.market_listing_row .market_table_value.market_table_value > .normal_price', items => items.map(item => item.textContent))
选项 2:在元素句柄上使用 puppeteer 查询
如果您出于其他原因需要元素句柄,您还可以对另一个查询进行查询。您的第二个代码示例已经很接近了,但是您使用了page.$$
导致带有元素句柄的数组的函数。因此,您会收到错误消息。
const rows = await page.$$('.market_listing_row');
for (const row of rows) {
const value = await row.$$eval('.market_table_value.market_table_value > .normal_price', items => items.map(item => item.textContent))
console.log(value);
}
推荐阅读
- rest - 使用自定义标头和表单数据创建 WebApi
- c++ - 无法在 CMake 中创建动态库并将其链接到另一个动态库?
- mysql - 使用 mariadb 10.4.8 docker 容器的用户“root”@“localhost”的访问被拒绝,使用 docker compose 并在附加外部卷时发出问题
- spring - 调用 Google Cloud Datastore 的 Tasklet 或 ItemReader
- android-recyclerview - ItemDecoration 底部间距在添加新项目时未更新
- sql - 如何使用 Group by 和 Sum 更新表
- angular - Angulars ngx-bootstrap 日期范围输出到日期范围过滤器管道
- html - 如何使用 css-grids 修复侧边栏
- javascript - 使用 javascript 构建列表,同时从 slack 中获取用户详细信息。什么都没有显示
- java - 分割在中间的下划线