如何获取块中的元素?

How can I get elements in block?

我无法获取内部块

在页面上我得到了 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 is not a function

在原生 javascript 中,您可以使用 .childNodes 访问特定元素的直接子节点。这将是一个节点数组。

仅供参考:https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes

为了获取元素值,可以使用.innerText提取值。

仅供参考:https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText

你有两种可能性。

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

如果您想要 .class1.class2 的选择器,这很简单:.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.$$ 函数,该函数生成了带有元素 handel 的数组。因此你得到了错误。

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);
}