您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
导出繁中官网构筑器牌组为PTCG-SIM格式
// ==UserScript== // @name PTCG繁中官网构筑器导出PTCG-SIM-CSV格式 // @version 1.2 // @description 导出繁中官网构筑器牌组为PTCG-SIM格式 // @author akatsukikyoko // @match https://asia.pokemon-card.com/tw/deck-build/recipe/* // @match https://asia.pokemon-card.com/hk/deck-build/recipe/* // @match https://asia.pokemon-card.com/sg/deck-build/recipe/* // @grant none // @license MIT // @namespace https://greasyfork.org/users/1249114 // ==/UserScript== // 添加一个按钮到页面上 var button = document.createElement('button'); button.textContent = '導出PTCG-SIM制式'; button.style.position = 'fixed'; button.style.bottom = '150px'; button.style.right = '100px'; button.style.fontSize = '15px'; // 放大字体 button.style.borderRadius = '10px'; // 添加圆角 button.style.opacity = '0.5'; // 添加半透明效果 button.style.transform = 'scale(2)'; // 放大300% button.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.5)'; // 添加阴影效果 button.type = 'button'; button.style.border = 'none'; // 去除边框 document.body.appendChild(button); //按钮点击效果 button.addEventListener('click', function() { //弹窗提醒 alert("如果图片还在加载,导出的卡组可能不全"); //获取卡名形成列表,计算各种卡片的数量以便确定卡片类型 var cardNameGroup=[]; var countPokemon=0; var countTrainer=0; var countEnergy=0; var typeTipGroup= document.querySelector('.textList').querySelectorAll('h3'); typeTipGroup.forEach(function(typeTipElement) { let typeOriginalText=typeTipElement.textContent;//获取分类文本 let matchText=typeOriginalText.match(/\((.*?)\)/);//提取分类中括号里的文字 if(typeOriginalText.includes("寶可夢卡") || typeOriginalText.includes("Pokémon(")){ countPokemon=countPokemon+parseInt(matchText[1], 10); }else if(typeOriginalText.includes("能量")||typeOriginalText.includes("Energy")){ countEnergy=countEnergy+parseInt(matchText[1], 10); }else{ countTrainer=countTrainer+parseInt(matchText[1], 10); } }); var cardNameList= document.querySelector('.textList').querySelectorAll('.card'); cardNameList.forEach(function(cardNameElement) { var thisCardName=cardNameElement.querySelector('.cardName').textContent; cardNameGroup.push(thisCardName); }); //获取卡片图片,并合并刚才获取的卡名,同时确定卡片的type let i=0; let typeCounter=0; var card= document.querySelector('.graphicList').querySelectorAll('.card'); var data = []; data.push({qty: "QTY", name:"NAME",type:"TYPE", cardurl: "URL"}); card.forEach(function(liElement) { var cardSrc = liElement.querySelector('.lazy').getAttribute('src'); var cardCount=liElement.querySelector('.count').textContent; var cardName=cardNameGroup[i]; var cardType="Pokémon"; if(typeCounter>=countPokemon) cardType="Trainer"; if(typeCounter>=countPokemon+countTrainer) cardType="Energy"; data.push({qty: cardCount, name: cardName,type:cardType, cardurl:cardSrc}); typeCounter=typeCounter+parseInt(cardCount,10); i=i+1; }); //data.push({src: src, count: count, cardName: cardName} exportToCSV(data, 'decklist'); // 导出数据为CSV文件 }); // 导出数据为CSV文件的函数 function exportToCSV(data, filename) { var csv = data.map(function(row) { return row.qty + ',' + row.name + ',' + row.type+ ',' + row.cardurl; // 使用逗号作为分隔符 }).join('\n'); // 每一行数据之间用换行符分隔 var blob = new Blob([csv], {type: "text/csv;charset=utf-8"}); var link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.download = filename + '.csv'; // 设置下载的文件名 link.click(); // 触发下载操作 }