Как я могу получить элементы в блоке? - PullRequest
1 голос
/ 22 мая 2019

Я не могу получить внутренний блок

На странице я получил список 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))

Но получил ошибку

Ошибка типа: строки. $$ eval не является функцией

Ответы [ 2 ]

1 голос
/ 22 мая 2019

У вас есть две возможности для этого.

Вариант 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.$$, которая приводит к массиву с элементами handels. Поэтому вы получаете ошибку.

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);
}
0 голосов
/ 22 мая 2019

В нативном 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...