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