111 lines
3.9 KiB
JavaScript
111 lines
3.9 KiB
JavaScript
import puppeteer from 'puppeteer';
|
|
import { readFileSync } from 'fs';
|
|
|
|
(async () => {
|
|
// 读取 JSON 文件
|
|
const jsonData = JSON.parse(readFileSync('indexedDB.json', 'utf8'));
|
|
|
|
const browser = await puppeteer.launch({ headless: false });
|
|
|
|
// 获取当前的页面,通常是浏览器启动后的默认页面
|
|
const [page] = await browser.pages();
|
|
|
|
// 打开目标网页
|
|
await page.goto('https://hlk.meiguanjia.net'); // 替换为你的目标 URL
|
|
|
|
const localStorageData = JSON.parse(readFileSync('localStorage.json', 'utf8'));
|
|
await page.evaluate((data) => {
|
|
for (const key in data) {
|
|
localStorage.setItem(key, data[key]);
|
|
}
|
|
}, localStorageData);
|
|
console.log('set localStorage success');
|
|
|
|
await page.evaluate((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));
|
|
});
|
|
}, jsonData); // 将 jsonData 传递到浏览器上下文中
|
|
|
|
console.log('end');
|
|
|
|
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
|
|
await page.goto('https://hlk.meiguanjia.net');
|
|
|
|
// await
|
|
|
|
// await browser.close();
|
|
})();
|