UNPKG

bmv-stocks

Version:

A library to get all stocks at BMV in real time with webscrapping

73 lines (63 loc) 1.55 kB
const puppeteer = require('puppeteer') const { BMVMainDomain } = require('./constants') async function loadAllStocks () { const stocks = [] const browser = await puppeteer.launch() const page = await browser.newPage() await page.setViewport({ width: 1600, height: 800 }) const loadData = async () => { const data = await page.$$eval('#tableMercados tr', (tds) => tds.map((td) => td.innerText .replace(/\n/g, '|') .replace(/\t/g, '|') .replace(/\|\|/g, '|')) ) data.shift() return data } const saveStock = (data) => data.map((element) => { const [ symbol, serie, updateHour, lastPrice, PPP, beforePrice, maxPrice, minPrice, volume, totalCost, OPS, points, percentual ] = element.split('|') return stocks.push({ symbol, serie, updateHour, lastPrice, PPP, beforePrice, maxPrice, minPrice, volume, totalCost, OPS, points, percentual }) }) await page.goto(BMVMainDomain) loadData().then(saveStock) const lastPage = await page.evaluate(() => { const lastPage = document.querySelector('#tableMercados_paginate > span > a:last-child') return +lastPage.textContent }) for (let i = 0; i < lastPage; i++) { await page.click('#tableMercados_next') loadData().then(saveStock) } return stocks } module.exports = { loadAllStocks }