Как настроить парсер на Node.js, чтобы он скроллил страницу и автоматически нажимал на кнопку «Показать еще»?

Я впервые пытаюсь создать парсер на Node.js и столкнулся с проблемой, связанной с кнопкой "Показать еще". Я пробовал использовать Puppeteer, но у меня не получается. Мне нужно, чтобы парсер прокрутил страницу до кнопки "Показать еще", нажал на нее и затем передал новый HTML для обработки. При нажатии на кнопку в консоли отправляется запрос к ajax.php с ссылкой, которая не ведет никуда. 

Может быть, кто-то может подсказать, как это исправить? (Сайт: thelastdb.games)
  • 14 января 2025 г. 20:04
Ответы на вопрос 1
Для реализации парсера на 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!
Похожие вопросы