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 puppeteer, { launch, Locator } from 'puppeteer'; // v23.0.0 or later
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { resolve } from 'path';
|
import { resolve } from 'path';
|
||||||
|
import { writeIndexedDB, readIndexedDB } from './utils.js';
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
const browser = await launch({
|
const browser = await launch({
|
||||||
@ -61,54 +62,15 @@ import { resolve } from 'path';
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 获取浏览器中的 IndexedDB 数据
|
// 获取浏览器中的 IndexedDB 数据
|
||||||
const result = await page.evaluate(async () => {
|
const result = await page.evaluate(async (readIndexedDBFnString) => {
|
||||||
const databases = await indexedDB.databases();
|
// 使用 eval() 执行传入的函数代码
|
||||||
const allData = [];
|
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(() => {
|
const localStorageData = await page.evaluate(() => {
|
||||||
return JSON.stringify(localStorage); // 将 localStorage 转换为对象
|
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