puppeteer/sethlk.spec.js
2024-12-20 23:25:00 +08:00

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