You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mailstore Webclient页面更新后重新获取所有<a>标签的问题

解决Mailstore Webclient批量展开文件夹脚本失效问题

原脚本的核心问题

  1. 用const声明tags,后续试图重新赋值时会报错(const变量不可修改),直接导致更新标签集合的逻辑完全失效。
  2. document.querySelectorAll()返回的是静态NodeList,页面新增元素后不会自动更新,你后续遍历的始终是初始加载的那批标签。
  3. 循环逻辑(while+icounter)设计混乱,无法正确触发对新元素的重新查询和遍历。

修正后的脚本

// 存储已点击过的展开标签ID,避免重复点击
const openedIds = new Set();

function expandAllFolders() {
    // 每次执行都重新查询所有符合ID规则的<a>标签
    const expandLinks = document.querySelectorAll('a[id*="-expand-link"]');
    
    let hasNewLinks = false;
    expandLinks.forEach(link => {
        const linkId = link.id;
        // 只点击未处理过的标签
        if (!openedIds.has(linkId)) {
            link.click();
            openedIds.add(linkId);
            hasNewLinks = true;
            console.log(`已点击: ${linkId}`);
        }
    });

    // 如果本次有新标签被点击,说明可能新增了子文件夹,延迟后再次执行
    if (hasNewLinks) {
        setTimeout(expandAllFolders, 300); // 300ms延迟是给页面加载子元素的时间,可按需调整
    } else {
        console.log("所有可展开文件夹已处理完毕");
    }
}

// 启动脚本
expandAllFolders();

脚本逻辑说明

  • 用Set存储已点击的ID,比数组的includes()查询效率更高。
  • 每次执行都重新查询当前页面中所有符合规则的展开标签,确保能获取到新增的子文件夹标签。
  • 通过hasNewLinks判断是否有新标签被点击,若有则延迟后递归执行,直到没有新的可展开标签为止。
  • 加入300ms延迟是因为页面展开文件夹后,子元素的加载需要一点时间,可根据实际页面响应速度调整这个数值。

内容的提问来源于stack exchange,提问作者Cruyer VS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:15:17