// ==UserScript== // @name Ali-national 助手 by chr1s // @namespace http://www.alibaba.com // @version 3.3 // @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 // @downloadURL none // ==/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('.suggestion'); // 插入剪切型号按钮 let cutTypeButton = document.querySelector('.trigger-wrapper'); // 添加产品信息获取按钮 和 chatgpt查询输入框 buildButton('一键获取商品信息 by Chr1s', categoryDiv, getProductInfo) // 添加首字母大写按钮 // buildButton('检查并修改大小写 by Chr1s', categoryDiv, titleCase); // 拷贝chat文本按钮生成 buildButton('一键生成检索词 by Chr1s', document.getElementById('struct-catInfo'), 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'); buildButton('复制型号', cutTypeButton, copyToClipboard(oeCodeStr)); })(); // 生成要自动填写的文本框 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}`); } // **************************************工具类函数 ↑ **************************************