Существует массив arrLinks
var arrLinks = [];
const puppeteer = require('puppeteer');
Далее идет описание функции main()
async function main() {
let URL = 'https://www.ozon.ru/category/telefony-i-smart-chasy-15501/';
const browser = await puppeteer.launch({
headless: false,
args: [
'--start-maximized'
]
});
const page = await browser.newPage();
await page.setViewport({
width: 1366,
height: 768
});
await page.goto(URL);
await page.waitFor(4000);
await autoScroll(page, arrLinks);
await page.waitFor(4000);
// скроллит страницу вниз и вызывает функцию, которая записывает ссылки пагинаций в массив
async function autoScroll(page, arrLinks) {
await page.evaluate(async () => {
await new Promise((resolve) => {
var totalHeight = 0;
var distance = 130;
var timer = setInterval(() => {
var scrollHeight = document.body.scrollHeight;
window.scrollBy(0, distance);
totalHeight += distance;
if(totalHeight >= scrollHeight){
clearInterval(timer);
resolve();
}
}, 100);
});
});
await page.waitFor(5000);
console.log(arrLinks);
await getPaginationLinks(page, arrLinks);
console.log(arrLinks);
}
async function getPaginationLinks(page, arrLinks) {
await page.evaluate((arrLinks) => {
const paginationContainer = document.querySelector('#__layout > div > div.block-vertical > div.container > div:nth-child(2) > div:nth-child(2) > div:nth-child(3) > div:nth-child(3) > div[data-test-id="pagination-container-bottom"]');
const paginationElements = Array.from(paginationContainer.querySelectorAll('a[data-test-id="pagination-item"]'));
paginationElements.forEach(paginationElement => {
arrLinks.push(paginationElement.href);
});
}, arrLinks);
}
}
Ну и сам вызов функции main()
main();
Смысл в том, что при вызове main прога идет по url и вызывает функцию скролла страницы, передавая пустой массив arrLinks, после того, как вся страница проскроллиться, я через консоль проверяю содержание массива arrLinks и он пустой, как и должно быть. Следующей строкой вызываю функцию getPaginationLinks(), где перебираю массив paginationElements и на каждую итерацию пушу ссылку каждого элемента массива, после чего функция заканчивает работу. Но массив как был пустой, так и не пропушил в себя значения, которые были указаны в функции. В чем тут косяк?