您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
可以在微商相册自动转发并且修改价格
// ==UserScript== // @name 微商相册自动转发 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 可以在微商相册自动转发并且修改价格 // @author CaloxNg // @license GPL-v3.0 // @include /https://www.szwego.com/.*/ // @icon https://img.alicdn.com/imgextra/i4/O1CN01FOwagl1XBpyVA2QVy_!!5000000002886-2-tps-512-512.png // @run-at document-end // @grant none // ==/UserScript== //使用说明 //选择多图列表模式 //1.手动一键填充: //1.1打开商品编辑页,输入分类名称,输入价格倍数,点击手动一键填充即可 //2.开始转发 //2.1打开到店面,滑动到哪里就从哪里开始转发 //2.2填入店面地址,如果需要日期检测就打钩,输入分类名称,输入价格倍数,点击开始直接转发即可 //3.开始到底转发 //3.1打开到店面 //3.2打钩到底转发,填入店面地址,如果需要日期检测就打钩,输入分类名称,输入价格倍数,点击开始转发即可 (function () { // 等待页面完全加载 window.onload = function () { // 创建插件页面---------------------------------------------------------- // 创建容器 let container = document.createElement('div'); container.style.position = 'fixed'; container.style.right = '0'; container.style.bottom = '80px'; container.style.backgroundColor = '#f5f6ff'; container.style.padding = '10px'; container.style.zIndex = '9999'; container.style.overflow = 'auto'; container.style.maxWidth = '250px'; container.style.boxSizing = 'border-box'; // 标题为"地址栏筛选"的单选框和输入框 let dizhiDiv = document.createElement('div'); dizhiDiv.innerHTML = ` <label style="display: block;"> <input type="checkbox" id="daodiCheckbox"> 到底转发 </label> <label style="display: block;"> <input type="checkbox" id="dizhiCheckbox"> 地址栏检测 </label> <input type="text" id="dizhiInput" placeholder="输入地址" style="width: calc(100% - 10px);"> `; container.appendChild(dizhiDiv); // 标题为"日期筛选"的单选框和输入框 let riqiDiv = document.createElement('div'); riqiDiv.innerHTML = ` <label style="display: block;"> <input type="checkbox" id="riqiCheckbox"> 日期检测 </label> `; container.appendChild(riqiDiv); // 标题为"分类输入框"的输入框 let fenleiDiv = document.createElement('div'); fenleiDiv.innerHTML = ` <label style="display: block;"> 分类输入框: </label> <input type="text" id="fenleiInput" placeholder="输入分类" style="width: calc(100% - 10px);"> `; container.appendChild(fenleiDiv); // 标题为"价格倍数"的输入框 let jiageDiv = document.createElement('div'); jiageDiv.innerHTML = ` <label style="display: block;"> 价格倍数: </label> <input type="number" id="jiageInput" placeholder="输入倍数" style="width: calc(100% - 10px);margin-bottom:10px;"> `; container.appendChild(jiageDiv); // 创建按钮区域,按钮可以一行两个排列 let buttonContainer = document.createElement('div'); buttonContainer.style.display = 'flex'; buttonContainer.style.flexDirection = 'row'; buttonContainer.style.flexWrap = 'wrap'; buttonContainer.style.justifyContent = 'space-between'; buttonContainer.style.gap = '10px'; // "手动一键填充"按钮 let shoudongtianchongBtn = document.createElement('button'); shoudongtianchongBtn.textContent = '手动一键填充'; shoudongtianchongBtn.style.padding = '8px 15px'; shoudongtianchongBtn.style.backgroundColor = '#4CAF50'; shoudongtianchongBtn.style.color = 'white'; shoudongtianchongBtn.style.border = 'none'; shoudongtianchongBtn.style.borderRadius = '4px'; shoudongtianchongBtn.style.cursor = 'pointer'; buttonContainer.appendChild(shoudongtianchongBtn); // "网页滚动到底"按钮 let gundongdibuBtn = document.createElement('button'); gundongdibuBtn.textContent = '网页滚动底部'; gundongdibuBtn.style.padding = '8px 15px'; gundongdibuBtn.style.backgroundColor = '#2196F3'; gundongdibuBtn.style.color = 'white'; gundongdibuBtn.style.border = 'none'; gundongdibuBtn.style.borderRadius = '4px'; gundongdibuBtn.style.cursor = 'pointer'; buttonContainer.appendChild(gundongdibuBtn); // "开始转发"按钮 let kaishizhuanfaBtn = document.createElement('button'); kaishizhuanfaBtn.textContent = '开始转发'; kaishizhuanfaBtn.style.padding = '8px 15px'; kaishizhuanfaBtn.style.backgroundColor = '#FF9800'; kaishizhuanfaBtn.style.color = 'white'; kaishizhuanfaBtn.style.border = 'none'; kaishizhuanfaBtn.style.borderRadius = '4px'; kaishizhuanfaBtn.style.cursor = 'pointer'; kaishizhuanfaBtn.style.width = '100%'; buttonContainer.appendChild(kaishizhuanfaBtn); //按钮添加到页面中 container.appendChild(buttonContainer); // 将容器添加到页面中 document.body.appendChild(container); // 创建插件页面---------------------------------------------------------- // 手动一键填充---------------------------------------------------------- shoudongtianchongBtn.addEventListener('click', function () { //获取分类设置 let fenleiInput = document.getElementById('fenleiInput'); let fenleishezhi = fenleiInput.value.trim(); //获取价格倍数 let jiageInput = document.getElementById('jiageInput'); let jiagebeishu = parseFloat(jiageInput.value.trim()); //如果分类设置与价格倍数不为空 if (fenleishezhi !== '' && jiagebeishu !== '') { //获取分类按钮 let fenleianniu = document.querySelector('.weui_cell_ft'); //如果分类标签不为空,则点击 if (fenleianniu != null) { fenleianniu.click(); //分类页面加载等待2秒进行 setTimeout(() => { //分类页面获取所有的分类标签 let fenleibiaoqian = document.querySelectorAll('.f12.word-break.g3'); if (fenleibiaoqian.length > 0) { for (let item of fenleibiaoqian) { //是否与分类设置一样 if (item.textContent.trim() === fenleishezhi) { //如果是则点击,跳出循环 item.click(); //获取保存分类按钮 let wgooButtons = document.querySelectorAll('.wgoo-button'); if (wgooButtons != null) { wgooButtons.forEach(button => { let span = button.querySelector('.wgoo-button__content'); if (span && span.textContent.trim().includes('完成')) { // 保存分类 button.click(); } }); } else { alert("未找到完成按钮") } //返回详情页等待2秒进行 setTimeout(() => { // 获取详情描述框 let xiangqingkuang = document.querySelector('.weui_textarea') //如果详情不等于空 if (xiangqingkuang != null) { let xinjiage = 0 //获得价格框 let shoujiakuang = document.querySelector( '.weui_input.text-right.error-color' ) //获取详情内容 let jiuneirong = xiangqingkuang.value //用正则表达式获取到带图标价格 let daichulijiage = jiuneirong.match(/(\d+)💰|💰(\d+)/) if (daichulijiage != null) { //获取纯价格 let yuanjiage = daichulijiage[1] || daichulijiage[2] //新价格 xinjiage = yuanjiage * jiagebeishu //把详情内容的价格进行替换得到新内容 jiuneirong = jiuneirong.replace(yuanjiage, xinjiage) } //用正则表达式匹配原市场 let daichulijiage2 = jiuneirong.match( /原(价)?(本地)?(市场)?(💰)?(\d+)/ ) if (daichulijiage2 != null) { //获取原市场 let yuanshichang = daichulijiage2[5] //新市场 let xinshichang = yuanshichang * jiagebeishu //把详情内容的价格进行替换得到新内容 jiuneirong = jiuneirong.replace(yuanshichang, xinshichang) } if (jiuneirong.includes('珂珂')) { jiuneirong = jiuneirong.replace('珂珂', '雨墨'); } //把新内容替换进详情描述框 changeReactInputValue(xiangqingkuang, jiuneirong) //把新价格替换进售价输入框 if (shoujiakuang != null) { changeReactInputValue(shoujiakuang, xinjiage) } // 点击保存按钮 let saveBtn = document.querySelector('div[data-bury-name="保存"]'); let primaryButton = saveBtn.querySelector('.wgoo-button__primary'); if (primaryButton != null) { // 保存 primaryButton.click(); alert("完成"); return; } } }, 3000); // 等待2秒 } } } else { alert("未找到标签"); } }, 3000); // 等待2秒 } else { alert("不在详情页"); } } else { alert('分类和倍数不能为空') } }); // 手动一键填充---------------------------------------------------------- // 全局变量---------------------------------------------------------- let isRunning = false; // 控制启动的状态 let timer = null // 定时器 let list = [] // 商品列表 let index = 1 //循环取商品变量 const elementsToDisable = [ '#daodiCheckbox', '#dizhiCheckbox', '#dizhiInput', '#riqiCheckbox', '#fenleiInput', '#jiageInput' ]; // 全局变量---------------------------------------------------------- // 网页滚动到底部---------------------------------------------------------- gundongdibuBtn.addEventListener('click', function () { // 切换状态 isRunning = !isRunning; if (isRunning) { disabledElement(); shoudongtianchongBtn.disabled = true; kaishizhuanfaBtn.disabled = true; gundongdibuBtn.textContent = '停止滚动到底'; // 设置滚动逻辑 timer = setInterval(() => { if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 10) { clearInterval(timer); // 到达底部时停止滚动 isRunning = false; // 更新状态 openElement(); shoudongtianchongBtn.disabled = false; kaishizhuanfaBtn.disabled = false; gundongdibuBtn.textContent = '网页滚动底部'; // 恢复按钮文本 alert("到底了"); return; } else { window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' }); } this.timer = timer; }, 5000); // 每6秒检查一次是否到底部 } else { // 停止滚动:直接执行恢复操作(以防用户在没有到底部时点击停止) clearInterval(this.timer); openElement(); shoudongtianchongBtn.disabled = false; kaishizhuanfaBtn.disabled = false; gundongdibuBtn.textContent = '网页滚动底部'; // 恢复按钮文本 } }); // 网页滚动到底部---------------------------------------------------------- // 开始转发---------------------------------------------------------- kaishizhuanfaBtn.addEventListener('click', function () { //获取到底转发 let daodiOn = document.getElementById('daodiCheckbox').checked; //获取网页地址 let dizhiOn = document.getElementById('dizhiCheckbox').checked; let dizhiInput = document.getElementById('dizhiInput'); let dizhi = dizhiInput.value.trim(); //获取分类设置 let fenleiInput = document.getElementById('fenleiInput'); let fenleishezhi = fenleiInput.value.trim(); //获取价格倍数 let jiageInput = document.getElementById('jiageInput'); let jiagebeishu = parseFloat(jiageInput.value.trim()); // 获取日期 let riqiOn = document.getElementById('riqiCheckbox').checked; //如果分类设置与价格倍数不为空 if (fenleishezhi !== '' && jiagebeishu !== '') { // 切换状态 isRunning = !isRunning; //1.1判断运行状态 if (isRunning) { disabledElement(); shoudongtianchongBtn.disabled = true; gundongdibuBtn.disabled = true; kaishizhuanfaBtn.textContent = '停止转发' //传入index做为商品循环起始 timer = setTimeout(() => { shangpinchuli(index, daodiOn, dizhiOn, dizhi, fenleishezhi, jiagebeishu, riqiOn); }, 1000) } else { // 如果正在执行,停止执行 clearTimeout(timer); //运行状态改为停止 isRunning = false; //按钮名称改为开始执行 openElement(); shoudongtianchongBtn.disabled = false; gundongdibuBtn.disabled = false; kaishizhuanfaBtn.textContent = '开始转发'; return; } } else { return alert("分类和设置不能为空"); } }); // 开始转发---------------------------------------------------------- // -------------------方法封装-------------------------------- // js修改内容方法,inputDom为元素,newText为内容 function changeReactInputValue(inputDom, newText) { let lastValue = inputDom.value inputDom.value = newText let event = new Event('input', { bubbles: true }) event.simulated = true let tracker = inputDom._valueTracker if (tracker) { tracker.setValue(lastValue) } inputDom.dispatchEvent(event) } // js修改内容方法,inputDom为元素,newText为内容 // 关闭元素 function disabledElement() { elementsToDisable.forEach(selector => { document.querySelectorAll(selector).forEach(el => el.disabled = true); }); } // 关闭元素 // 开启元素 function openElement() { elementsToDisable.forEach(selector => { document.querySelectorAll(selector).forEach(el => el.disabled = false); }); } // 开启元素 // 开始转发 function shangpinchuli(index, daodiOn, dizhiOn, dizhi, fenleishezhi, jiagebeishu, riqiOn) { if (!isRunning) return; //判断是否到底 if (daodiOn) { if (window.innerHeight + window.scrollY < document.body.offsetHeight - 10) { window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' }); return timer = setTimeout(() => { shangpinchuli(index, daodiOn, dizhiOn, dizhi, fenleishezhi, jiagebeishu, riqiOn); }, 5000) } } //判断页面是否在店面 if (dizhiOn) { let test = window.location.href; if (dizhi !== test) { // 如果正在执行,停止执行 clearTimeout(timer); //运行状态改为停止 isRunning = false; //按钮名称改为开始执行 openElement(); shoudongtianchongBtn.disabled = false; gundongdibuBtn.disabled = false; kaishizhuanfaBtn.textContent = '开始转发'; return alert("地址变了"); } } //判断日期是否还在 if (riqiOn) { if (document.querySelector('.wgoo-tag__editor') === null) { // 如果正在执行,停止执行 clearTimeout(timer); //运行状态改为停止 isRunning = false; //按钮名称改为开始执行 openElement(); shoudongtianchongBtn.disabled = false; gundongdibuBtn.disabled = false; kaishizhuanfaBtn.textContent = '开始转发'; return alert("日期变了"); } } // 开始干活 //所有商品放到list集合中 list = document.querySelectorAll('a.f-flex.f-flex-wrap') //开始循环,传入index做为商品循环起始 if (index > list.length) { // 如果正在执行,停止执行 clearTimeout(timer); //运行状态改为停止 isRunning = false; //按钮名称改为开始执行 openElement(); shoudongtianchongBtn.disabled = false; gundongdibuBtn.disabled = false; kaishizhuanfaBtn.textContent = '开始转发'; return alert("执行完成"); } else { timer = setTimeout(() => { //由后往前从集合中取出一个元素 let one = list[list.length - index] //获得元素中的内容 let price = one.querySelector( '.word-break.ellipsis-two.f14.g3' ).textContent //判断元素中是否包含💰 if (!price.includes('💰')) { // 不包含💰,跳过当次循环,开始下一条 index++ return timer = setTimeout(() => { shangpinchuli(index, daodiOn, dizhiOn, dizhi, fenleishezhi, jiagebeishu, riqiOn) }, 1000) } //判断元素是否已添加 if (one.querySelector('.ellipsis-one.warn-color.f10')) { // 已添加,跳过当次循环,开始下一条 index++ return timer = setTimeout(() => { shangpinchuli(index, daodiOn, dizhiOn, dizhi, fenleishezhi, jiagebeishu, riqiOn) }, 1000) } // 点击编辑按钮 let editBtn = one.querySelector('.link.wsxc_edit.custom_bury') if (editBtn != null) { editBtn.click() // 等待编辑页面加载完成 timer = setTimeout(function () { //获取分类设置 let fenleiInput = document.getElementById('fenleiInput'); let fenleishezhi = fenleiInput.value.trim(); //获取价格倍数 let jiageInput = document.getElementById('jiageInput'); let jiagebeishu = parseFloat(jiageInput.value.trim()); //如果分类设置与价格倍数不为空 if (fenleishezhi !== '' && jiagebeishu !== '') { //获取分类按钮 let fenleianniu = document.querySelector('.weui_cell_ft'); //如果分类标签不为空,则点击 if (fenleianniu != null) { fenleianniu.click(); //分类页面加载等待2秒进行 setTimeout(() => { //分类页面获取所有的分类标签 let fenleibiaoqian = document.querySelectorAll('.f12.word-break.g3'); if (fenleibiaoqian.length > 0) { for (let item of fenleibiaoqian) { //是否与分类设置一样 if (item.textContent.trim() === fenleishezhi) { //如果是则点击,跳出循环 item.click(); //获取保存分类按钮 let wgooButtons = document.querySelectorAll('.wgoo-button'); if (wgooButtons != null) { wgooButtons.forEach(button => { let span = button.querySelector('.wgoo-button__content'); if (span && span.textContent.trim().includes('完成')) { // 保存分类 button.click(); } }); } else { alert("未找到完成按钮") } //返回详情页等待2秒进行 setTimeout(() => { // 获取详情描述框 let xiangqingkuang = document.querySelector('.weui_textarea') //如果详情不等于空 if (xiangqingkuang != null) { let xinjiage = 0 //获得价格框 let shoujiakuang = document.querySelector( '.weui_input.text-right.error-color' ) //获取详情内容 let jiuneirong = xiangqingkuang.value //用正则表达式获取到带图标价格 let daichulijiage = jiuneirong.match(/(\d+)💰|💰(\d+)/) if (daichulijiage != null) { //获取纯价格 let yuanjiage = daichulijiage[1] || daichulijiage[2] //新价格 xinjiage = yuanjiage * jiagebeishu //把详情内容的价格进行替换得到新内容 jiuneirong = jiuneirong.replace(yuanjiage, xinjiage) } //用正则表达式匹配原市场 let daichulijiage2 = jiuneirong.match( /原(价)?(本地)?(市场)?(💰)?(\d+)/ ) if (daichulijiage2 != null) { //获取原市场 let yuanshichang = daichulijiage2[5] //新市场 let xinshichang = yuanshichang * jiagebeishu //把详情内容的价格进行替换得到新内容 jiuneirong = jiuneirong.replace(yuanshichang, xinshichang) } if (jiuneirong.includes('珂珂')) { jiuneirong = jiuneirong.replace('珂珂', '雨墨'); } //把新内容替换进详情描述框 changeReactInputValue(xiangqingkuang, jiuneirong) //把新价格替换进售价输入框 if (shoujiakuang != null) { changeReactInputValue(shoujiakuang, xinjiage) } // 点击保存按钮 let saveBtn = document.querySelector('div[data-bury-name="保存"]'); let primaryButton = saveBtn.querySelector('.wgoo-button__primary'); if (primaryButton != null) { // 保存 primaryButton.click(); //等待5s开始执行 timer = setTimeout(() => { index++ shangpinchuli(index, daodiOn, dizhiOn, dizhi, fenleishezhi, jiagebeishu, riqiOn) }, 8000) } } }, 3000); // 等待2秒 } } } else { alert("未找到标签"); } }, 3000); // 等待2秒 } else { alert("不在详情页"); } } else { alert('分类和倍数不能为空') } }, 5000) } }, 5000) } } // 开始转发 // -------------------方法封装-------------------------------- }; })();