Для реализации парсера на Node.js с использованием Puppeteer, который будет скроллить страницу и автоматом нажимать на кнопку "Показать еще", нужно следовать нескольким шагам. Я приведу пример кода с объяснением.
1. Убедитесь, что у вас установлен Puppeteer. Если нет, вы можете установить его с помощью npm:
```bash
npm install puppeteer
```
2. Используйте следующий код в вашем проекте:
```javascript
const puppeteer = require('puppeteer');
(async () => {
// Запускаем браузер
const browser = await puppeteer.launch({ headless: false }); // Установите headless: true для безголового режима
const page = await browser.newPage();
// Переходим на нужную страницу
await page.goto('https://thelastdb.games', { waitUntil: 'networkidle2' });
const showMoreButtonSelector = 'selector_for_show_more_button'; // Замените на актуальный селектор для кнопки "Показать еще"
// Функция для нажатия на кнопку "Показать еще"
async function clickShowMore() {
const showMoreButton = await page.$(showMoreButtonSelector);
if (showMoreButton) {
await showMoreButton.click();
await page.waitForTimeout(2000); // Ждем, чтобы страница успела загрузить новый контент
} else {
console.log("Кнопка 'Показать еще' не найдена.");
return false;
}
return true;
}
// Прокручиваем и кликаем на кнопку по необходимости
let hasMore = true;
while (hasMore) {
hasMore = await clickShowMore();
}
// Получаем весь HTML на странице после загрузки
const content = await page.content();
console.log(content); // Работайте с контентом, как вам нужно
// Закрываем браузер
await browser.close();
})();
```
### Объяснение кода:
- **Запуск Puppeteer**: Мы запускаем Puppeteer с параметром `{ headless: false }`, чтобы видеть, как выполняется скрипт. Для возможности отладки это полезно. В боевом режиме можно установить `headless: true`.
- **Переход на страницу**: Мы указываем URL сайта, который можем парсить, и ждем, пока все сети загрузятся (`networkidle2`).
- **Селектор для кнопки**: Замените `selector_for_show_more_button` на реальный селектор кнопки "Показать еще". Вы можете использовать инструмент разработчика в браузере, чтобы найти правильный CSS селектор.
- **Функция clickShowMore**: Это асинхронная функция, которая находит кнопку "Показать еще" и кликает по ней, а затем ждет 2 секунды, чтобы контент успел загрузиться.
- **Цикл прокрутки**: Мы используем `while`, чтобы продолжать нажимать на кнопку, пока она существует. Как только кнопка не может быть найдена, цикл завершится.
- **Получение контента**: После того как все кнопки "Показать еще" были нажаты, мы извлекаем весь контент страницы для дальнейшей обработки.
### Заметки:
- Убедитесь, что вы позаботились о том, чтобы правила сайта, который вы парсите, разрешают такое поведение. Не забывайте об этике веб-скрейпинга.
- Обратите внимание на тайминги: в зависимости от сайта, возможно, стоит увеличить таймаут или использовать другие методы для ожидания загрузки контента.
Теперь вы можете адаптировать этот код под свои нужды и продолжать исследовать возможности Puppeteer!