UNPKG

stepwright

Version:

A powerful web scraping library built with Playwright

228 lines 6.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getData = exports.clickCheckBox = exports.doubleClick = exports.click = exports.input = exports.elem = exports.navigate = exports.getBrowser = void 0; const playwright_1 = require("playwright"); /** * Get the browser and page. * * @param {object} params - The browser params. * * @since v1.0.0 * @author Muhammad Umer Farooq <umer@lablnet.com> * * @returns {object} - The browser. * @since v1.0.0 * @company Framework Island */ const getBrowser = async (params = {}) => { const browser = await playwright_1.chromium.launch(params); return browser; }; exports.getBrowser = getBrowser; /** * Wait for the given time. * * @param {number} wait - The time to wait. * * @since v1.0.0 * @author Muhammad Umer Farooq <umer@lablnet.com> * * @returns {object} - The browser and page. * @since v1.0.0 * @company Framework Island */ const _wait = (wait) => new Promise((resolve) => setTimeout(resolve, wait)); /** * Navigate to the given url. * * @param {object} page - The page object. * @param {string} url - The url to navigate. * @param {number} wait - The time to wait. * * @since v1.0.0 * @author Muhammad Umer Farooq <umer@lablnet.com> * * @returns {object} - The page object. * @since v1.0.0 * @company Framework Island */ const navigate = async (page, url, wait = 0) => { // validate the url. if (!url) throw new Error('Url is required'); // navigate to the url. await page.goto(url, { waitUntil: 'networkidle' }); // wait for the given time. if (wait > 0) await _wait(wait); // return the page. return page; }; exports.navigate = navigate; /** * Get the element. * * @param {object} page - The page object. * @param {string} type - The type of selector. * @param {string} selector - The selector. * * @since v1.0.0 * @author Muhammad Umer Farooq <umer@lablnet.com> * * @returns {object} - The element. * @since v1.0.0 * @company Framework Island */ const elem = async (page, type, selector, wait = 0) => { let element = page; if (!selector) throw new Error('Selector is required'); // ID, CLASS, TAG, XPATH, and, Attribute. switch (type) { case 'id': element = page.locator(`#${selector}`); break; case 'class': element = page.locator(`.${selector}`); break; case 'tag': element = page.locator(selector); break; case 'xpath': element = page.locator(`xpath=${selector}`); break; default: throw new Error('Invalid selector type'); } if (wait > 0) { await page.waitForTimeout(wait); } if (!element) { throw new Error('Element not found'); } // Type assertion since we know it's a Locator after processing return element; }; exports.elem = elem; /** * Input the value in the given selector. * * @param {object} page - The page object. * @param {string} type - The type of selector. * @param {string} selector - The selector. * @param {string} value - The value to input. * * @since v1.0.0 * @author Muhammad Umer Farooq <umer@lablnet.com> * * @returns {object} - The page object. * @since v1.0.0 * @company Framework Island */ const input = async (page, type, selector, value, wait = 0) => { const element = await elem(page, type, selector, wait); await element.type(value); return page; }; exports.input = input; /** * Click on the given selector. * * @param {object} page - The page object. * @param {string} type - The type of selector. * @param {string} selector - The selector. * * @since v1.0.0 * @author Muhammad Umer Farooq <umer@lablnet.com> * * @returns {object} - The page object. * @since v1.0.0 * @company Framework Island */ const click = async (page, type, selector) => { const element = await elem(page, type, selector); await element.click(); return page; }; exports.click = click; /** * Double click on the given selector. * * @param {object} page - The page object. * @param {string} type - The type of selector. * @param {string} selector - The selector. * * @since v1.0.0 * @author Muhammad Umer Farooq <umer@lablnet.com> * * @returns {object} - The page object. * @since v1.0.0 * @company Framework Island */ const doubleClick = async (page, type, selector) => { const element = await elem(page, type, selector); await element.dblclick(); return page; }; exports.doubleClick = doubleClick; /** * Click on the checkbox. * * @param {object} page - The page object. * @param {string} type - The type of selector. * @param {string} selector - The selector. * * @since v1.0.0 * @author Muhammad Umer Farooq <umer@lablnet.com> * * @returns {object} - The page object. * @since v1.0.0 * @company Framework Island */ const clickCheckBox = async (page, type, selector) => { const element = await elem(page, type, selector); await element.check(); return page; }; exports.clickCheckBox = clickCheckBox; /** * Get the data from the given selector. * * @param {object} page - The page object. * @param {string} type - The type of selector. * @param {string} selector - The selector. * @param {string} data_type - The type of data to get. * * @since v1.0.0 * @author Muhammad Umer Farooq <umer@lablnet.com> * * @returns {string} - The data. * @since v1.0.0 * @company Framework Island */ const getData = async (page, type, selector, data_type = 'default', wait = 0) => { try { const element = await elem(page, type, selector, wait); // Check if element exists before trying to get data const count = await element.count(); if (count === 0) { return ''; } switch (data_type) { case 'text': return (await element.textContent()) ?? ''; case 'html': return await element.innerHTML(); case 'value': return await element.inputValue(); default: return await element.innerText(); } } catch (error) { // Return empty string if element is not found return ''; } }; exports.getData = getData; //# sourceMappingURL=scraper.js.map