DEV Community

Cover image for Check balance on Danamon Online with Puppeteer
Sony AK
Sony AK

Posted on • Edited on

1

Check balance on Danamon Online with Puppeteer

Another real case to learn Puppeteer. What I learn here is to use Puppeteer, find selector, doing click, switch between iframes, get data from a table structure and all are automated.

Danamon Online is one of internet banking service in Indonesia.

We need to install puppeteer and dotenv (or maybe you already installed).

npm i puppeteer
npm i dotenv
Enter fullscreen mode Exit fullscreen mode

Let's create these two files.

File .env

DANAMON_USER=
DANAMON_PASSWORD=
Enter fullscreen mode Exit fullscreen mode

Fill with the credential of Danamon Online.

File danamononline.js

const puppeteer = require('puppeteer');
require('dotenv').config();

if (
  !process.env.DANAMON_USER &&
  !process.env.DANAMON_PASSWORD
) {
  return console.log("Please edit the .env file with your Danamon Online credential!!!");
}

(async () => {
    // set some options (set headless to false so we can see 
    // this automated browsing experience)
    let launchOptions = { headless: false };

    // let's go to the Danamon Online internet banking website
    const browser = await puppeteer.launch(launchOptions);
    const page = await browser.newPage();
    await page.setViewport({width: 1366, height: 768});
    await page.goto('https://www.danamonline.com');

    // do the login, this is happen inside an iframe
    var frame = page.frames()[1];
    await frame.waitForSelector('#txtAccessCode');
    await frame.type('#txtAccessCode', process.env.DANAMON_USER);
    await frame.waitFor(1000);
    await frame.type('#txtPin', process.env.DANAMON_PASSWORD);
    await frame.waitFor(1000);
    await frame.waitForSelector('#cmdLogin');
    await frame.click('#cmdLogin');
    await frame.waitFor(3000);

    // get account name, inside an iframe on the right side
    frame = page.frames()[1];
    const accountName = await frame.evaluate(() => document.querySelectorAll('label[id="_ctl0_lblUsername"]')[0].textContent.trim() );

    // doing click on the left side menu, this is inside an iframe
    await frame.evaluate(() => document.querySelectorAll('a[headerindex="0h"]')[0].click());
    await frame.waitFor(1000);

    // doing click (again) on the left side menu, this will trigger 
    // summary balance info page on right iframe, 
    // this is inside an iframe
    await frame.evaluate(() => document.querySelectorAll('div[contentindex="0c"]')[0].querySelectorAll('a')[0].click());
    await frame.waitFor(5000);

    // get balance info on the balance page, this is inside an iframe on the right side
    frame = page.frames()[1];
    const accountNumber = await frame.evaluate(() => document.querySelectorAll('.custom1 tr')[1].querySelectorAll('td')[0].innerHTML.substring(document.querySelectorAll('.custom1 tr')[1].querySelectorAll('td')[0].innerHTML.indexOf('<br>') + 4));
    const currency = await frame.evaluate(() => document.querySelectorAll('.custom1 tr')[1].querySelectorAll('td')[1].textContent);
    const actualBalance = await frame.evaluate(() => document.querySelectorAll('.custom1 tr')[1].querySelectorAll('td')[2].textContent);
    const availableBalance = await frame.evaluate(() => document.querySelectorAll('.custom1 tr')[1].querySelectorAll('td')[3].textContent); 

    const balanceInfo = { 'account_no': accountNumber,
                          'account_name': accountName,
                          'currency': currency,
                          'actual_balance': actualBalance,
                          'available_balance': availableBalance }

    // display Danamon Online balance (plus account number, account type and currency type)
    console.log(balanceInfo);

    await browser.close();
})();
Enter fullscreen mode Exit fullscreen mode

Run it with

node danamononline.js
Enter fullscreen mode Exit fullscreen mode

Source code also available at GitHub https://github.com/sonyarianto/danamon-online-check-balance-with-puppeteer

Thank you and I hope you enjoy it. Any feedback are welcome.

SurveyJS custom survey software

Build Your Own Forms without Manual Coding

SurveyJS UI libraries let you build a JSON-based form management system that integrates with any backend, giving you full control over your data with no user limits. Includes support for custom question types, skip logic, an integrated CSS editor, PDF export, real-time analytics, and more.

Learn more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more