(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);
}
})();