GameMale
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

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

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

  [复制链接] |关注本帖

咆哮虎的冠军之路You Can Pet Blaidd業火死鬥炙热的格拉迪欧拉斯裸体克里斯圣甲虫秘典永远的克叔【新春限定】果体 隆新神的赐福凯登‧阿兰科

     楼主| 星之子 发表于 2025-5-10 23:40:59 | 显示全部楼层 |阅读模式 <
    本帖最后由 星之子 于 2025-5-10 23:46 编辑
    动机
    上周调教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 很给力!

    查看全部评分

    回复

    使用道具 举报

    荧光水母河豚寿司发条八音盒弗雷迪玩偶竹取物语炽焰咆哮虎蜂蜂小甜心秘法之书肉乖乖永远的克叔

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

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

      使用道具 举报

      荧光水母河豚寿司『召唤好运的角笛』鎏彩万幢女巫之路虚空之海的鲸永远的克叔業火死鬥实现梦想官复原职

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

        使用道具 举报

        岛田半藏莫甘娜Scott Ryder闪耀的魔仙棒Dante约翰·康斯坦丁荣光的残像亚索『狄文卡德的残羽』夏日柯基

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

          使用道具 举报

          業火死鬥传奇河豚寿司弗雷迪玩偶桂花米糕虚空之海的鲸【圣诞限定】心心念念小雪人吃饱金币的Doge缘起星空鎏彩万幢

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

            使用道具 举报

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

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

              使用道具 举报

              收到情书炽焰咆哮虎裸体克里斯弗雷迪玩偶果体76发条八音盒猫化弩哥王者之盾自定义男从Homunculus

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

                使用道具 举报

                鎏彩万幢传奇都市:天际线2刀锋女王 - 归宿丹妮莉丝·坦格利安官复原职实现梦想丹雀衔五穗,人间始丰登Zootopia最终幻想XVI

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

                  使用道具 举报

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

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

                    使用道具 举报

                    我的天使『厢庭望远』诺克提斯·路西斯·伽拉姆雪王的心脏Futūrum(未来)『伊黎丝的赞美词』自定义男从Homunculus传奇荣光的残像刀锋女王 - 归宿

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

                      使用道具 举报

                      20x43 隐形➀未散的宴席猎户座的明珠缘起星空虚空之海的鲸16x43 隐形➁弗雷迪玩偶发条八音盒16x43 隐形➀

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

                        使用道具 举报

                        荧光水母裸体克里斯人到中年格拉迪欧拉斯明日之子【圣诞限定】心心念念小雪人黑曜石赤螯蝎虚空之海的鲸网中的皮卡丘守卫: 坚守眼位

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

                          使用道具 举报

                          桂花米糕『落樱缤纷』章鱼小丸子You Can Pet Blaidd亭亭如盖竹取物语守卫: 坚守眼位不朽之恋审判终至和谐圣杯

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

                            使用道具 举报

                            40x43 隐形➀寻求恋爱是我的自由黑暗之魂系列

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

                              使用道具 举报

                              诺曼底号『冰雕马拉橇』『流星赶月』信仰之心『不败之花』『伊黎丝的赞美词』不朽之恋

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

                                使用道具 举报

                                缘起星空虚空之海的鲸

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

                                  使用道具 举报

                                  发条八音盒弗雷迪玩偶龙腾世纪:审判赛博朋克2077竹取物语冒险用指南针苏格兰圆脸胖鸡[Pro Max]重磅手环

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

                                    使用道具 举报

                                    【新春限定】果体 隆里昂‧S‧甘乃迪Futūrum(未来)检定场诺克提斯·路西斯·伽拉姆未来的黎明普隆普特·阿金塔姆卡洛斯·奥利维拉仇恋虚空之海的鲸

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

                                      使用道具 举报

                                      永远的克叔寄宿法老王灵魂的容器极·龙の意官复原职实现梦想業火死鬥传奇虚空之海的鲸不朽之恋

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

                                        使用道具 举报

                                        虚空之海的鲸明日之子卡洛斯·奥利维拉永远的克叔索林·临终一役被释放的灵魂Doc十字叶章安德森‧戴维斯

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

                                          使用道具 举报

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

                                          本版积分规则

                                          关闭

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

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

                                          GMT+8, 2025-12-14 03:35 , Processed in 0.155409 second(s), 144 queries , Redis On.

                                          Copyright © 2013-2025 GameMale

                                          All Rights Reserved.

                                          快速回复 返回列表