GameMale
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

查看: 2833|回复: 30
收起左侧

[功能优化] 【油猴脚本】二手市场寄售情况统计(兼容博物馆传送门)

  [复制链接] |关注本帖

永远的克叔裸体克里斯圣金魔典『随时随地开启!』死灵之书『随时随地开启!』圣甲虫秘典【新春限定】果体 隆新神的赐福凯登‧阿兰科

     楼主| 星之子 发表于 2025-5-10 23:40:59 | 显示全部楼层 |阅读模式 <

    动机
    上周调教DeepSeek写了一个二手市场勋章数量统计的脚本【油猴脚本】二手市场寄售情况统计。而后在使用过程中,我发现这个脚本似乎和博物馆传送门不兼容,会使其失效:二手市场块内的勋章图片、下方记录中的勋章名称文字,均无法点击跳转。
    于是编写了这么一个新版本来优化兼容性。现在除了修复上面提到的两点,统计结果块内的勋章图片也能跳转了。

    功能

    排序逻辑:优先按照数量,从高到低排列。如果数量相同,则按照出现在市场中的先后顺序排列。
    外观设计:沿用已有格式,宽度字体颜色等均相同,以确保设计语言的统一。上方统计结果可以可以和下方勋章一一对齐。
    兼容性:新版本保持了DOM结构一致性,而博物馆传送门的modifyHref()函数依赖这个结构来查找并替换链接。这使得统计结果块也能被识别并添加跳转链接。

    代码

    @Name  @Match  @Icon
    1. // ==UserScript==
    2. // @name         勋章:二手市场寄售情况统计
    3. // @namespace    http://tampermonkey.net/
    4. // @version      0.2
    5. // @description  统计二手市场同类勋章数量(与博物馆兼容)
    6. // @author       Étoiles & DeepSeek
    7. // @match        https://www.gamemale.com/wodexunzhang-showxunzhang.html?action=showjishou
    8. // @icon         https://www.google.com/s2/favicons?sz=64&domain=gamemale.com
    9. // @grant        GM_log
    10. // ==/UserScript==

    11. (function () {
    12.     'use strict';

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

    20.     // 新版元素查找函数
    21.     function findMarketTitle() {
    22.         const titles = document.querySelectorAll('.my_biaoti');
    23.         for (let title of titles) {
    24.             if (title.textContent.includes('二手市场')) {
    25.                 debugLog('找到标题元素');
    26.                 return title;
    27.             }
    28.         }
    29.         debugLog('未找到标题元素');
    30.         return null;
    31.     }

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

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

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

    54.         blocks.forEach((blok, index) => {
    55.             const img = blok.querySelector('.myimg img');
    56.             if (!img) {
    57.                 debugLog(`区块 ${index} 缺少图片元素`);
    58.                 return;
    59.             }
    60.             const name = img.alt.trim();
    61.             const src = img.src; // 新增:获取图片路径
    62.             if (!name) {
    63.                 debugLog(`区块 ${index} 图片alt为空`);
    64.                 return;
    65.             }

    66.             // 记录图片路径和数量
    67.             if (!medals[name]) {
    68.                 medals[name] = {
    69.                     count: 1,
    70.                     src: src
    71.                 };
    72.             } else {
    73.                 medals[name].count++;
    74.             }
    75.         });

    76.         // 修改后的统计内容生成部分 保持DOM结构一致性以兼容博物馆
    77.         statsDiv.innerHTML = `
    78.             <div style="font-size:16px; margin:5px 19px; font-weight:bold">当前 / ${blocks.length} </div>
    79.             <div class="myfldiv clearfix">
    80.                 ${Object.entries(medals)
    81.                         .sort((a, b) => b[1].count - a[1].count)
    82.                         .map(([name, data]) => `
    83.                     <div class="myblok" style="width:145px;height:120px;">
    84.                         <div class="myimg" style="font-size:12px;color:#383a42">
    85.                             <a href="javascript:void(0);">
    86.                                 <img src="${data.src}"
    87.                                     alt="${name}"
    88.                                     style="${getOriginalImgStyle()}">
    89.                             </a>
    90.                             <p title="${name}"><b>${shortenName(name)}</b></p>
    91.                             <p>
    92.                                 <button type="button" class="pn"
    93.                                         style="cursor:default; background:#e5e5e5">
    94.                                     <em>${data.count}</em>
    95.                                 </button>
    96.                             </p>
    97.                         </div>
    98.                         <div class="mytip" style="display:none"></div>
    99.                     </div>
    100.                     `).join('')}
    101.             </div>
    102.         `;

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

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

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

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

    123.         if (document.querySelector('.my_biaoti')) {
    124.             main();
    125.         } else {
    126.             setTimeout(checkAndRun, 500);
    127.         }
    128.     }

    129.     // 使用DOMContentLoaded替代load事件
    130.     if (document.readyState === 'loading') {
    131.         document.addEventListener('DOMContentLoaded', checkAndRun);
    132.     } else {
    133.         checkAndRun();
    134.     }
    135. })();
    复制代码



    来自群组: 星象占卜

    评分

    参与人数 6血液 +14 追随 +6 堕落 +4 收起 理由
    2297988 + 3 + 1 + 1 很给力!
    叶雨时 + 3 + 1 + 1 赞一个!
    相见忧 + 2 + 1 赞一个!
    cinder + 5 + 1 + 1
    油漆王 + 1
    zibatco2 + 1 + 1 + 1 很给力!

    查看全部评分

    回复

    使用道具 举报

    火玛瑙福卡·曙红[3]福卡·澄黄[9]福卡·锰紫[7]帅气的本・比格Amicus羽环鳐可鲁贝洛斯【新春限定】果体 隆弗雷迪玩偶

      zibatco2 发表于 2025-5-10 23:50:18 | 显示全部楼层 <
      感谢星大佬分享优化太棒惹~之前版本二手市场上面不能连原来是不相容~

      更新后上面的也可以直连方便很多呢~
      回复

      使用道具 举报

      福卡·曙红[4]火玛瑙福卡·锰紫[7]鎏彩万幢男巫之歌女巫之路虚空之海的鲸業火死鬥实现梦想官复原职

        娱乐法师火布偶 发表于 2025-5-10 23:52:45 | 显示全部楼层 <
        回复

        使用道具 举报

        守护者三角头轻语魔法迸发风雪之家堕落之舞钢铁勇士弯刀马上發福卡·锰紫[9]福卡·澄黄[6]福卡·曙红[3]

          rayyyyy 发表于 2025-5-11 00:09:26 | 显示全部楼层 <
          回复

          使用道具 举报

          灵光补脑剂『 ???』業火死鬥传奇无尽的怀表枫叶的站台史莱姆牧场虚空之海的鲸竹取物语月下的誓言

            柏芸 发表于 2025-5-11 00:16:28 | 显示全部楼层 <
            回复

            使用道具 举报

            传说中的黑龙呆猫森林羊男鎏彩万幢驯化红龙幼崽驯化黑龙幼崽不为人知的小秘密十字叶章

              ilovepizza 发表于 2025-5-11 00:26:47 | 显示全部楼层 <
              回复

              使用道具 举报

              火玛瑙福卡·曙红[2]福卡·澄黄[0]福卡·锰紫[7]杰森‧斯坦森炽焰咆哮虎雷夜嘯聲高桥剑痴『炫目的铁塔』救命饮料

                油漆王 发表于 2025-5-11 00:47:57 | 显示全部楼层 <
                回复

                使用道具 举报

                火玛瑙福卡·曙红[0]福卡·澄黄[7]福卡·锰紫[5]鎏彩万幢传奇都市:天际线2刀锋女王 - 归宿丹妮莉丝·坦格利安官复原职

                  娱乐伙伴琴键猴 发表于 2025-5-11 00:54:15 | 显示全部楼层 <
                  回复

                  使用道具 举报

                  『 ???』我的天使GM吸血伯爵吃饱金币的Doge苏格兰圆脸胖鸡小小舞台守卫: 坚守眼位永浴爱河肉垫手套御医神兔

                    毛茸茸兽兽 发表于 2025-5-11 00:54:27 | 显示全部楼层 <
                    吼(´×ω×`)看着是修复bug版本吧~
                    喝茶ing好勋章一般都露头就没了吧,还是得熟悉一些稀有勋章的
                    回复

                    使用道具 举报

                    福卡·曙红[1]福卡·澄黄[1]福卡·锰紫[1]Amicus『厢庭望远』『天圆地方』我的天使雪王的心脏Futūrum(未来)『凯旋诺书』

                      ComParo 发表于 2025-5-11 00:55:22 | 显示全部楼层 <
                      回复

                      使用道具 举报

                      不朽之恋缘起星空虚空之海的鲸

                        Riverlethe 发表于 2025-5-11 00:57:13 | 显示全部楼层 <
                        回复

                        使用道具 举报

                        『 ???』火玛瑙男巫之歌【新春限定】果体 隆成为蝙蝠侠小镇的站台马上發永远的克叔裸体克里斯【圣诞限定】心心念念小雪人

                          cinder 发表于 2025-5-11 01:25:45 | 显示全部楼层 <
                          回复

                          使用道具 举报

                          男巫之歌『落樱缤纷』枫叶的站台福卡·曙红[3]福卡·澄黄[2]福卡·锰紫[5]永冻土北极星棱霜靴You Can Pet Blaidd

                            要有礼帽 发表于 2025-5-11 01:54:18 | 显示全部楼层 <
                            回复

                            使用道具 举报

                            寻求恋爱是我的自由黑暗之魂系列艾尔登法环40x43 隐形➀福卡·曙红[2]福卡·澄黄[3]福卡·锰紫[6]

                              Kogenta 发表于 2025-5-11 01:54:57 | 显示全部楼层 <
                              回复

                              使用道具 举报

                              福卡·曙红[4]福卡·澄黄[0]福卡·锰紫[8]诺曼底号『冰雕马拉橇』禁断秘典『伊黎丝的赞美词』『不败之花』余烬不朽之恋

                                相见忧 发表于 2025-5-11 03:32:56 | 显示全部楼层 <
                                回复

                                使用道具 举报

                                缘起星空

                                  you9632587 发表于 2025-5-11 07:22:34 | 显示全部楼层 <
                                  回复

                                  使用道具 举报

                                  福卡·曙红[2]福卡·澄黄[6]福卡·锰紫[3]【新春限定】果体 隆里昂‧S‧甘乃迪男用贞操带苏格兰圆脸胖鸡[Pro Max]人鱼之泪冒险用指南针

                                    lishan 发表于 2025-5-11 09:16:25 | 显示全部楼层 <
                                    ds写脚本还是有一手的~ 每每留意二手勋章还是太麻烦了, 这个倒是可以解决一部分问题~
                                    回复

                                    使用道具 举报

                                    狮醒山河超人仇恋虚空之海的鲸史莱姆牧场不朽之恋男巫之歌丹雀衔五穗,人间始丰登自定义男从Homunculus鎏彩万幢

                                      诺鸦cc 发表于 2025-5-11 12:55:41 | 显示全部楼层 <
                                      回复

                                      使用道具 举报

                                      永远的克叔极·龙の意新神的赐福官复原职实现梦想男巫之歌传奇業火死鬥虚空之海的鲸不朽之恋

                                        2297988 发表于 2025-5-11 15:44:33 | 显示全部楼层 <
                                        能够兼容真的是太好了XD,方便筛选好东西和赔钱货,是很大的功能提升呢~~
                                        感谢星佬的分享~~
                                        回复

                                        使用道具 举报

                                        福卡·曙红[2]福卡·澄黄[7]福卡·锰紫[8]虚空之海的鲸明日之子卡洛斯·奥利维拉永远的克叔索林·临终一役被释放的灵魂隐秘的讯息

                                          KurisuV 发表于 2025-5-11 17:41:02 | 显示全部楼层 <
                                          回复

                                          使用道具 举报

                                          您需要登录后才可以回帖 登录 | 立即注册

                                          本版积分规则

                                          关闭

                                          站长公告上一条 /2 下一条

                                          文字版|手机版|小黑屋|GameMale

                                          GMT+8, 2026-3-2 18:55 , Processed in 0.239574 second(s), 147 queries , Redis On.

                                          Copyright © 2013-2026 GameMale

                                          All Rights Reserved.

                                          快速回复 返回列表