不看不知道一看吓一跳,MD,淘宝花了好多钱。
原版油猴脚本 https://greasyfork.org/zh-CN/scripts/414444-%E6%B7%98%E5%AE%9D%E4%B9%B0%E5%AE%B6%E8%AE%A2%E5%8D%95%E5%AF%BC%E5%87%BA
修正版本自己油猴添加吧,登陆淘宝后进入 已买到的宝贝
有大神能弄成全自动的最好
// ==UserScript==
// home.php?mod=space&uid=170990 淘宝买家订单导出
// home.php?mod=space&uid=467642 http://tampermonkey.net/
// home.php?mod=space&uid=1248337 0.12
// @description 基于Greasy Fork上的一个订单管理脚本,修复了bug使得对于淘宝订单的导出功能重新可用。但对于京东尚没有测试。
// home.php?mod=space&uid=686208 CMA
// home.php?mod=space&uid=609072 none
// home.php?mod=space&uid=697773 https://buyertrade.taobao*
// @include https://trade.taobao*
// @include https://trade.tmall*
// @include https://details.jd*
// @require https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js
// ==/UserScript==
/**
* 链接匹配
*/
const tbOrderListRe = /(http|https):\/\/buyertrade\.taobao.*?\/trade/g;
const tbOrderDetailRe = /(http|https):\/\/trade\.taobao.*?\/trade/g;
const tmOrderDetailRe = /(http|https):\/\/trade\.tmall.*?\/detail/g;
const jdOrderDetailRe = /(http|https):\/\/details\.jd.*?/g
/**
* 淘宝订单列表开始
*/
let tbOrderList = {} // 淘宝订单列表数据
var tbCount11 = 0;
if (tbOrderListRe.exec(document.URL)) {
const element = document.getElementById("J_bought_main");
addButtonToPage(element, tbExportOrdersToCsv, "导出订单", "160px");
addButtonToPage(element, tbAddCurrentPageOrdersToList, "添加本页订单", "160px");
console.log("淘宝订单列表脚本启动完成!" + tbCount11);
}
function tbAddCurrentPageOrdersToList() {
const orders = document.getElementsByClassName("js-order-container");
for (let order of orders) {
let orderItems = tbParseOrder(order);
if (!orderItems) {
continue;
}
_.forEach(orderItems, (value, key) => {
tbOrderList[key] = value;
})
console.log(Object.values(orderItems)[0][5])
tbCount11 = tbCount11 + Object.values(orderItems)[0][5];
}
document.getElementById("添加本页订单").value = "添加本页订单(" + tbCount11.toFixed(2) + ")";
}
function tbExportOrdersToCsv() {
let csvHeader = ["订单号", "下单日期", "商品明细", "单价", "数量", "总价", "状态"];
exportToCsv(csvHeader, tbOrderList, "淘宝订单导出")
}
/**
* 解析列表页淘宝单个订单块
*/
function tbParseOrder(order) {
let output = {};
let content = order.textContent;
let pattern = /(\d{4}-\d{2}-\d{2})订单号: (\d{18})/;
let noAndDate = pattern.exec(content);
if (!noAndDate) {
alert('解析订单失败!');
return null;
}
const orderDate = noAndDate[1];
const orderNo = order.querySelector("div[data-id]").getAttribute("data-id");
let orderIndex = 0;
while (1) {
let countPrefix = ".0.7:$order-" + orderNo + ".$" + orderNo + ".0.1:1:0.$" + orderIndex + ".$2.0.0";
let productPrefix = ".0.7:$order-" + orderNo + ".$" + orderNo + ".0.1:1:0.$" + orderIndex + ".$0.0.1.0.0.1";
let pricePrefix = ".0.7:$order-" + orderNo + ".$" + orderNo + ".0.1:1:0.$" + orderIndex + ".$1.0.1.1";
let statusPrefix = ".0.7:$order-" + orderNo + ".$" + orderNo + ".0.1:1:0.$" + orderIndex + ".$5.0.0.0";
let shijiPrefix = ".0.7:$order-" + orderNo + ".$" + orderNo + ".0.1:1:0.$" + orderIndex + ".$4.0.0.2.0.1";
let countQuery = order.querySelector("p[data-reactid='" + countPrefix + "']");
let productQuery = order.querySelector("span[data-reactid='" + productPrefix + "']");
let priceQuery = order.querySelector("span[data-reactid='" + pricePrefix + "']");
let shijiPriceQuery = order.querySelector("span[data-reactid='" + shijiPrefix + "']");
let orderStatus = ""
if (orderIndex === 0) {
let statusQuery = order.querySelector("span[data-reactid='" + statusPrefix + "']");
orderStatus = statusQuery.textContent;
}
orderIndex++;
if (countQuery === null || productQuery === null || priceQuery === null ||shijiPriceQuery===null) {
break;
}
let unitPrice = priceQuery.textContent;
let count = countQuery.textContent;
let shiji=shijiPriceQuery.textContent;
output[orderNo + orderIndex] = [
"NO." + orderNo,
"D." + orderDate,
productQuery.textContent,
parseFloat(unitPrice),
count,
parseFloat(shiji),
orderStatus,
]
}
return output;
}
/**
* 淘宝订单列表结束
*/
/**
* 淘宝订单详情开始
*/
if (tbOrderDetailRe.exec(document.URL)) {
const element = document.getElementById("content");
addButtonToPage(element, tbGeneratePrintPage, "生成打印页面", "160px");
}
function tbGeneratePrintPage() {
document.body.innerHTML = document.getElementsByClassName('app-mod__tabs-container___iwi0I')[0].innerHTML;
document.body.style.width = "950px";
document.body.style.marginLeft = "auto";
document.body.style.marginRight = "auto";
window.print();
}
/**
* 淘宝订单详情结束
*/
/**
* 天猫订单详情开始
*/
if (tmOrderDetailRe.exec(document.URL)) {
const element = document.getElementById("content");
addButtonToPage(element, tmGeneratePrintPage, "生成打印页面", "160px");
}
function tmGeneratePrintPage() {
document.title = "交易详情"
document.body.innerHTML = document.getElementById('appDetailPanel').innerHTML + "</br>" + document.getElementById('appOrders').innerHTML + "</br>" + document.getElementById('appAmount').innerHTML;
window.print();
}
/**
* 天猫订单详情结束
*/
/**
* 京东订单详情开始
*/
let jdOrderDetail = {}
if (jdOrderDetailRe.exec(document.URL)) {
const element = document.getElementById("container");
jdParseOrderDetail()
addButtonToPage(element, jdExportOrderToCsv, "导出订单 Excel", "160px")
}
function jdExportOrderToCsv() {
let csvHeader = ["商品明细", "商品编号", "单价", "数量", "总价"];
exportToCsv(csvHeader, jdOrderDetail, "京东订单导出")
}
function jdParseOrderDetail() {
let items = document.getElementsByClassName("goods-list")[0].getElementsByTagName("tbody")[0]
_.forEach(items.getElementsByTagName("tr"), value => {
if (value.className === "J-yunfeixian") {
return 0;
}
let content = value.innerText;
if (!content) {
return 0;
}
let detail = content.match(/\n(.+?)\n/)[1];
let pattern = /\t(\d{5,})\t(.+?)\t(\d+)\t(\d+)/
let productNo = content.match(pattern)[1]
let unitPriceStr = content.match(pattern)[2]
let count = content.match(pattern)[3]
let unitPrice;
if (/¥/.exec(unitPriceStr)) {
unitPrice = parseFloat(unitPriceStr.match(/\d+\.\d{2}/)[0]);
} else {
unitPrice = 0.0;
}
jdOrderDetail[productNo] = [detail, "NO." + productNo, unitPrice, count, parseFloat(count) * unitPrice]
})
jdOrderDetail['paid_total'] = ["\n应付总金额:", document.getElementsByClassName("txt count")[0].innerText];
}
/**
* 京东订单详情结束
*/
/**
* 公共方法
*/
function addButtonToPage(element, onclickFunc, value = "未指定按钮", width = "60px", height = "60px") {
const button = document.createElement("input");
button.type = "button";
button.id = value;
button.value = value;
button.style.width = width;
button.style.height = height;
button.style.align = "center";
button.style.marginLeft = "250px";
button.style.marginBottom = "10px";
button.style.background = "#409EFF";
button.style.border = "1px solid #409EFF";
button.style.color = "white";
button.onclick = function () {
onclickFunc();
}
element.appendChild(button);
element.insertBefore(button, element.childNodes[0]);
}
function exportToCsv(header, data, filename) {
let rows = "";
let row = header.join(",");
rows += row + "\n";
_.forEach(data, value => {
rows += _.replace(value.join(","), '#', '@') + "\n";
})
let blob = new Blob(["\ufeff" + rows], { type: 'text/csv;charset=utf-8;' });
let encodedUri = URL.createObjectURL(blob);
let link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", filename + ".csv");
document.body.appendChild(link);
link.click();
}