首页 > 解决方案 > 如何获取块中的元素?

问题描述

我无法获得内部块

在页面上我得到了 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 不是函数

标签: javascriptnode.jspuppeteer

解决方案


你有两种可能性。

选项 1:只使用一个选择器

如果你想要.class2inside的选择器.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);
}

推荐阅读