I am trying to extract data from https://invictusdao.fi/#/dashboard However, I'm stuck in this.
There are no helpful class-names in the HTML. Sample here:
<div class="route-container jss2 false">
<div id="dashboard-view">
<div class="MuiPaper-root ohm-card main-data-area MuiPaper-elevation0 MuiPaper-rounded" style="
transform: none;
transition: transform 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
">
<div class="MuiGrid-root data-grid MuiGrid-container MuiGrid-spacing-xs-2">
<div class="MuiGrid-root MuiGrid-item MuiGrid-justify-content-xs-flex-end MuiGrid-grid-xs-6">
<a class="MuiTypography-root MuiLink-root MuiLink-underlineNone stat-tile MuiTypography-colorPrimary"
target="_blank" style="cursor: default">
<div class="stat-tile-content">
<h5 class="MuiTypography-root light-tooltip MuiTypography-h5" tooltip="">
$IN Price
</h5>
<h4 class="MuiTypography-root MuiTypography-h4">$289.50</h4>
</div>
</a>
</div>
I tried with page.evaluate with an intention to get title and values of elements on the page.
This is my code:
const puppeteer = require("puppeteer");
(async () => {
try {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.goto("https://invictusdao.fi/#/dashboard");
await page.waitForSelector(".data-grid");
// extracting information from code
let cards = await page.evaluate(() => {
let cardsElement = document.body.querySelectorAll(".stat-tile-content");
cards = Object.values(cardsElement).map((x) => {
return {
title: x.querySelector(".MuiTypography-root.light-tooltip.MuiTypography-h5").textContent ?? null,
value: x.querySelector(".MuiTypography-root.MuiTypography-h4").textContent ?? null,
};
});
return cards;
});
// logging results
const inPrice = cards[0].value;
const apy = cards[1].value;
const mCap = cards[2].value;
const supply = cards[3].value;
const tvl = cards[4].value;
const treasury = cards[5].value;
const inStaked = cards[6].value;
const rfv = cards[7].value;
const backedPrice = cards[8].value;
const runway = cards[9].value;
const currentIndex = cards[10].value;
console.log("$IN price", "$" + inPrice);
console.log("APY", apy);
console.log("Market Cap", mCap);
console.log("Supply", supply);
console.log("TVL", tvl);
console.log("Treasury", treasury);
console.log("IN Staked", inStaked);
console.log("Risk Free Value", rfv);
console.log("Backed Price", backedPrice);
console.log("Runway", runway);
console.log("Current Index", currentIndex);
await browser.close();
process.exit(0);
} catch (err) {
console.error(err);
process.exit(1);
}
})();
That brings me titles but not values (I got empty strings).
What I am doing wrong here?