From 2ef2b2e814da2bf6f46e0d92a0cbd3725965b5a8 Mon Sep 17 00:00:00 2001 From: karishmas6 Date: Wed, 14 Aug 2024 08:25:20 +0530 Subject: [PATCH] feat: click next pagination --- maxun-core/src/browserSide/scraper.js | 43 ++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/maxun-core/src/browserSide/scraper.js b/maxun-core/src/browserSide/scraper.js index 7da38aa9..731b929a 100644 --- a/maxun-core/src/browserSide/scraper.js +++ b/maxun-core/src/browserSide/scraper.js @@ -164,6 +164,47 @@ async function scrollUpToLoadMore(selector, limit) { } } +async function clickNextPagination(selector, scrapedData, limit) { + // Check if the limit is already met + if (scrapedData.length >= limit) { + return false; // Return false to indicate no further action is needed + } + + // Check if a single "Next" button exists + let nextButton = document.querySelector(selector); + + if (nextButton) { + nextButton.click(); + return true; // Indicate that pagination occurred + } else { + // Handle pagination with numbers + const paginationButtons = document.querySelectorAll(selector); + let clicked = false; + + // Loop through pagination buttons to find the current active page + for (let i = 0; i < paginationButtons.length - 1; i++) { + const button = paginationButtons[i]; + if (button.classList.contains('active')) { + // Click the next button if available + const nextButtonInPagination = paginationButtons[i + 1]; + if (nextButtonInPagination) { + nextButtonInPagination.click(); + clicked = true; + break; + } + } + } + + // If no next button was clicked, we might be on the last page + if (!clicked) { + throw new Error("No more items to load or pagination has ended."); + } + + //return clicked; // Indicate whether pagination occurred + } +} + + /** * Returns a "scrape" result from the current page. * @returns {Array} *Curated* array of scraped information (with sparse rows removed) @@ -343,7 +384,7 @@ async function scrollUpToLoadMore(selector, limit) { await scrollUpToLoadMore(listSelector, limit); break; case 'clickNext': - //await clickNextPagination(pagination.selector); + await clickNextPagination(pagination.selector); break; case 'clickLoadMore': //await clickLoadMorePagination(pagination.selector);