функция кукловода page.goto
имеет несколько параметров, которые вы можете использовать, чтобы убедиться, что страница полностью загружена. Смотри документацию здесь . Кроме того, вы можете использовать метод page.waitFor
, чтобы подождать несколько секунд. См. Документацию здесь .
Здесь у вас есть простой пример, который, я думаю, может работать для вас:
const puppeteer = require('puppeteer')
const url = 'https://stackoverflow.com/'
const arrayNames = ['tags', 'users', 'jobs', 'questions'];
(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
const data = {}
for (const nameUrl of arrayNames) {
const fullUrl = `${url}${nameUrl}`
console.log(`begin for ${fullUrl}`)
await page.goto(fullUrl, { waitUntil: 'networkidle0' }) // check networkidle0 parameter and others here: https://pptr.dev/#?product=Puppeteer&version=v2.1.1&show=api-pagegotourl-options
await page.waitFor(2000) // wait 2 seconds to allow a full login. Optional
const pageData = await page.evaluate(() => {
const name = document.querySelector('h1').innerText
const pageTitle = document.querySelector('title').innerText
// get whatever data you need to get from the page.
return { name: name, title: pageTitle }
})
console.log('\t Data from page: ', pageData)
data[fullUrl] = pageData
}
console.log(data)
})()
Это не работает на всех сайтах параллельно, но вы затем можно поиграть с примером. Вместо «ожидания» части await page.evaluate
вы можете получить все обещания в массиве и затем использовать await Promise.all([listOfPromises])