市场价格采集与管理工具(可缩放窗口,表头固定,倒计时采集防刷,表格自适应,商品可自定义添加删除,移动端优化)
< Feedback on MilkywayIdle 市场价格助手(自定义商品+可缩放+删除+移动端优化)
因无法识别装备以及工具,以及无法连续获取市场数据,做了如下修改 修改以下脚本片段
// 跳转到市场商品
function jumpToMarketItemWithCategory(itemName, callback) {
let timeout = 0;
const category = getMarketCategory(itemName);
const tabBtn = Array.from(document.querySelectorAll('.MuiTabs-flexContainer [role="tab"]'))
.find(el => el.textContent.trim().startsWith(category));
if (!tabBtn) {
showToast('未找到市场分类按钮: ' + category, 2500);
if (callback) callback(false);
return;
}
if (tabBtn.getAttribute("aria-selected") !== "true") {
tabBtn.click();
timeout += 500;
}
setTimeout(() => {
const marketList = document.querySelector('[class^="MarketplacePanel_itemSelectionTabsContainer__"]');
let svgs = [];
if (marketList) {
svgs = Array.from(marketList.querySelectorAll('svg[aria-label]'));
}
let svg = svgs.find(el => el.getAttribute('aria-label').trim() === itemName.trim());
if (!svg) {
svg = svgs.find(el => el.getAttribute('aria-label').includes(itemName));
}
if (svg) {
const clickable = svg.closest('.Item_item__2De2O');
if (clickable) {
clickable.scrollIntoView({behavior: "smooth", block: "center"});
clickable.click();
if(category == '装备' || category == '工具')
{
setTimeout(() => {
const gradeUpList = document.querySelector('[class^="MarketplacePanel_itemSummaryTableContainer__"]');
let btns = Array.from(gradeUpList.querySelectorAll('button'));
let seeAllBtn = btns.find(el => el.textContent.trim() === '查看全部');
seeAllBtn.click();
callback && callback(true);
}, 500);
}
else
{
callback && callback(true);
}
return;
}
}
showToast('未找到该商品,请确认名称和分类!', 2000);
if (callback) callback(false);
}, timeout);
}
添加
function oneKey() {
let totalTimeout = 0;
let tempObjs = document.querySelectorAll('.mw_market_helper_link');
let index = 0;
let getData = ()=>{
if(!tempObjs[index])
{
showToast('一键结束',1800);
return;
}
if(!clickLock)
{
tempObjs[index].onclick();
index++;
}
setTimeout(() => {
getData();
}, 500);
}
getData();
}
function deepClone(obj, hash = new WeakMap()) {
if (obj === null) return null;
if (obj instanceof Date) return new Date(obj);
if (obj instanceof RegExp) return new RegExp(obj);
if (typeof obj !== "object") return obj;
if (hash.has(obj)) return hash.get(obj); // 处理循环引用
const clone = Array.isArray(obj) ? [] : {};
hash.set(obj, clone); // 存储原始对象和克隆对象的映射关系
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
clone[key] = deepClone(obj[key], hash);
}
}
return clone;
}
document.getElementById('mw_market_helper_onKey').onclick = oneKey;
因无法识别装备以及工具,以及无法连续获取市场数据,做了如下修改
修改以下脚本片段
// 跳转到市场商品
function jumpToMarketItemWithCategory(itemName, callback) {
let timeout = 0;
const category = getMarketCategory(itemName);
const tabBtn = Array.from(document.querySelectorAll('.MuiTabs-flexContainer [role="tab"]'))
.find(el => el.textContent.trim().startsWith(category));
if (!tabBtn) {
showToast('未找到市场分类按钮: ' + category, 2500);
if (callback) callback(false);
return;
}
if (tabBtn.getAttribute("aria-selected") !== "true") {
tabBtn.click();
timeout += 500;
}
setTimeout(() => {
const marketList = document.querySelector('[class^="MarketplacePanel_itemSelectionTabsContainer__"]');
let svgs = [];
if (marketList) {
svgs = Array.from(marketList.querySelectorAll('svg[aria-label]'));
}
let svg = svgs.find(el => el.getAttribute('aria-label').trim() === itemName.trim());
if (!svg) {
svg = svgs.find(el => el.getAttribute('aria-label').includes(itemName));
}
if (svg) {
const clickable = svg.closest('.Item_item__2De2O');
if (clickable) {
clickable.scrollIntoView({behavior: "smooth", block: "center"});
clickable.click();
if(category == '装备' || category == '工具')
{
setTimeout(() => {
const gradeUpList = document.querySelector('[class^="MarketplacePanel_itemSummaryTableContainer__"]');
let btns = Array.from(gradeUpList.querySelectorAll('button'));
let seeAllBtn = btns.find(el => el.textContent.trim() === '查看全部');
seeAllBtn.click();
callback && callback(true);
}, 500);
}
else
{
callback && callback(true);
}
return;
}
}
showToast('未找到该商品,请确认名称和分类!', 2000);
if (callback) callback(false);
}, timeout);
}
添加
function oneKey() {
let totalTimeout = 0;
let tempObjs = document.querySelectorAll('.mw_market_helper_link');
let index = 0;
let getData = ()=>{
if(!tempObjs[index])
{
showToast('一键结束',1800);
return;
}
if(!clickLock)
{
tempObjs[index].onclick();
index++;
}
setTimeout(() => {
getData();
}, 500);
}
getData();
}
function deepClone(obj, hash = new WeakMap()) {
if (obj === null) return null;
if (obj instanceof Date) return new Date(obj);
if (obj instanceof RegExp) return new RegExp(obj);
if (typeof obj !== "object") return obj;
if (hash.has(obj)) return hash.get(obj); // 处理循环引用
const clone = Array.isArray(obj) ? [] : {};
hash.set(obj, clone); // 存储原始对象和克隆对象的映射关系
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
clone[key] = deepClone(obj[key], hash);
}
}
return clone;
}
document.getElementById('mw_market_helper_onKey').onclick = oneKey;