-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtransaction.js
124 lines (95 loc) · 2.88 KB
/
transaction.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
const puppeteer = require('puppeteer');
const CREDS = require('./creds');
const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')
const moment = require('moment')
const Push = require( 'pushover-notifications' )
const adapter = new FileSync('db.json')
const db = low(adapter)
async function run() {
const browser = await puppeteer.launch({
headless: true
});
const page = await browser.newPage();
const USERNAME_SELECTOR = '#txtMyClientNumber_field';
const PASSWORD_SELECTOR = '#txtMyPassword_field';
const BUTTON_SELECTOR = '#btnLogon_field';
await page.goto('https://netbank.com.au');
await page.click(USERNAME_SELECTOR);
await page.keyboard.type(CREDS.cba_username);
await page.click(PASSWORD_SELECTOR);
await page.keyboard.type(CREDS.cba_password);
await page.click(BUTTON_SELECTOR);
await page.waitForNavigation();
const ACCOUNT_SELECTOR = 'a[title="' + CREDS.cba_account + '"]'
await page.click(ACCOUNT_SELECTOR);
await page.waitFor(3 * 1000);
const LIST_DATE_SELECTOR = '#transactionsTableBody tr.pending:not(.pending_header) td.date';
const LIST_AMOUNT_SELECTOR = '#transactionsTableBody tr.pending:not(.pending_header) td.align_right span.currencyUI';
const LENGTH_SELECTOR_CLASS = '#transactionsTableBody tr.pending:not(.pending_header)';
let date = await page.evaluate((sel) => {
var element = document.querySelector(sel);
return element.innerText;
}, LIST_DATE_SELECTOR);
let amount = await page.evaluate((sel) => {
var element = document.querySelector(sel);
element = element.innerText.split('-$ ').pop();
return element;
}, LIST_AMOUNT_SELECTOR);
console.log(date, ' -> ', amount);
const today = moment().format('DD MMM YYYY');
// const date = '26 Apr 2018'
// const amount = '7.00'
const count = db
.get('transactions')
.size()
.value()
const transactions = db
.get('transactions')
.value()
const transaction = db
.get('transactions')
.last()
.value()
const todaysTotal = db
.get('transactions')
.filter({ date: today })
.value()
if (transaction.date === date && transaction.amount === amount) {
// do nothing
}
else {
// add transaction
db.get('transactions')
.push({ id: count +1, date: date, amount: amount})
.write()
db.update('count', n => n + 1)
.write()
console.log('New Tranaction: ' + amount)
var totalSpent = 0;
for(var i in todaysTotal) {
totalSpent += parseFloat(todaysTotal[i].amount);
}
console.log('Spent Today: ' + totalSpent)
var p = new Push( {
user: CREDS.pushover_user,
token: CREDS.pushover_token,
})
var msg = {
message: 'Amount: $' + amount + ' (Today: $' + totalSpent + ')', // required
title: "New Transaction",
sound: 'magic',
device: CREDS.pushover_device,
priority: 1
}
p.send( msg, function( err, result ) {
if ( err ) {
throw err
}
console.log( result )
})
}
console.log('done')
browser.close();
}
run();