如何获得块中的元素?

时间:2019-05-22 14:14:12

标签: javascript node.js puppeteer

我无法获得内心的阻碍

在页面上,我获得了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:行。$$ eval不是函数

2 个答案:

答案 0 :(得分:1)

您有两种可能性。

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

如果您想在.class2中使用.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:在元素句柄上使用伪造者查询

如果由于其他原因需要处理元素,也可以对另一个查询进行查询。您的第二个代码示例已经结束,但是您使用了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);
}

答案 1 :(得分:-2)

在本机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