Это сложный вопрос из-за того, сколько страниц по умолчанию отображается на этом сайте.Но потерпите меня: я покажу вам, чего вы можете достичь, по крайней мере, с этим.
Во-первых, предоставленный вами сайт отображает 10 страниц за раз под списком элементов, по которым вы можете циклически перемещаться.,Мне жаль говорить, что я не понимаю язык, на котором он написан, поэтому я не знаю, есть ли возможность где-нибудь отобразить больше страниц.Поэтому, когда вы вводите текст для поиска, он отображается следующим образом:
Однако, когда вы нажимаете на последнее число (число 10), списокстраниц обновляется следующим образом:
Это значительно затрудняет поиск общего количества страниц, поскольку нет возможности «перейти» к самомуПоследняя страница (и впоследствии также нет возможности вернуться к самой первой).Позже я покажу вам другой пример сайта, который делает это.
В вашем случае я бы порекомендовал вам использовать некоторые простые математические методы, чтобы точно определить, сколько страниц будет отображаться в списке.Это будет слишком сложно, чтобы постоянно указывать puppeteer
, например, «продолжать нажимать последний доступный номер страницы, пока не дойдете до конца» или что-то подобное.Но мы можем определить количество страниц, просто выполнив несколько простых шагов.
Во-первых, вам нужно получить общее количество элементов, возвращаемых в списке поиска через этот элемент:
Вы можете сделать это, выполнив следующий код:
const totalItems = await page.$eval('._productSet_total', (items) => {
// Remove the characters before the total number, leaving only the number in isolation
const child = items.querySelector('em');
items.removeChild(child);
// Now remove all commas from the total number
let finalItems = items.textContent.trim();
while(finalItems.indexOf(',') > -1) {
finalItems = finalItems.replace(',', '').trim();
}
return finalItems;
});
console.log(totalItems); // Outputs 4337903 (or something similar)
Итак, теперь у вас есть это общее число.Следующий шаг - определить, сколько элементов будет отображаться на каждой странице.Вы можете сделать это, посчитав количество элементов, отображаемых на текущей странице, следующим образом:
const itemsPerPage = await page.$$eval('.goods_list li', (items) => {
return items.length;
});
console.log(itemsPerPage); // Outputs 180 on my machine
Итак, теперь у вас есть общее количество найденных элементов и количество элементов, отображаемых на каждой странице.,Следующая часть - ваша простая математика, чтобы определить, сколько страниц потребуется, чтобы перечислить все эти элементы:
const pages = totalItems / itemsPerPage;
console.log(Math.ceil(pages));
И это все!Это был довольно сложный пример из-за плохого дизайна самого сайта (на самом деле он должен всегда иметь прямой путь к первой и / или последней страницам).
Например, если вы нажмете наpuppeteer
тег в Stack Overflow (этот замечательный сайт), он приведет вас к: https://stackoverflow.com/questions/tagged/puppeteer
Теперь прокрутите вниз страницы, вы увидите что-то вроде этого:
Это идеально для определения количества страниц, перечисленных в одном простом шаге, следующим образом:
const lastPage = await page.$$eval('div[class*="pager"] > a > span[class*="page-numbers"]', (spans) => {
return spans[spans.length - 2].textContent;
});
console.log(lastPage); // Outputs 78
Надеемсячто-то здесь поможет вам в учебном пути вашего кукловода!