Skip to content

Instantly share code, notes, and snippets.

@seanmars
Last active January 4, 2023 17:30
Show Gist options
  • Save seanmars/84870a7e477f4db273f4a333e3436ed3 to your computer and use it in GitHub Desktop.
Save seanmars/84870a7e477f4db273f4a333e3436ed3 to your computer and use it in GitHub Desktop.
// ==UserScript==
// @name Fetch Order Information
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://live02.168money.com.tw/center/orders/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=168money.com.tw
// @grant none
// ==/UserScript==
let downloadText = (filename, text) => {
var element = document.createElement("a");
element.setAttribute(
"href",
"data:text/plain;charset=utf-8," + encodeURIComponent(text)
);
element.setAttribute("download", filename);
element.style.display = "none";
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
};
let downloadHtml = (filename, elements) => {
let content = '';
elements.forEach((ele, idx) => {
content += `<tr>
<td><div style='width: 300px;'><img src=${ele[0]} style='height: 100%; width: 100%; object-fit: contain' /></div></td>
<td>${ele[1]}</td>
</tr>`
});
let htmlText = `<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<table>
${content}
</table>
</body>
</html>`;
downloadText(filename, htmlText);
};
let fetchOrder = () => {
console.log("Fetch Order Information");
let orderElements = document.querySelectorAll(
`table > tbody > tr[data-order-no]`
);
let orderModalRoot = document.getElementById("tab-normal-orders");
orderElements.forEach((v, idx) => {
let btn = document.createElement("button");
// let orderModalRoot = document.getElementById('tab-normal-orders');
btn.textContent = "❤️";
let orderRow = v;
let orderId = v.getAttribute("data-order-no");
let orderDateText = v.getElementsByTagName('td')[1].textContent.split(' ')[0];
let orderAmountText = v.getElementsByTagName('td')[2].textContent;
let orderAmount = parseInt(orderAmountText.split(' ')[1]);
// console.log(orderId);
btn.addEventListener("click", (ele) => {
let orderModalId = `order-items-modal-${idx}`;
let modal = document.querySelector(`#tab-normal-orders #${orderModalId}`);
// console.log(orderModalId);
// console.log(modal);
let modalBody = modal.getElementsByClassName("modal-body")[0];
let items = modalBody
.getElementsByTagName("ul")[0]
.getElementsByClassName("item list-group-item");
// console.log(items);
let orderContext = [];
let orderImages = [];
Array.from(items).forEach((vv, vvIdx) => {
let left = vv.children[0].children[0];
let img = left.getElementsByClassName('thumbnail')[0].getAttribute('style');
// console.log(img);
let imgUrl = img.match(/\((.*?)\)/)[1].replace(/('|")/g,'');
// console.log(imgUrl);
let info = left.getElementsByTagName("h5")[0].textContent;
// console.log(info);
orderImages.push([imgUrl, info]);
let right = vv.children[0].children[1];
let quantityText = right
.getElementsByClassName("quantity")[0]
.getElementsByTagName("h5")[0].textContent;
let priceArea = right.getElementsByClassName("price")[0];
let unitPriceText =
priceArea.getElementsByClassName("unit-price")[0].textContent;
let amountText =
priceArea.getElementsByClassName("amount")[0].textContent;
let unitPrice = parseInt(unitPriceText.split(" ")[1]);
let quantity = parseInt(quantityText.split(" ")[1]);
let amount = parseInt(amountText.split(" ")[1]);
// console.log(quantity, unitPrice, amount);
if(vvIdx === 0) {
orderContext.push(`${orderDateText}\t${orderAmount}\t${info}\t${unitPrice}\t${quantity}\t${amount}`);
} else {
orderContext.push(`\t\t${info}\t${unitPrice}\t${quantity}\t${amount}`);
}
// console.log(left, right);
});
// download file
let orderInfoText = orderContext.join("\r\n");
downloadText(`order-${orderId}.txt`, orderInfoText);
downloadHtml(`order-${orderId}.html`, orderImages);
});
v.appendChild(btn);
});
};
(function() {
'use strict';
fetchOrder();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment