fix: 修改文件名大小写
This commit is contained in:
parent
82414ef213
commit
82920dd8fb
3586
indexedDB.json
3586
indexedDB.json
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,6 +1,7 @@
|
||||
import puppeteer, { launch, Locator } from 'puppeteer'; // v23.0.0 or later
|
||||
import fs from 'fs';
|
||||
import { resolve } from 'path';
|
||||
import { writeIndexedDB, readIndexedDB } from './utils.js';
|
||||
|
||||
(async () => {
|
||||
const browser = await launch({
|
||||
@ -61,54 +62,15 @@ import { resolve } from 'path';
|
||||
});
|
||||
|
||||
// 获取浏览器中的 IndexedDB 数据
|
||||
const result = await page.evaluate(async () => {
|
||||
const databases = await indexedDB.databases();
|
||||
const allData = [];
|
||||
const result = await page.evaluate(async (readIndexedDBFnString) => {
|
||||
// 使用 eval() 执行传入的函数代码
|
||||
eval(readIndexedDBFnString);
|
||||
return await readIndexedDB();
|
||||
// const readIndexedDBFn = new Function('return ' + readIndexedDBFnString)();
|
||||
// return await readIndexedDBFn();
|
||||
// 调用传入的函数并等待其返回结果
|
||||
}, readIndexedDB.toString());
|
||||
|
||||
for (const db of databases) {
|
||||
const databaseName = db.name;
|
||||
|
||||
// 打开数据库
|
||||
const request = indexedDB.open(databaseName);
|
||||
|
||||
const databaseData = await new Promise((resolve, reject) => {
|
||||
request.onsuccess = (event) => {
|
||||
const db = event.target.result;
|
||||
const transaction = db.transaction(db.objectStoreNames, 'readonly');
|
||||
const objectStore = transaction.objectStore(db.objectStoreNames[0]);
|
||||
const cursorRequest = objectStore.openCursor();
|
||||
|
||||
const storeData = [];
|
||||
|
||||
cursorRequest.onsuccess = (event) => {
|
||||
const cursor = event.target.result;
|
||||
if (cursor) {
|
||||
storeData.push({ key: cursor.key, value: cursor.value });
|
||||
cursor.continue();
|
||||
} else {
|
||||
resolve(storeData); // 执行 resolve,返回数据
|
||||
}
|
||||
};
|
||||
|
||||
cursorRequest.onerror = (event) => {
|
||||
reject(event.target.error); // 发生错误时 reject
|
||||
};
|
||||
};
|
||||
|
||||
request.onerror = (event) => {
|
||||
reject(event.target.error); // 发生错误时 reject
|
||||
};
|
||||
});
|
||||
|
||||
// 将数据库数据存入 allData
|
||||
allData.push({
|
||||
databaseName,
|
||||
data: databaseData,
|
||||
});
|
||||
}
|
||||
|
||||
return allData;
|
||||
});
|
||||
const localStorageData = await page.evaluate(() => {
|
||||
return JSON.stringify(localStorage); // 将 localStorage 转换为对象
|
||||
});
|
||||
|
||||
125
utils.js
Normal file
125
utils.js
Normal file
@ -0,0 +1,125 @@
|
||||
export async function readIndexedDB() {
|
||||
const databases = await indexedDB.databases();
|
||||
const allData = [];
|
||||
|
||||
for (const db of databases) {
|
||||
const databaseName = db.name;
|
||||
|
||||
// 打开数据库
|
||||
const request = indexedDB.open(databaseName);
|
||||
|
||||
const databaseData = await new Promise((resolve, reject) => {
|
||||
request.onsuccess = (event) => {
|
||||
const db = event.target.result;
|
||||
const transaction = db.transaction(db.objectStoreNames, 'readonly');
|
||||
const objectStore = transaction.objectStore(db.objectStoreNames[0]);
|
||||
const cursorRequest = objectStore.openCursor();
|
||||
|
||||
const storeData = [];
|
||||
|
||||
cursorRequest.onsuccess = (event) => {
|
||||
const cursor = event.target.result;
|
||||
if (cursor) {
|
||||
storeData.push({ key: cursor.key, value: cursor.value });
|
||||
cursor.continue();
|
||||
} else {
|
||||
resolve(storeData); // 执行 resolve,返回数据
|
||||
}
|
||||
};
|
||||
|
||||
cursorRequest.onerror = (event) => {
|
||||
reject(event.target.error); // 发生错误时 reject
|
||||
};
|
||||
};
|
||||
|
||||
request.onerror = (event) => {
|
||||
reject(event.target.error); // 发生错误时 reject
|
||||
};
|
||||
});
|
||||
|
||||
// 将数据库数据存入 allData
|
||||
allData.push({
|
||||
databaseName,
|
||||
data: databaseData,
|
||||
});
|
||||
}
|
||||
|
||||
return allData;
|
||||
}
|
||||
|
||||
export async function writeIndexedDB(jsonData) {
|
||||
return new Promise((resolve, reject) => {
|
||||
// 使用 async 函数来处理异步操作
|
||||
const processDatabase = async (database) => {
|
||||
try {
|
||||
// 打开 IndexedDB 数据库
|
||||
const openRequest = indexedDB.open(database.databaseName, 2);
|
||||
|
||||
// 处理数据库版本升级
|
||||
openRequest.onupgradeneeded = (event) => {
|
||||
const db = event.target.result;
|
||||
// 创建对象存储,如果不存在的话
|
||||
if (!db.objectStoreNames.contains('keyvaluepairs')) {
|
||||
db.createObjectStore('keyvaluepairs');
|
||||
}
|
||||
if (!db.objectStoreNames.contains('local-forage-detect-blob-support')) {
|
||||
db.createObjectStore('local-forage-detect-blob-support');
|
||||
}
|
||||
};
|
||||
|
||||
// 处理数据库打开成功
|
||||
openRequest.onsuccess = async (event) => {
|
||||
const db = event.target.result;
|
||||
const table = database.data;
|
||||
const transaction = db.transaction(['keyvaluepairs'], 'readwrite');
|
||||
const objectStore = transaction.objectStore('keyvaluepairs'); // 使用硬编码的存储名
|
||||
console.log(table.value);
|
||||
|
||||
let completedOperations = 0;
|
||||
const totalOperations = table.length;
|
||||
|
||||
// 使用 Promise.all 来确保所有的写入操作完成
|
||||
const writeOperations = table.map((item, index) => {
|
||||
return new Promise((innerResolve, innerReject) => {
|
||||
const addObject = objectStore.put(item.value, item.key);
|
||||
addObject.onsuccess = () => {
|
||||
console.log('数据添加成功', item.key);
|
||||
completedOperations++;
|
||||
// 如果所有操作完成,调用 resolve
|
||||
if (completedOperations === totalOperations) {
|
||||
innerResolve('数据写入成功');
|
||||
}
|
||||
};
|
||||
addObject.onerror = (event) => {
|
||||
console.error('数据添加失败:', event.target.error);
|
||||
innerReject('数据添加失败');
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
// 等待所有写入操作完成
|
||||
try {
|
||||
await Promise.all(writeOperations);
|
||||
console.log('所有数据写入完成');
|
||||
resolve('所有数据写入完成');
|
||||
} catch (error) {
|
||||
reject('数据写入失败');
|
||||
}
|
||||
};
|
||||
|
||||
// 错误处理
|
||||
openRequest.onerror = (event) => {
|
||||
console.error('数据库打开失败:', event.target.error);
|
||||
reject('数据库打开失败');
|
||||
};
|
||||
} catch (error) {
|
||||
reject('数据库操作失败: ' + error);
|
||||
}
|
||||
};
|
||||
|
||||
// 遍历所有数据库
|
||||
Promise.all(jsonData.map((database) => processDatabase(database)))
|
||||
.then(() => resolve('所有数据库操作完成'))
|
||||
.catch((error) => reject('操作失败: ' + error));
|
||||
});
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user