在本次系列更新中,我们的主要目标是提升脚本在处理动态加载和用户交互时的稳定性与准确性,特别关注了“加载更多”按钮的识别和钓饵数据的实时同步。
核心改进点概览:
引入异步操作的等待机制:
- 问题:初始版本可能在页面内容完全加载前就开始查找元素,导致找不到表格或按钮。特别是“加载更多”按钮,在数据异步加载完成后才刷新出来。
- 解决方案:全面引入了异步等待机制。通过
waitForElement 函数,脚本现在会耐心等待目标 DOM 元素(如主记录表格 tbody 和“加载更多”按钮)出现并变得可见,而不是立即进行查找。这大大提高了脚本在页面加载不同阶段的鲁棒性。
优化“加载更多”按钮的识别逻辑:
- 问题:最初尝试使用 Material-UI 生成的冗长且可能不稳定的 CSS 类名作为选择器,导致在某些环境下无法正确识别“加载更多”按钮,尤其当这些类名包含动态哈希值时。此外,还存在按钮未立即渲染完成就进行检查的竞态条件。
- 解决方案:
- 废弃了之前不稳定的长类名选择器。
- 改用更具语义化和稳定性的识别方法:查找所有可能的 Material-UI 按钮 (
button.MuiButtonBase-root, button.MuiButton-root),并进一步检查这些按钮的 textContent 是否包含“加载更多”字样。
-
waitForElement 函数得到增强,现在支持同时通过选择器和文本内容进行匹配,确保能精准定位到目标按钮。
- 在点击“加载更多”按钮的循环中,每次点击后都会再次使用
waitForElement 等待新的按钮状态出现,以应对页面异步刷新带来的延迟,避免因按钮未刷新而误判为已加载全部数据。
增强数据同步与用户筛选处理:
- 问题:用户在进行钓饵或鱼类筛选后,表格内容会动态变化,但脚本的钓饵统计未能实时更新。
- 解决方案:引入了
MutationObserver。当监测到 tbody 元素的内容发生变化时(通常是用户进行了筛选操作),脚本会触发一次强制的、清空后重新扫描的钓饵统计。这确保了无论用户如何操作,显示的钓饵统计数据始终与当前页面可见的记录保持同步。
提升代码结构与健壮性:
- 问题:在迭代过程中,可能出现函数作用域或依赖管理上的疏漏(如
ReferenceError)。
- 解决方案:
- 统一了所有元素等待操作,使其都通过一个单一、通用的
waitForElement 函数来完成,该函数灵活支持选择器匹配和文本内容匹配。
- 移除了功能重叠或已过时的辅助函数,减少代码冗余,提升可维护性。
- 增强了控制台日志输出,提供了更详细的脚本执行状态和错误信息,便于调试和问题诊断。
通过上述一系列的精细化调整和系统性重构,鱼糕V2钓饵统计器用户脚本现在能够更智能、更稳定地适应鱼糕V2页面的动态特性,为用户提供准确的钓饵统计体验。