星之子 发表于 2025-5-2 21:59:02

【油猴脚本】二手市场寄售情况统计

本帖最后由 星之子 于 2025-5-12 00:21 编辑

动机
每次补货过后的二手市场总是让人眼花缭乱。各种各样的勋章堆在一起,快来快来数一数,24678。
那么有没有一种方法可以直观地看出各种勋章各寄售了几个?有的兄弟,有的。
同样是调教DeepSeek写的,简单粗暴、方便快捷,不必再和GPT一样折腾全局模式、特定节点、科学上网,使用体验爽歪歪。

功能
排序逻辑:优先按照数量,从高到低排列。如果数量相同,则按照出现在市场中的先后顺序排列。
外观设计:沿用已有格式,宽度字体颜色等均相同,以确保设计语言的统一。上方统计结果可以可以和下方勋章一一对齐。


代码
@Name@Match@Icon
// ==UserScript==
// @name         二手市场寄售情况统计
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description统计二手市场同类勋章数量(修复版)
// @author       Étoiles & DeepSeek
// @match      https://www.gamemale.com/wodexunzhang-showxunzhang.html?action=showjishou
// @icon         https://www.google.com/s2/favicons?sz=64&domain=gamemale.com
// @grant      GM_log
// ==/UserScript==

(function () {
    'use strict';

    // 调试日志函数
    function debugLog(message) {
      if (typeof GM_log !== 'undefined') {
            GM_log(message);
      }
      console.log('[勋章统计]', message);
    }

    // 新版元素查找函数
    function findMarketTitle() {
      const titles = document.querySelectorAll('.my_biaoti');
      for (let title of titles) {
            if (title.textContent.includes('二手市场')) {
                debugLog('找到标题元素');
                return title;
            }
      }
      debugLog('未找到标题元素');
      return null;
    }

    // 主执行函数
    function main() {
      const titleDiv = findMarketTitle();
      if (!titleDiv) {
            debugLog('中止:未找到标题元素');
            return;
      }

      // 创建统计容器
      const statsDiv = document.createElement('div');
      statsDiv.id = 'medal-stats-box';
      statsDiv.style.cssText = `
            padding: 5px 0px 10px 0px;
            background: #f5f5f5;
            border: 0px solid #ddd;
            margin: 0;
            color: #666;
            font-size: 14px;
      `;

      // 修改后的统计逻辑(记录图片路径)
      const medals = {};
      const blocks = document.querySelectorAll('.myblok');
      debugLog(`找到 ${blocks.length} 个勋章区块`);

      blocks.forEach((blok, index) => {
            const img = blok.querySelector('.myimg img');
            if (!img) {
                debugLog(`区块 ${index} 缺少图片元素`);
                return;
            }
            const name = img.alt.trim();
            const src = img.src; // 新增:获取图片路径
            if (!name) {
                debugLog(`区块 ${index} 图片alt为空`);
                return;
            }

            // 记录图片路径和数量
            if (!medals) {
                medals = {
                  count: 1,
                  src: src
                };
            } else {
                medals.count++;
            }
      });

      // 修改后的统计内容生成部分
      statsDiv.innerHTML = `
            <div style="font-size:16px; margin:5px 19px; font-weight:bold">寄售统计(共 ${blocks.length} 个)</div>
            <div class="myfldiv clearfix">
                ${Object.entries(medals)
                        .sort((a, b) => b.count - a.count)
                        .map(() => `
                  <div class="myblok" style="width:145px;height:120px;">
                        <div class="myimg" style="font-size:12px;color:#383a42">
                            <img src="${data.src}"
                              alt="${name}"
                              style="${getOriginalImgStyle()}"> <!-- 保持原始图片样式 -->
                            <p title="${name}"><b>${shortenName(name)}</b></p>
                            <p>
                              <button type="button" class="pn"
                                        style="cursor:default; background:#e5e5e5">
                                    <em>${data.count}</em>
                              </button>
                            </p>
                        </div>
                        <!-- 保留悬浮提示容器保持结构一致 -->
                        <div class="mytip" style="display:none"></div>
                  </div>
                  `).join('')}
            </div>
      `;

      // 获取原始图片样式函数
      function getOriginalImgStyle() {
            const sampleImg = document.querySelector('.myblok .myimg img');
            return sampleImg ? sampleImg.getAttribute('style') || '' : '';
      }

      // 名称截断函数(保持原始处理逻辑)
      function shortenName(name) {
            return name.length > 14 ? name.substring(0, 12) + "..." : name;
      }

      // 插入元素
      titleDiv.insertAdjacentElement('afterend', statsDiv);
      debugLog('统计信息已插入');
    }

    // 启动方式:先尝试立即执行,然后每500ms检查一次,最多检查5次
    let checkCount = 0;
    function checkAndRun() {
      if (checkCount++ > 5) {
            debugLog('超过最大重试次数');
            return;
      }

      if (document.querySelector('.my_biaoti')) {
            main();
      } else {
            setTimeout(checkAndRun, 500);
      }
    }

    // 使用DOMContentLoaded替代load事件
    if (document.readyState === 'loading') {
      document.addEventListener('DOMContentLoaded', checkAndRun);
    } else {
      checkAndRun();
    }
})();


星象占卜

克莱因蓝 发表于 2025-5-2 22:02:44

很实用惹 这样二手市场就简洁多了惹

诺鸦cc 发表于 2025-5-2 22:05:03

居然这么简洁,AI写这种代码真的好方便啊.jpg
狗狗居然剩的这么多,看来大家都是喜欢金币的)

原炀小狼狗 发表于 2025-5-2 22:05:08

虽然是使用DeepSeek来写,但是大佬你专业的让我害怕,这个功能确实可以让对勋章研究不深的玩家有个大致判断和感受

泥潭蘑菇 发表于 2025-5-2 22:13:46

我趣,好实用的脚本,这下再也不用担心眼花缭乱的二手市场了{:6_179:}

秘技小浣 发表于 2025-5-2 22:14:34

瑪雅好棒!! 這樣就不用怕自己漏看惹 天才

柏芸 发表于 2025-5-2 22:16:47

好棒的脚本,这下就不担心因为滑动错过心仪的勋章了,赞美星老师https://img.gamemale.com/album/202504/28/142855fjfwg73v7gfg4dwj.jpg.thumb.jpg

momohang 发表于 2025-5-2 22:17:33

这个很棒! 再也不用被一堆抛售的洗版了,还能顺便寻宝,只好推了

唉缘来熙 发表于 2025-5-2 22:18:32

这次二手全是连枷和狗狗,太惨了

KurisuV 发表于 2025-5-2 22:18:41

高技术力的帖子,太赞了,感谢楼主分享!这个对萌新帮助真的很大,可以大致对勋章有个客观的判断,也不会被繁杂的二手市场看的眼花缭乱{:6_180:}

归北溟 发表于 2025-5-2 22:21:00

挺有用的。为啥大家都这么不待见连枷?虽然属性不行但是它是阿努比斯啊(你是真的饿了)

娱乐法师火布偶 发表于 2025-5-2 22:21:09

喜欢逛二手的人可以用一下

不在彩虹脚下 发表于 2025-5-2 22:21:20

妙妙小工具又增加了ing,越来越方便了

QLL 发表于 2025-5-2 22:23:13

好多狗狗在二手啊。看样子大家都更加喜欢金币叻。还有好多阿加莎和弯钩{:4_114:}

掠影狼现 发表于 2025-5-2 22:25:05

哇哦,deepseek还可以直接写这种能实用的代码呀{:4_114:}

Riverlethe 发表于 2025-5-2 22:25:55

这次补货两级分化好大,好的香的不得了,不好的被疯狂嫌弃呢。。。

Kaicneg 发表于 2025-5-2 22:28:34

这也太方便了,刷新的时候一眼就可以看完{:6_194:}

歧路歌 发表于 2025-5-2 22:36:25

物以稀为贵,有这个可以盯着少量的好东西下手了;P

mintea 发表于 2025-5-2 22:37:45

好实用的工具,可以更方便掌握二手市场动态了

深暗幽狼 发表于 2025-5-2 22:39:58

本帖最后由 深暗幽狼 于 2025-5-4 12:52 编辑

换到前年还没放开回收时,那二手已经是很长的页面了。那么这次蝉联二手新上架的勋章会是狗、连枷还是女巫呢(
所以说什么游戏mod论坛嘛,全都是btsrk,猫和狗首发80枚,全都被买断货了(
页: [1] 2 3 4
查看完整版本: 【油猴脚本】二手市场寄售情况统计