MilkywayIdle 市场价格助手(自定义商品+可缩放+删除+移动端优化)

市场价格采集与管理工具(可缩放窗口,表头固定,倒计时采集防刷,表格自适应,商品可自定义添加删除,移动端优化)

< Feedback on MilkywayIdle 市场价格助手(自定义商品+可缩放+删除+移动端优化)

Review: Good - script works

§
Posted: 9.7.2025

因无法识别装备以及工具,以及无法连续获取市场数据,做了如下修改
修改以下脚本片段

// 跳转到市场商品
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;

§
Posted: 9.7.2025

因无法识别装备以及工具,以及无法连续获取市场数据,做了如下修改 修改以下脚本片段

// 跳转到市场商品
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;

Post reply

Sign in to post a reply.

长期地址
遇到问题?请前往 GitHub 提 Issues。