Follow us 登录 注册

导出 this(即 window 对象)的所有数据

(function() {

    console.log("开始扫描并导出包含音乐关键词的变量...");

    

    // 定义关键词,你可以根据需要添加

    const keywords = ['url', 'music', 'track', 'play', 'audio', 'm4a', 'mp3', 'data', 'song'];

    const exportData = {};

    const keys = Object.keys(window);


    keys.forEach(key => {

        // 1. 跳过函数

        if (typeof window[key] === 'function') return;

        // 2. 跳过 DOM 节点

        if (window[key] instanceof Node) return;

        // 3. 跳过过长的内部属性

        if (key.startsWith('__') && key.length > 20) return;


        try {

            // 尝试将值转为字符串进行关键词匹配

            const val = window[key];

            const str = JSON.stringify(val);

            

            // 检查是否包含任意一个关键词

            if (keywords.some(k => str.toLowerCase().includes(k))) {

                exportData[key] = val;

            }

        } catch (e) {

            // 忽略无法序列化的对象

        }

    });


    // 下载为 JSON 文件

    const dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(exportData, null, 2));

    const downloadAnchorNode = document.createElement('a');

    downloadAnchorNode.setAttribute("href", dataStr);

    downloadAnchorNode.setAttribute("download", "music_data_filtered.json");

    document.body.appendChild(downloadAnchorNode);

    downloadAnchorNode.click();

    downloadAnchorNode.remove();


    console.log("导出完成!请查看下载的 music_data_filtered.json 文件");

})();





暴力全量导出(谨慎使用)

(function() {

    console.log("正在尝试导出 window 对象的所有数据,这可能需要几秒钟...");

    

    const seen = new WeakSet(); // 用于检测循环引用

    const safeWindow = {};

    const keys = Object.keys(window);


    // 遍历 window 的所有属性

    for (let i = 0; i < keys.length; i++) {

        const key = keys[i];

        const value = window[key];


        // 过滤掉函数,因为通常数据存在对象里

        if (typeof value === 'function') continue;

        

        // 过滤掉 DOM 节点

        if (value instanceof Node) continue;

        

        // 过滤掉浏览器内部的一些巨型对象

        if (key === 'document' || key === 'window' || key === 'globalThis') continue;


        try {

            safeWindow[key] = value;

        } catch (e) {

            safeWindow[key] = "[无法读取的数据]";

        }

    }


    // 自定义 JSON 序列化器,处理循环引用

    const getCircularReplacer = () => {

        return (key, value) => {

            if (typeof value === "object" && value !== null) {

                if (seen.has(value)) {

                    return "[循环引用]";

                }

                seen.add(value);

            }

            return value;

        };

    };


    try {

        const jsonStr = JSON.stringify(safeWindow, getCircularReplacer(), 2);

        

        // 下载文件

        const dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(jsonStr);

        const downloadAnchorNode = document.createElement('a');

        downloadAnchorNode.setAttribute("href", dataStr);

        downloadAnchorNode.setAttribute("download", "window_full_dump.json");

        document.body.appendChild(downloadAnchorNode);

        downloadAnchorNode.click();

        downloadAnchorNode.remove();

        

        console.log("全量导出成功!文件大小: " + (jsonStr.length / 1024).toFixed(2) + " KB");

    } catch (err) {

        console.error("导出失败,数据量可能过大:", err);

    }

})();