您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
このスクリプトは、https://www.pokemon-card.com/ の 'デッキ表示' の右下隅に、ptcg-simで使用可能なcsv形式のデッキファイルをエクスポートするためのボタンを追加します
// ==UserScript== // @name ptcg-sim-JP Exporter // @version 1.0 // @description このスクリプトは、https://www.pokemon-card.com/ の 'デッキ表示' の右下隅に、ptcg-simで使用可能なcsv形式のデッキファイルをエクスポートするためのボタンを追加します // @author akatsukikyoko // @match https://www.pokemon-card.com/deck/confirm.html/deckID/* // @match https://www.pokemon-card.com/deck/result.html/deckID/* // @grant none // @license MIT // @namespace https://greasyfork.org/users/1249114 // ==/UserScript== // 添加一个按钮到页面上 var button = document.createElement('button'); button.textContent = 'エクスポート'; 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() { //获取卡名形成列表,计算各种卡片的数量以便确定卡片类型 var cardNameGroup=[]; var countPokemon=0; var countTrainer=0; var countEnergy=0; var typeTipGroup= document.querySelectorAll('[colspan="2"]'); //console.log(typeTipGroup); typeTipGroup.forEach(function(typeTipElement) { let typeOriginalText=typeTipElement.innerText;//获取分类文本 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); } }); console.log(countPokemon,countTrainer,countEnergy); var cardNameList= document.querySelectorAll('[id*="cardName_"]'); cardNameList.forEach(function(cardNameElement) { var thisCardName=cardNameElement.textContent; cardNameGroup.push(thisCardName); }); console.log(cardNameGroup); //获取卡片图片,并合并刚才获取的卡名,同时确定卡片的type let i=0; let typeCounter=0; var card= document.querySelectorAll('[colspan="1"]'); var cardCounter=document.querySelectorAll('.cPos.nowrap'); var data = []; data.push({qty: "QTY", name:"NAME",type:"TYPE", cardurl: "URL"}); card.forEach(function(liElement) { var cardSrc = 'https://www.pokemon-card.com/'+liElement.querySelector('.thumbsImage').getAttribute('src'); console.log(cardSrc); var cardCount=cardCounter[i].querySelector('span').textContent.replace('枚',''); console.log(cardSrc,cardCount); 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(); // 触发下载操作 }