This commit is contained in:
LingandRX 2024-12-20 23:25:00 +08:00
parent b9c7b52a4d
commit 82414ef213
4 changed files with 3689 additions and 3517 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
import puppeteer from 'puppeteer';
import { read, readFileSync } from 'fs';
import { readFileSync } from 'fs';
(async () => {
// 读取 JSON 文件
@ -21,130 +21,90 @@ import { read, readFileSync } from 'fs';
}, localStorageData);
console.log('set localStorage success');
// const cookie = JSON.parse(readFileSync('cookie.json', 'utf8'));
// await page.setCookie(...cookie);
// console.log('cookie', cookie);
// console.log(JSON.stringify(jsonData, null, 2));
page.on('console', (msg) => {
for (let i = 0; i < msg.args().length; ++i) {
console.log(`${msg.args()[i]}`);
}
});
// await page.evaluate((jsonData) => {
// // 打开 IndexedDB 数据库
// const openRequest = indexedDB.open('hlk_touch_test_14920', 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 = (event) => {
// const db = event.target.result;
// const transaction = db.transaction(['keyvaluepairs'], 'readwrite');
// const objectStore = transaction.objectStore('keyvaluepairs'); // 使用硬编码的存储名
// console.log(jsonData[0].value);
// console.log('jsonData.length', jsonData.length);
// for (let i = 0; i < jsonData.length; i++) {
// const addObject = objectStore.put(jsonData[i].value, jsonData[i].key);
// addObject.onsuccess = (event) => {
// console.log('数据添加成功');
// };
// addObject.onerror = (event) => {
// console.error('数据添加失败:', event.target.error);
// };
// }
// // 事务错误处理
// transaction.onerror = (event) => {
// console.error('事务失败:', event.target.error);
// };
// };
// // 错误处理
// openRequest.onerror = (event) => {
// console.error('数据库打开失败:', event.target.error);
// };
// }, jsonData); // 将 jsonData 传递到浏览器上下文中
await page.evaluate((jsonData) => {
return new Promise((resolve, reject) => {
// 打开 IndexedDB 数据库
const openRequest = indexedDB.open('hlk_touch_test_14920', 2);
// 使用 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 = (event) => {
const db = event.target.result;
const transaction = db.transaction(['keyvaluepairs'], 'readwrite');
const objectStore = transaction.objectStore('keyvaluepairs'); // 使用硬编码的存储名
console.log(jsonData[0].value);
console.log('jsonData.length', jsonData.length);
let completedOperations = 0;
const totalOperations = jsonData.length;
for (let i = 0; i < jsonData.length; i++) {
const addObject = objectStore.put(jsonData[i].value, jsonData[i].key);
addObject.onsuccess = () => {
console.log('数据添加成功', jsonData[i].key);
completedOperations++;
// 如果所有操作完成,调用 resolve
if (completedOperations === totalOperations) {
resolve('所有数据写入完成');
// 处理数据库版本升级
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');
}
};
addObject.onerror = (event) => {
console.error('数据添加失败:', event.target.error);
reject('数据添加失败');
// 处理数据库打开成功
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);
}
// 事务错误处理
transaction.onerror = (event) => {
console.error('事务失败:', event.target.error);
reject('事务失败');
};
};
// 错误处理
openRequest.onerror = (event) => {
console.error('数据库打开失败:', event.target.error);
reject('数据库打开失败');
};
// 遍历所有数据库
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();
// await browser.close();
})();

View File

@ -62,47 +62,58 @@ import { resolve } from 'path';
// 获取浏览器中的 IndexedDB 数据
const result = await page.evaluate(async () => {
return new Promise((resolve, reject) => {
const request = indexedDB.open('hlk_touch_test_14920');
const databases = await indexedDB.databases();
const allData = [];
request.onsuccess = (event) => {
const db = event.target.result;
const transaction = db.transaction(db.objectStoreNames, 'readonly');
for (const db of databases) {
const databaseName = db.name;
const objectStore = transaction.objectStore(db.objectStoreNames[0]);
const cursorRequest = objectStore.openCursor();
// 打开数据库
const request = indexedDB.open(databaseName);
const allData = [];
cursorRequest.onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
// console.log(cursor.key);
// console.log(JSON.stringify(value));
const key = cursor.key;
const value = cursor.value;
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();
allData.push({ key, value });
const storeData = [];
cursor.continue();
} else {
resolve(allData);
}
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);
};
});
request.onerror = (event) => {
reject(event.target.error); // 发生错误时 reject
};
});
// 将数据库数据存入 allData
allData.push({
databaseName,
data: databaseData,
});
}
return allData;
});
// console.log(result);
// const cookie = await page.cookies();
// fs.writeFileSync('./cookie.json', JSON.stringify(cookie));
const localStorageData = await page.evaluate(() => {
return JSON.stringify(localStorage); // 将 localStorage 转换为对象
});
fs.writeFileSync('./localStorage.json', localStorageData);
fs.writeFileSync('./indexedDB.json', JSON.stringify(result));
fs.writeFileSync('./localStorage.json', localStorageData);
}
await browser.close();