思迅天店 会员列表导出工具箱
思迅天店 列表导出工具箱
把会员、商品、供应商等任意翻页列表,一键导出为 CSV。本页汇总了三种用法,按需取用即可。换电脑时只要把这个 HTML 文件拷过去打开就行。
推荐方案:① 油猴用户脚本(装一次,以后右下角自动出现按钮,最省事)。控制台方案(② 会员 / ③ 商品)作为无插件兜底。
① 油猴用户脚本(推荐,长期使用)
安装:Chrome 装 Tampermonkey 扩展 → 点下面「下载 .user.js」→ 把下载的文件拖进 Tampermonkey 窗口 → 完成。
使用:打开思迅后台任意列表页 → 右下角出现「思迅导出工具」面板 → 点「开始导出」→ 点页面「查询」→ 自动翻页下载 CSV。
⬇ 下载 .user.js复制脚本
// ==UserScript== // @name 思迅天店 列表一键导出 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 在思迅天店网页后台(会员/商品/供应商等列表页)一键翻页导出 CSV // @match https://star.td365.com.cn/Subsite* // @grant none // @run-at document-idle // ==/UserScript== (function(){ 'use strict'; if(document.getElementById('sx_export_bar')) return; var bar=document.createElement('div'); bar.id='sx_export_bar'; bar.style.cssText='position:fixed;right:10px;bottom:10px;z-index:999999;background:#fff;border:2px solid #07c;padding:10px;font:12px/1.4 monospace;color:#000;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,.2)'; bar.innerHTML='<p>思迅导出工具</p>'+ '<button id="sx_start" style="margin:2px;padding:4px 8px;cursor:pointer">开始导出</button>'+ '<button id="sx_finish" style="margin:2px;padding:4px 8px;cursor:pointer">手动下载</button>'+ '<p>点“开始导出”后,再点页面“查询”</p>'; document.body.appendChild(bar); function L(m){document.getElementById('sx_status').textContent=m;} var rows=[], seen={}, cols=null, pages=0, running=false, armed=false, started=false, totalCount=null, targetPath=null; function findDataArray(o,best){ best=best||{arr:null,n:0}; if(!o||typeof o!=='object') return best; if(Array.isArray(o)){ if(o.length && typeof o[0]==='object' && !Array.isArray(o[0])){ var ks=Object.keys(o[0]); if(ks.length>=3 && o.length>=1 && o.length>best.n){ best={arr:o,n:o.length,cols:ks}; } } return best; } for(var k in o){ if(o[k]&&typeof o[k]==='object'){ best=findDataArray(o[k],best); } } return best; } function getTotal(j){ if(!j||typeof j!=='object')return null; var ks=['total','totalcount','totalCount','count','recordcount','recordCount','recordsTotal','totalrows','totalRows']; for(var i=0;i<ks.length;i++){ if="">']; var all=document.querySelectorAll('button,a,li,span,div,i'); for(var i=0;i<all.length;i++){ var="" el="all[i];" if="">'&&t.indexOf(tt)>=0)){ return el; } } } var cls=document.querySelectorAll('[class*="next"],[id*="next"]'); for(var j=0;j<cls.length;j++){ var="" e="cls[j];" if="">=totalCount){ L('已达总数,停止'); break; } if(safety>800){ L('超过安全次数,停止'); break; } var btn=findNextBtn(); if(!btn){ L('未找到“下一页”按钮。 手动点下一页,点完点“手动下载”'); running=false; return; } if(btn.disabled){ L('下一页已禁用(已到末页),停止'); break; } var beforeRows=rows.length, beforePages=pages; try{ btn.click(); }catch(e){ L('点击失败:'+e); break; } var waited=0; while(pages<=beforepages></=beforepages></cls.length;j++){></all.length;i++){></ks.length;i++){>
② 会员专用(控制台版,无插件兜底)
会员档案页 F12 → Console,粘贴运行 → 点「查询」→ 自动翻页下载。兜底命令:__startExport() / __finishExport()。
复制脚本下载 .js
(function(){ var ov=document.createElement('div'); ov.style.cssText='position:fixed;top:10px;right:10px;z-index:99999;background:#fff;border:2px solid #07c;padding:10px;font:12px/1.4 monospace;max-width:380px;max-height:85vh;overflow:auto;border-radius:8px;color:#000;pointer-events:none'; document.body.appendChild(ov); function L(m){ov.textContent='会员导出: '+m;} var rows=[], seen={}, cols=null, pages=0, running=false, started=false, totalCount=null; // 从任意嵌套结构里找会员数组(含姓名/手机/卡号等字段的对象数组) function isMembers(o){ if(!o) return null; var a=null; if(Array.isArray(o)) a=o; else { for(var k in o){ if(Array.isArray(o[k]) && o[k][0] && typeof o[k][0]==='object'){a=o[k];break;} if(o[k] && typeof o[k]==='object'){var s=isMembers(o[k]); if(s){a=s;break;}} } } if(!a||!a.length) return null; var ks=Object.keys(a[0]).join(',').toLowerCase(); return /phone|mobile|name|cardno|member|会员|手机号|id|卡号/.test(ks)?a:null; } function getTotal(j){ if(!j||typeof j!=='object')return null; var ks=['total','totalcount','totalCount','count','recordcount','recordCount','recordsTotal','totalrows','totalRows']; for(var i=0;i<ks.length;i++){ if="">']; var all=document.querySelectorAll('button,a,li,span,div,i'); for(var i=0;i<all.length;i++){ var="" el="all[i];" if="">'&&t.indexOf(tt)>=0)){ return el; } } } var cls=document.querySelectorAll('[class*="next"],[id*="next"]'); for(var j=0;j<cls.length;j++){ var="" e="cls[j];" if="">=totalCount){ L('已达总数,停止'); break; } if(safety>800){ L('超过安全次数,停止'); break; } var btn=findNextBtn(); if(!btn){ L('未找到“下一页”按钮。 请手动点下一页,点完后 在控制台输入 __finishExport() 下载'); running=false; return; } if(btn.disabled){ L('下一页已禁用(已到末页),停止'); break; } var beforeRows=rows.length, beforePages=pages; try{ btn.click(); }catch(e){ L('点击失败:'+e); break; } var waited=0; while(pages<=beforepages></=beforepages></cls.length;j++){></all.length;i++){></ks.length;i++){>
③ 通用版(商品/供应商/库存,控制台兜底)
商品等任意翻页列表页 F12 → Console,粘贴运行 → 点「查询」→ 自动翻页下载。自动识别列表数组,不挑字段。
复制脚本下载 .js
(function(){ var ov=document.createElement('div'); ov.style.cssText='position:fixed;top:10px;right:10px;z-index:99999;background:#fff;border:2px solid #07c;padding:10px;font:12px/1.4 monospace;max-width:380px;max-height:85vh;overflow:auto;border-radius:8px;color:#000;pointer-events:none'; document.body.appendChild(ov); function L(m){ov.textContent='导出: '+m;} var rows=[], seen={}, cols=null, pages=0, running=false, started=false, totalCount=null, targetPath=null; function findDataArray(o, best){ best=best||{arr:null,n:0}; if(!o||typeof o!=='object') return best; if(Array.isArray(o)){ if(o.length && typeof o[0]==='object' && !Array.isArray(o[0])){ var ks=Object.keys(o[0]); if(ks.length>=3 && o.length>=1 && o.length>best.n){ best={arr:o,n:o.length,cols:ks}; } } return best; } for(var k in o){ if(o[k]&&typeof o[k]==='object'){ best=findDataArray(o[k],best); } } return best; } function getTotal(j){ if(!j||typeof j!=='object')return null; var ks=['total','totalcount','totalCount','count','recordcount','recordCount','recordsTotal','totalrows','totalRows']; for(var i=0;i<ks.length;i++){ if="">']; var all=document.querySelectorAll('button,a,li,span,div,i'); for(var i=0;i<all.length;i++){ var="" el="all[i];" if="">'&&t.indexOf(tt)>=0)){ return el; } } } var cls=document.querySelectorAll('[class*="next"],[id*="next"]'); for(var j=0;j<cls.length;j++){ var="" e="cls[j];" if="">=totalCount){ L('已达总数,停止'); break; } if(safety>800){ L('超过安全次数,停止'); break; } var btn=findNextBtn(); if(!btn){ L('未找到“下一页”按钮。 请手动点下一页,点完后 在控制台输入 __finishExport() 下载'); running=false; return; } if(btn.disabled){ L('下一页已禁用(已到末页),停止'); break; } var beforeRows=rows.length, beforePages=pages; try{ btn.click(); }catch(e){ L('点击失败:'+e); break; } var waited=0; while(pages<=beforepages></=beforepages></cls.length;j++){></all.length;i++){></ks.length;i++){>
使用须知
脱敏限制:会员姓名、手机号、商品成本价等若后台返回就是星号/空(账号无权限),脚本无法还原,需总部或管理员账号才能拿到明文。
翻页逻辑:脚本自动点「下一页」并抓取,若某页识别不到按钮,提示会说明,可手动翻页后点「手动下载」。
控制台复制:从本页「复制脚本」后,粘贴到目标页面的 Console(F12)回车即可;油猴方案无需开控制台。
数据安全:导出的是你自己账号下的数据,下载后注意保存,勿外传敏感信息。