吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6802|回复: 12
上一主题 下一主题
收起左侧

[Windows] 淘宝订单导出半自动 油猴脚本

[复制链接]
楼主
ckhker 发表于 2020-12-12 17:33

不看不知道一看吓一跳,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();
}

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
zpy2 + 1 + 1 我很赞同!
ma4907758 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
祈无路过人间 发表于 2020-12-12 17:43
不看了不看了

3#
Q7788250 发表于 2020-12-12 18:01
4#
ldwz 发表于 2020-12-12 18:14
5#
大公无私 发表于 2020-12-12 18:28
用了这个东西 有种心碎的感觉
头像被屏蔽
6#
benq7378 发表于 2020-12-12 18:34
提示: 作者被禁止或删除 内容自动屏蔽
7#
吾皇万岁万万岁 发表于 2020-12-12 21:31
剁手党是不会看自己花了多少钱的
8#
darling129 发表于 2020-12-12 22:58
试用一下,看看
9#
旺旺小小酥 发表于 2020-12-12 23:11
不明觉厉 感谢分享
10#
zpy2 发表于 2020-12-13 06:20
_.forEach

这个_.是啥写法,比较新鲜?
快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 04:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表