Greasy Fork

Greasy Fork is available in English.

Ali-national 助手 by chr1s

一键获取商品编辑页的产品信息

目前为 2023-06-27 提交的版本,查看 最新版本

// ==UserScript==
// @name         Ali-national 助手 by chr1s
// @namespace    http://www.alibaba.com
// @version      3.0
// @description  一键获取商品编辑页的产品信息
// @author       Chr1s

// @match *://www.alibaba.com/*
// @match *://data.alibaba.com/*
// @match *://*.alibaba.com/trade/search*
// @match *://*.alibaba.com/product-detail/*
// @match *://keywordIndex.alibaba.com/*
// @match *://photobank.alibaba.com/*
// @match *://post.alibaba.com/*
// @match *://hz-productposting.alibaba.com/*
// @match *.alibaba.com/product/*

// @icon http://is.alicdn.com/favicon.ico
// @grant GM_addStyle
// @license MIT
// ==/UserScript==

// **************************************全局变量 ↓ **************************************
var author_name = 'Ethan';

var oeCodeStr = '';
var productTitle = document.getElementById('productTitle').value; // 产品标题
var keywordElements = document.querySelectorAll('div[role="keywords"] input[role="input"]'); // 关键词
var ChatGPTwords = `这是一个汽配产品的标题:` + productTitle +
    `
参考这个标题,考虑这个产品的应用场景并让其更受欢迎,设计三个英文关键词,并在不改变关键信息的情况下重新拟定一个更长的英文标题,使购物网站上的客户更容易检索到这个产品,字数不超过105个。
回答中只需给出标题和关键词,不要有多余的话,例如"以下是三个英文关键词的建议,有助于购物网站上的客户更容易检索到这个产品:"`;
// **************************************全局变量 ↑ **************************************


(function () {
    'use strict';

    document.getElementById('struct-globalMessage').parentElement.removeChild(document.getElementById('struct-globalMessage')); // 删掉碍眼元素

    // **************************************生成元素 ↓ **************************************
    let categoryDiv = document.querySelector('.category');
    let buildImageDiv = document.querySelector('.trigger-wrapper');
    // 添加产品信息获取按钮 和 chatgpt查询输入框
    buildButton('一键获取商品信息 by Chr1s', categoryDiv, getProductInfo)
    // 添加首字母大写按钮
    // buildButton('检查并修改大小写 by Chr1s', categoryDiv, titleCase);
    // 拷贝chat文本按钮生成
    buildButton('一键生成检索词 by Chr1s', document.getElementById('suggestion'), copyChatWords);
    // inputTargetWordsArea();
    addChatGPTframe();
    // **************************************生成元素 ↑ **************************************
    buildParamsButton('检索谷歌', buildImageDiv, searchImage, 'google'); // 添加一键检索型号按钮(一键检索前必须先获取商品信息!!!!!!!!)
    buildParamsButton('检索MadeInChina', buildImageDiv, searchImage, 'MadeInChina');
    buildParamsButton('检索Amazon', buildImageDiv, searchImage, 'amazon');
    buildParamsButton('检索U-buy', buildImageDiv, searchImage, 'u-buy');
    buildParamsButton('检索Aliexpress', buildImageDiv, searchImage, 'Aliexpress');
    buildParamsButton('检索bueno-air', buildImageDiv, searchImage, 'bueno-air');

})();

// 生成要自动填写的文本框
function inputTargetWordsArea() {
    let keywordsArea = document.createElement('textarea');
    keywordsArea.setAttribute('style', 'width: 650px; height: 80px;');
    keywordsArea.setAttribute(
        'placeholder',
        '请注意,拷贝进此区域的内容将立即进行替换,请谨慎输入'
    );
    keywordsArea.oninput = function () {
        const targetText = this.value.trim();
        if (targetText === '') return;

        // 替换商品标题
        const productTitleInput = document.getElementById('productTitle');
        const keywordLines = targetText.split('\n');
        const titleLine = keywordLines.shift();
        const targetKeyword = titleLine.replace('更新产品标题:', '').replace('关键词:', '');
        productTitleInput.value = targetText.includes(targetKeyword)
            ? targetKeyword
            : '';

        // 替换关键词
        const keywordInputs =
            document.querySelectorAll('div[role="keywords"] input[role="input"]');
        keywordInputs.forEach((el, i) => {
            el.value = '';
            if (keywordLines[i]) el.value = keywordLines[i].trim();
        });
    };

    document.getElementById('struct-catInfo').appendChild(keywordsArea);
}
// 创建chatGPT窗口
function addChatGPTframe() {
    // 创建一个新的 iframe 元素并设置其 URL
    let iframe = document.createElement('iframe');
    iframe.setAttribute('src', 'https://venivediveci.site/#/chat/1687531884569');
    iframe.setAttribute('style', 'width: 850px; height: 420px;');
    // 将 iframe 添加到文档中
    let categoryNode = document.querySelector('.category');
    categoryNode.parentNode.insertBefore(iframe, categoryNode.nextSibling);
}

//  **************************************操作函数 ↓ **************************************
// 点击拷贝检索词
function copyChatWords() {
    copyToClipboard(ChatGPTwords); // 假设 ChatGPTwords 是要拷贝的文本

    // 创建提示词元素
    let successMessage = document.createElement('span');
    successMessage.textContent = '检索词已拷贝√';
    successMessage.style.color = 'green';

    // 在按钮下方插入提示词元素,并在两秒钟后隐藏
    let tipElem = event.target; // 获取被点击的按钮元素
    tipElem.insertAdjacentElement('afterend', successMessage);
    successMessage.style.display = '';
    setTimeout(() => {
        successMessage.style.display = 'none';
    }, 2000);
}

// 获取指定产品型号的 OE 编码
function getOECode(productModel) {
    let oeCode = null;
    let productElement = document.getElementById(productModel);
    if (productElement) {
        let inputElement = productElement.querySelector('input[type="text"], input[type="hidden"]');
        if (inputElement) {
            oeCode = inputElement.value.trim();
        }
    }
    return oeCode;
}

// 修改大小写函数
function titleCase() {
    capitalizeInputValue(document.getElementById('productTitle')); // 修改标题
    alert('标题修改成功')
    let keywordElements = document.querySelectorAll('div[role="keywords"] input[role="input"]');

    for (let i = 0; i < keywordElements.length; i++) {
        capitalizeInputValue(keywordElements[i])
    }
    alert('关键词修改成功')
}

// 一键检索
function searchImage(params) {
    if (oeCodeStr != '') {
        switch (params) {
            case 'google':
                window.open(`https://www.google.com/search?q=` + oeCodeStr + `&tbm=isch&ved=2ahUKEwiwnNOlsOL_AhXtsVYBHdPNCy0Q2-cCegQIABAA&oq=3874-99-356&gs_lcp=CgNpbWcQDDIECCMQJ1AAWABgoAxoAHAAeACAAewFiAHsBZIBAzYtMZgBAKoBC2d3cy13aXotaW1nwAEB&sclient=img&ei=30WaZPCwO-3j2roP05uv6AI&bih=959&biw=1523#imgrc=yBAEMoImOol1jM`, '_blank');
                break;
            case 'MadeInChina':
                window.open(`https://www.made-in-china.com/productdirectory.do?subaction=hunt&style=b&mode=and&code=0&comProvince=nolimit&order=0&isOpenCorrection=1&org=top&keyword=&file=&searchType=0&word=` + oeCodeStr, '_blank');
                break;
            case 'amazon':
                window.open(`https://www.amazon.com/s?k=` + oeCodeStr + `&ref=nb_sb_noss`, '_blank');
                break;
            case 'u-buy':
                window.open(`https://www.u-buy.com.ng/search/?ref_p=ser_tp&q=` + oeCodeStr, '_blank');
                break;
            case 'Aliexpress':
                window.open(`https://www.aliexpress.com/`, '_blank');
                break;
            case 'bueno-air':
                window.open(`https://www.bueno-air.com/search/index.html?name=` + oeCodeStr, '_blank');
                break;
            default:
                break;
        }
    } else {
        alert('请确认已获取商品信息,或检查该产品是否有型号!');
    }
};
// **************************************操作函数 ↑ **************************************


// **************************************工具类函数 ↓ **************************************
// 生成按钮工具函数   (按钮名字   ,要传入的元素位置, 添加被监听的函数)
function buildButton(buttonName, elementPosition, watchFunction) {
    let buttonElem = document.createElement('button');
    buttonElem.setAttribute('role', 'btn');
    buttonElem.setAttribute('type', 'button');
    buttonElem.classList.add('next-btn', 'next-btn-normal', 'next-btn-medium', 'category-button');
    buttonElem.textContent = buttonName;
    buttonElem.addEventListener('click', watchFunction);
    elementPosition.appendChild(buttonElem);

    return buttonElem
}

// 生成带参按钮工具函数   (按钮名字   ,要传入的元素位置, 添加被监听的函数,参数)
function buildParamsButton(buttonName, elementPosition, watchFunction, params) {
    let buttonElem = document.createElement('button');
    buttonElem.setAttribute('role', 'btn');
    buttonElem.setAttribute('type', 'button');
    buttonElem.classList.add('next-btn', 'next-btn-normal', 'next-btn-medium', 'category-button');
    buttonElem.textContent = buttonName;
    buttonElem.addEventListener('click', () => watchFunction(params));
    elementPosition.appendChild(buttonElem);

    return buttonElem;
}

function capitalizeInputValue(element) {
    // 获取输入框中的内容并按空格拆分为多个单词
    let words = element.value.split(' ');
    // 对每个单词进行首字母大写处理
    for (let i = 0; i < words.length; i++) {
        let word = words[i];
        // 如果当前单词非空,则将第一个字母转换成大写
        if (word.length > 0) {
            words[i] = word.substr(0, 1).toUpperCase() + word.substr(1);
        }
    }
    // 将单词重新组合成字符串并更新输入框中的值
    element.value = words.join(' ');
    console.log(words);
}

// 将指定文本复制到剪贴板
function copyToClipboard(str) {
    let tempTextArea = document.createElement('textarea');
    tempTextArea.value = str;
    document.getElementById('category-card').appendChild(tempTextArea);
    tempTextArea.focus();
    tempTextArea.select();
    document.execCommand('copy');
    document.getElementById('category-card').removeChild(tempTextArea);
}

// 输出当前时间
function exportTime() {
    let today = new Date();
    let year = today.getFullYear();
    let month = today.getMonth() + 1;
    let day = today.getDate();

    // 将月份和日期统一格式化为两位数
    month = ("0" + month).slice(-2);
    day = ("0" + day).slice(-2);

    let formattedDate = `${year}.${month}.${day}`;
    return formattedDate
}

// 触发产品信息获取
function getProductInfo() {
    // 获取产品分组
    let productGroupStr = document.querySelector('span[value]').getAttribute('value');
    let subStrings = productGroupStr.split(' > ');
    let subcategories = [];
    for (let i = 0; i < 3; i++) {
        subStrings[i] ? subcategories.push(subStrings[i].trim()) : subcategories.push('无');
    }

    // 获取型号 struct-p-3  OE型号struct-p-191294249  struct-p-191288987  通版为Standard
    // 针对多个产品型号批量调用 getOECode 函数
    let productModels = ['struct-p-191294249', 'struct-p-191288987', 'struct-p-3'];
    let oeCodes = [];
    for (let i = 0; i < productModels.length; i++) {
        let oeCode = getOECode(productModels[i]);
        if (oeCode != null) {
            oeCodes.push(oeCode);
        }
    }
    oeCodeStr = oeCodes[0];

    // 判断是否为修改
    let action = '';
    action = (document.querySelector('h1').innerText === '修改产品' ? '修改' : '重发');

    // 获取产品标题
    let productTitle = document.getElementById('productTitle').value;

    // 获取产品原关键词
    let keywords = [];
    for (let i = 0; i < keywordElements.length; i++) {
        keywords.push(keywordElements[i].value);
    }

    // 产品品类
    let productTypes = '';
    productTypes = (document.querySelector('h1').innerText === '修改产品' ? '低分品' : '下架品');

    // 将产品信息拼接成文本并复制到剪贴板
    let productInfoStr = `${subcategories[0]}	${subcategories[1]}	${subcategories[2]}	${oeCodeStr}	${productTypes}	${action}	${productTitle}		"${keywords[0]}
${keywords[1]}
${keywords[2]}"		${oeCodeStr}	${oeCodeStr}			${exportTime()}	${author_name}`;
    copyToClipboard(productInfoStr);
    alert(`已将产品信息复制到剪贴板:${productInfoStr}`);
}
// **************************************工具类函数 ↑ **************************************