Top.Mail.Ru
Ответы

Как сделать так что бы парсер на nodeJS скролил страницу и нажимал на кнопку "Показать еще"?

Впервые пробую сделать парсер на node js, столкнулся с кнопкой "Показать еще".
пробовал использовать Puppeteer, но не выходит что то.
Необходимо, чтобы парсер проскролил до кнопки "Показать еще" и нажал на нее и передал новый html для обработки. В консоли при нажатии на кнопку отправляется запрос ajax.php с ссылкой, которая никуда не ведет.

Может кто знает подскажет? (сайт thelastdb.games )

По дате
По рейтингу
Аватар пользователя
Мастер

Вот пример кода, который может помочь вам решить эту задачу:

Установите Puppeteer, если вы еще этого не сделали:

1
 npm install puppeteer 

Создайте скрипт для парсинга страницы:

12345678910111213141516171819202122232425262728293031323334353637383940414243
 const puppeteer = require('puppeteer'); 
 
(async () => { 
  // Запуск браузера 
  const browser = await puppeteer.launch({ headless: false }); 
  const page = await browser.newPage(); 
 
  // Переход на нужную страницу 
  await page.goto('https://thelastdb.games'); 
 
  // Функция для проверки наличия кнопки "Показать еще" и нажатия на нее 
  const clickShowMore = async () => { 
    const showMoreButton = await page.$('button:contains("Показать еще")'); 
    if (showMoreButton) { 
      await showMoreButton.click(); 
      await page.waitForSelector('button:contains("Показать еще")', { timeout: 5000 }).catch(() => null); 
      return true; 
    } 
    return false; 
  }; 
 
  // Основной цикл для скроллинга и нажатия на кнопку 
  let hasMore = true; 
  while (hasMore) { 
    // Скролл страницы вниз 
    await page.evaluate(() => { 
      window.scrollBy(0, window.innerHeight); 
    }); 
 
    // Ожидание загрузки новых элементов 
    await page.waitForTimeout(1000); 
 
    // Попытка нажать на кнопку "Показать еще" 
    hasMore = await clickShowMore(); 
  } 
 
  // Получение HTML после всех загрузок 
  const content = await page.content(); 
  console.log(content); 
 
  // Закрытие браузера 
  await browser.close(); 
})(); 


Видео по теме