如何获取块中的元素?
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);
}
我无法获取内部块
在页面上我得到了 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);
}