Метод page.$$eval
запускает Array.from(document.querySelectorAll(selector))
в фоновом режиме, поэтому вы получаете массив. Вы не можете применить (e) => e.innerText
к массиву напрямую (даже если он имеет длину 1
), не повторяя его или не получая правильные элементы по их правильным индексам (например: e[0].innerText
), иначе вы получите undefined
.
Вы можете использовать Array.map
для перебора совпадающих элементов и сбора innerText
каждого в массив.
const exerciseName = await page.$$eval(
'.ExCategory-results > .ExResult-row:nth-child(2) > .ExResult-cell > .ExHeading > a',
elements => elements.map(el => el.innerText)
)
Вывод:
[ 'Rickshaw Carry' ]
Изменить:
Вы можете перебирать классы строк, используя al oop с индексом (проще всего использовать обычный for
l oop ) путем (1) подсчета элементов с одинаковыми именами классов:
const rowsCounts = await page.$$eval('.ExCategory-results > .ExResult-row', rows => rows.length)
Затем (2) перебираем дочерние элементы .ExResult-row:nth-child(n) ...
и собираем innerText
s в массив (exerciseNames
) :
const exerciseNames = []
for (let i = 1; i < rowsCounts + 1; i++) { // you mignt need i = 2
const exerciseName = await page.$eval(
`.ExCategory-results > .ExResult-row:nth-child(${i}) > .ExResult-cell > .ExHeading > a`,
el => el.innerText)
exerciseNames.push(exerciseName)
}
Вывод:
[
'Rickshaw Carry',
'Single-Leg Press',
'Landmine twist',
'Weighted pull-up',
'T-Bar Row with Handle',
'Palms-down wrist curl over bench'
]
Примечание: l oop следует начинать с формы 1
, а не 0
в таких случаях, поскольку нет «nth-child (0)». В вашем примере 1-й также отсутствует, поэтому вам может потребоваться начать итерацию с 2
.