Last active
January 4, 2023 17:30
-
-
Save seanmars/84870a7e477f4db273f4a333e3436ed3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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