【油猴脚本】二手市场寄售情况统计(兼容博物馆传送门)
本帖最后由 星之子 于 2025-5-10 23:46 编辑动机
上周调教DeepSeek写了一个二手市场勋章数量统计的脚本【油猴脚本】二手市场寄售情况统计。而后在使用过程中,我发现这个脚本似乎和博物馆传送门不兼容,会使其失效:二手市场块内的勋章图片、下方记录中的勋章名称文字,均无法点击跳转。
于是编写了这么一个新版本来优化兼容性。现在除了修复上面提到的两点,统计结果块内的勋章图片也能跳转了。
功能
排序逻辑:优先按照数量,从高到低排列。如果数量相同,则按照出现在市场中的先后顺序排列。
外观设计:沿用已有格式,宽度字体颜色等均相同,以确保设计语言的统一。上方统计结果可以可以和下方勋章一一对齐。
兼容性:新版本保持了DOM结构一致性,而博物馆传送门的modifyHref()函数依赖这个结构来查找并替换链接。这使得统计结果块也能被识别并添加跳转链接。
代码
@Name@Match@Icon
// ==UserScript==
// @name 勋章:二手市场寄售情况统计
// @namespace http://tampermonkey.net/
// @version 0.2
// @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: 0px 0px 10px 0px;
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++;
}
});
// 修改后的统计内容生成部分 保持DOM结构一致性以兼容博物馆
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">
<a href="javascript:void(0);">
<img src="${data.src}"
alt="${name}"
style="${getOriginalImgStyle()}">
</a>
<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();
}
})();
星象占卜 感谢星大佬分享优化太棒惹~之前版本二手市场上面不能连原来是不相容~
更新后上面的也可以直连方便很多呢~{:6_200:}{:6_200:}{:6_200:} 优化以后确实更有好的兼容性了 感谢分享,之后在二手市场找勋章更方便了 怪不得之前勋章博物馆不能用了,更新后相比之前来说确实要更方便了呢,赞https://img.gamemale.com/album/202404/14/192135uh93px1t3hgp7pgx.gif 感謝分享
現在看二手市場不用這麼麻煩了 可以可以,星佬玩勋章真的太牛了,各种高科技手段都用上了,严谨! 现在使用的脚本越来越多了,脚本之间的兼容性也是需要考量的内容了 吼(´×ω×`)看着是修复bug版本吧~
喝茶ing好勋章一般都露头就没了吧,还是得熟悉一些稀有勋章的 能兼容传送门真是太好了,之前还以为是自己电脑的问题呢 勋章越积累越多的时候想要的好东西很难在二手露面。 感謝大老持續更新腳本,
程式衝突真的是很麻煩./w\ 本人完全不懂代码什么的,只能说大佬nb 二手情况查询x
赔钱货一览 ✓ 挺好的,可以为不熟悉的萌新快速找到勋章属性 兼容确实挺重要的,不过其实现在二手已经很难买到好东西了 ds写脚本还是有一手的~ 每每留意二手勋章还是太麻烦了, 这个倒是可以解决一部分问题~ 感谢楼主优化脚本
二手勋章能买的合适的还蛮难的)这个很好用~ 能够兼容真的是太好了XD,方便筛选好东西和赔钱货,是很大的功能提升呢~~
感谢星佬的分享~~ 感谢楼主技术分享惹,能兼容传送门就很方便了,可以帮助萌新快速熟悉勋章
页:
[1]
2