Я работаю над веб-шабером, который ищет в Google определенные вещи, а затем извлекает текст со страницы результатов, и у меня возникла проблема с тем, чтобы Puppeteer вернул нужный мне текст.То, что я хочу вернуть, - это массив строк.
Допустим, у меня есть пара вложенных div в div, и у каждого есть такой текст:
<div class='mainDiv'>
<div>Mary Doe </div>
<div> James Dean </div>
</div>
В DOM яможет сделать следующее, чтобы получить нужный мне результат:
document.querySelectorAll('.mainDiv')[0].innerText.split('\n')
Это дает: ["Mary Doe", "James Dean"]
.
Я понимаю, что Puppeteer не возвращает NodeLists, и вместо этого он использует JSHandles, но я все еще не могу понять, как получить какую-либо информацию, используя предписанные методы.Ниже описано, что я пробовал в Puppeteer, и соответствующий вывод консоли:
В каждом сценарии я запускаю await page.waitFor('selector')
для запуска.
Сценарий 1 (с использованием .$$eval()
):
const genreElements = await page.$$eval('div.mainDiv', el => el);
console.log(genreElements) // []
Сценарий 2 (с использованием evaluate
):
function extractItems() {
const extractedElements = document.querySelectorAll('div.mainDiv')[0].innerText.split('\n')
return extractedElements
}
let items = await page.evaluate(extractItems)
console.log(items) // UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read property 'innerText' of undefined
Сценарий 3 (с использованием evaluateHandle
):
const selectorHandle = await page.evaluateHandle(() => document.querySelectorAll('div.mainDiv'))
const resultHandle = await page.evaluate(x => x[0], selectorHandle)
console.log(resultHandle) // undefined
Любая помощь или руководство о том, как яЯ выполняю или как добиться того, что я хочу сделать, высоко ценитсяСпасибо!