您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
可按自然月、自定义日期范围(例如输入:g('2018-02-07','2018-03-06'))统计
当前为
// ==UserScript== // @name 浦发信用卡交易统计插件 // @version 0.1 // @description 可按自然月、自定义日期范围(例如输入:g('2018-02-07','2018-03-06'))统计 // @match https://cardsonline.spdbccc.com.cn/icard/* // @run-at document-start // @grant unsafeWindow // @namespace https://greasyfork.org/users/176496 // ==/UserScript== var frm, bill = [], fetched = [], spdbstatTimer; function start() { if ((typeof $ === 'undefined') || $('#frmright').length == 0) return; clearInterval(spdbstatTimer); var w = (typeof unsafeWindow !== 'undefined') ? unsafeWindow : window; w.g = function (date1, date2) { statBill(date1, date2); }; $('#frmright').load(function () { frm = $('#frmright')[0].contentWindow.document; var dt = getBillDate(); if (!dt || fetched.indexOf(dt) >= 0) return; fetchBill(); statBill(); if (!$('input[name=Next]', frm).is(':disabled')) setTimeout(function () { $('input[name=Next]', frm).click(); }, 700); else { fetched.push(dt); console.log('<当前账单统计完毕!>'); } }); $('#frmright').trigger('load'); } function getBillDate() { if (!frm) return null; var dt = null; var billtype = getBillType(); if (billtype == 0) // 未出账单 dt = '0000-00-00'; else if (billtype == 1) { // 已出账单 var $dt = $('form[name=form1] .table_comm_noze td:last-child', frm); if ($dt.prev().html() == '到期还款日') dt = $dt.html(); } return dt; } function getBillType() { var billtype = -1; if (!frm) return billtype; var page = $('.tabsl>a>span', frm).html(); if (page == '账户近期交易') billtype = 0; // 未出账单 else if (page == '近期对账单查询') billtype = 1; // 已出账单 return billtype; } function fetchBill() { if (!frm) return; var billtype = getBillType(); if (billtype == -1) return; var page = $('.tabsl>a>span', frm).html(); var tbl = $('form[name=form1] .table_comm', frm); $('tr', tbl).each(function () { var row = []; $('td', $(this)).each(function () { row.push($(this).html()); }); if (!isNaN(Date.parse(row[1]))) { if (billtype == 0) bill.push([row[1], row[2], row[6]]); else bill.push([row[1], row[2], row[3]]); } }); } function pad(n, width, z) { z = z || '0'; n = n.toFixed(2) + ''; return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n; } function sumRow(row, sum, item, val) { sum[item].total += val; if (row[1].indexOf('支付宝') >= 0) sum[item].alipay += val; else if (row[1].indexOf('财付通') >= 0) sum[item].tenpay += val; else sum[item].other += val; } function statBill(date1, date2) { var sum = {}, range = 'range'; if (date1) sum[range] = { total: 0, alipay: 0, tenpay: 0, other: 0, mindate: date1, maxdate: date1 }; for (var i = 0; i < bill.length; i++) { var row = bill[i]; var mon = row[0].substr(0, 7); var val = parseFloat(row[2].replace(/,/g, '')); if (!sum[mon]) sum[mon] = { total: 0, alipay: 0, tenpay: 0, other: 0, mindate: row[0], maxdate: row[0] }; if (row[1].indexOf('还款') < 0) { // 还款的不计入 sumRow(row, sum, mon, val); if (date1 && row[0] >= date1 && (!date2 || row[0] <= date2)) { sumRow(row, sum, range, val); if (row[0] > sum[range].maxdate) sum[range].maxdate = row[0]; } } if (row[0] < sum[mon].mindate) sum[mon].mindate = row[0]; if (row[0] > sum[mon].maxdate) sum[mon].maxdate = row[0]; } console.clear(); for (var item in sum) { if (date1 && item != range) continue; var s = '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n' + '周 期:' + sum[item].mindate + ' 至 ' + sum[item].maxdate + '\n' + '───────────────────────────────────\n' + '支付宝:' + pad(sum[item].alipay, 12, ' ') + '\n' + '财付通:' + pad(sum[item].tenpay, 12, ' ') + '\n' + '-----------------------------------\n' + '小 计:' + pad(sum[item].alipay + sum[item].tenpay, 12, ' ') + '\n' + '───────────────────────────────────\n' + '其 它:' + pad(sum[item].other, 12, ' ') + '\n' + '───────────────────────────────────\n' + '合 计:' + pad(sum[item].total, 12, ' ') + '\n' + '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n'; console.log(s); } } spdbstatTimer = setInterval(function() { start(); }, 2000);