Greasy Fork

Greasy Fork is available in English.

eBay订单信息快速复制助手

ebay订单信息 读取 生成 复制到剪贴板

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         eBay订单信息快速复制助手
// @namespace    http://tampermonkey.net/
// @version      0.5
// @description  ebay订单信息 读取 生成 复制到剪贴板
// @match        https://www.ebay.com/*  // 替换为目标网页的URL
// @grant        none
// @include      https://www.ebay.com/mesh/ord/details?orderid=*
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // Function to copy text to clipboard
    function copyToClipboard(text) {
        // Modern approach using Clipboard API
        if (navigator.clipboard && window.isSecureContext) {
            // Preferred method for modern browsers
            return navigator.clipboard.writeText(text)
                .then(() => {
                console.log('Text copied to clipboard');
                return true;
            })
                .catch(err => {
                console.error('Failed to copy text: ', err);
                return false;
            });
        } else {
            // Fallback method for older browsers
            try {
                // Create a temporary textarea element
                const textArea = document.createElement('textarea');
                textArea.value = text;

                // Make the textarea out of viewport
                textArea.style.position = 'fixed';
                textArea.style.left = '-9999px';
                textArea.style.top = '0';
                textArea.setAttribute('readonly', '');

                document.body.appendChild(textArea);

                // Select the text
                textArea.select();
                textArea.setSelectionRange(0, 99999); // For mobile devices

                // Copy the text
                const successful = document.execCommand('copy');

                // Remove the textarea
                document.body.removeChild(textArea);

                if (successful) {
                    console.log('Text copied to clipboard');
                    return true;
                } else {
                    console.error('Unable to copy text');
                    return false;
                }
            } catch (err) {
                console.error('Fallback copy method failed: ', err);
                return false;
            }
        }
    }
    function addressTrim(inAddress){
        console.log(inAddress)
        let outAddress =""
        let nameArray = inAddress.split("Copy name")
        let strName= "姓名:"+nameArray[0]+"\n"
        outAddress = nameArray[1]
        console.log(outAddress); // Outputs: "ABC some text after"
        //outAddress = inAddress.replace("Copy name","\n")
        outAddress =outAddress.replaceAll("Copy to clipboard","\n")
        outAddress =outAddress.replaceAll("Copy street","\n")
        outAddress =outAddress.replaceAll("Copy city, ",",")
        outAddress =outAddress.replaceAll("Copy state/province ","")
        outAddress =outAddress.replaceAll("Copy zip code"," ")
        outAddress =outAddress.replaceAll("Copy country/region","")

        outAddress = "地址:"+outAddress.trim()
        return strName+outAddress
    }

    // 自定义函数:通过XPath定位元素
    function findElementByXPath(xpath) {
        const result = document.evaluate(xpath,document,null,XPathResult.FIRST_ORDERED_NODE_TYPE, null);
        return result.singleNodeValue; // 返回匹配的DOM节点
    }
    // 主函数
    function readLabelText() {
        let strOrderId = ''
        let strUserName = ''
        let strUserId = ''
        let strPhoneNum = ''
        let strItemName = ''
        let strAddress = ''
        let strShoeSize = ''
        // 使用精确的CSS选择器定位目标元素
        const elementOrderId = findElementByXPath('/html/body/div[2]/div[2]/main/div/div[4]/div[2]/div[1]/div/dl/div[1]/dd')
        if (elementOrderId) {
            const textContent = elementOrderId.textContent.trim(); // 获取文本并去掉多余空格
            strOrderId=textContent
            //console.log('strOrderId:', strOrderId);

        }
        const elementUserName= findElementByXPath('/html/body/div[2]/div[2]/main/div/div[4]/div[2]/div[1]/div/dl/div[4]/dd/div[1]')
        if(elementUserName){
            strUserName=elementUserName.textContent.trim();
            //console.log('strUserName:', strUserName);
        }
        const elementUserId=findElementByXPath('/html/body/div[2]/div[2]/main/div/div[4]/div[2]/div[1]/div/dl/div[4]/dd/div[2]/a[1]')
        if(elementUserId){
            strUserId=elementUserId.textContent.trim();
            //console.log('strUserId:', strUserId);
        }


        const elementItemName = findElementByXPath('/html/body/div[2]/div[2]/main/div/div[3]/div[1]/div[2]/div[1]/a');
        // 检查是否找到目标元素
        if (elementItemName) {
            strItemName=elementItemName.textContent.trim()
            //console.log('strItemName:', strItemName);
        }

        const elementPhoneNum = findElementByXPath('/html/body/div[2]/div[2]/main/div/div[4]/div[1]/div[6]/div/div/div[1]/div[1]/div[2]/div/dd/span/span/span/span/span/button');
        // 检查是否找到目标元素
        if (elementPhoneNum) {
            strPhoneNum=elementPhoneNum.textContent.trim()
            strPhoneNum=strPhoneNum.replace(" ","")
            console.log('strPhoneNum:', strPhoneNum);
        }


        const elementAddress = findElementByXPath('/html/body/div[2]/div[2]/main/div/div[4]/div[1]/div[6]/div/div/div[1]/div[1]/div[1]/div[2]');
        if (elementAddress) {
            strAddress= elementAddress.textContent.trim()
            strAddress= addressTrim(strAddress)
            //strAddress= strAddress.replace(strUserName,"")
            strAddress= strAddress.trim()
            //console.log('strAddress:', strAddress);
            /*example 姓名从地址里面抽取,不要用ebay账户名
姓名:Keosha Williams
地址:354 Pixley PI
West Deptford,NJ08096-4013 United States*/
        }

        const elementShoeSize = findElementByXPath('/html/body/div[2]/div[2]/main/div/div[4]/div[1]/div[7]/div/div/div/div/div/div[2]/div[1]/div[1]/span[2]');
        // 检查是否找到目标元素
        if (elementShoeSize) {
            strShoeSize=elementShoeSize.textContent.trim()
            strShoeSize = "US " + strShoeSize + "男"
            //console.log('strShoeSize:', strShoeSize);
        }
        let strInfo= `订单号:\n${strAddress}\n电话:\n${strPhoneNum}\n\n产品: ${ strItemName}\n尺码: ${strShoeSize}\n买家ID: ${strUserId}\n店铺运营:YY`;
        console.log(strInfo)

        // let fileName= `订单${strOrderId}`;
        copyToClipboard(strInfo)
            .then(success => {
            if (success) {
                alert('订单信息已经复制!');
            } else {
                alert('订单信息生成失败');
            }
        });
    }

    // 添加按钮到页面
    function addButton() {
        const button = document.createElement('button'); // 创建按钮
        button.textContent = '读取订单信息'; // 按钮文字
        button.style.position = 'fixed'; // 固定位置
        button.style.bottom = '20px'; // 距离底部20px
        button.style.left = '20px'; // 距离右侧20px
        button.style.zIndex = '9999'; // 确保按钮在最前面
        button.style.padding = '10px 20px';
        button.style.backgroundColor = '#007bff'; // 按钮颜色
        button.style.color = '#fff'; // 按钮文字颜色
        button.style.border = 'none';
        button.style.borderRadius = '5px';
        button.style.cursor = 'pointer';

        // 按钮点击事件绑定到自定义函数
        button.addEventListener('click', readLabelText);

        // 将按钮添加到页面
        document.body.appendChild(button);
    }

    // 页面加载完成后执行
    //window.addEventListener('load', readLabelText);
    window.addEventListener('load', addButton);
    // 或者如果需要在页面动态变化时持续监听


})();