NRKNの資産評価額照会を一括ダウンロードするスクリプト@chrome
var downloadAsTextFile = function(fileName, content) { var a = document.createElement('a'); a.download = fileName; a.href = (window.URL || window.webkitURL).createObjectURL(new Blob([new Uint8Array([0xEF, 0xBB, 0xBF]), content])); document.body.appendChild(a); a.click(); document.body.removeChild(a); }; var downloadAsCSVFile = function(fileName, rows) { var content = ""; for(var i in rows) { for (var j = 0, m = rows[i].length; j < m; ++j) content += '"' + ("" + rows[i][j]).replace(/"/g, '""') + '"' + (j !== m ? ',' : ''); content += '\n'; } downloadAsTextFile(fileName, content); }; var Queue = function() { this.promise = Promise.resolve(true); this.addAsync = (action) => this.promise = this.promise.then(() => new Promise((resolve) => action(resolve))); this.addSync = (action) => this.addAsync((resolve) => { action(); resolve(); }); this.delay = (delay) => this.addAsync((resolve) => setTimeout(resolve, delay)); }; var q = new Queue(); var header = [ "照会対象年月日", "商品名", "商品分類", "数量(残高)", "基準価額", "資産評価額", "取得価額累計", "解約価額", "解約時評価額", "損益", "基準日", "資産比率", ]; var table = []; table.push(header); $("input[value='照会']").closest("form").find("select option").each((i, e) => { q.addAsync((resolve) => { console.log(e.innerHTML); $("input[value='照会']").closest("form").find("select").val(e.value); $.ajax({ type: "POST", url: "/webapp/nrk/W37S1210_AssetValueSearch.do", data: $("input[value='照会']").closest("form").serializeArray() }).done((r) => { var date = $("p.redTxt.bold", r).text().split(/ /)[1]; $(".infoDetailUnit_02", r).each((i, e) => { var data = $("dd", e).map((i, dd) => [[ $("dt", e).get(i).innerText.trim(), dd.innerText.trim().replace(/円$/, "").replace(/▲/, "-") ]]).toArray().reduce((l, [k, v]) => Object.assign(l, { [k]: v} ), {}); data["照会対象年月日"] = $("p.redTxt.bold", r).text().split(/ /)[1]; table.push(header.map((k) => data[k])); }); resolve(); }); }) }); q.addSync(() => downloadAsCSVFile("table.csv", table));
もうチョイスマートに書けないかな。。。