puppeteer/hlk.spec.js
LingandRX e521f3b028 test
2024-12-19 00:05:29 +08:00

136 lines
4.1 KiB
JavaScript

import { launch, Locator } from 'puppeteer'; // v23.0.0 or later
import fs from 'fs';
(async () => {
const browser = await launch({
headless: false,
});
const page = await browser.newPage();
const timeout = 5000;
page.setDefaultTimeout(timeout);
{
const targetPage = page;
await targetPage.goto('https://hlk.meiguanjia.net/#/login');
}
{
const targetPage = page;
await Locator.race([targetPage.locator('input[placeholder="请输入您的手机号码')])
.setTimeout(timeout)
.click();
}
{
const targetPage = page;
await Locator.race([targetPage.locator('input[placeholder="请输入您的手机号码')])
.setTimeout(timeout)
.fill('17770720274');
}
{
const targetPage = page;
await Locator.race([targetPage.locator('input[placeholder="请输入登录密码')])
.setTimeout(timeout)
.click();
}
{
const targetPage = page;
await Locator.race([targetPage.locator('input[placeholder="请输入登录密码')])
.setTimeout(timeout)
.fill('a123456');
}
{
const targetPage = page;
await Locator.race([targetPage.locator('#agreement')])
.setTimeout(timeout)
.click();
}
{
const targetPage = page;
await Locator.race([targetPage.locator('.login-form-button')])
.setTimeout(timeout)
.click();
await new Promise((resolve) => setTimeout(resolve, 3000));
}
{
const targetPage = page;
targetPage.on('console', (msg) => {
for (let i = 0; i < msg.args().length; ++i) {
console.log(`${i}: ${msg.args()[i]}`);
}
});
const allData = await targetPage.evaluate(() => {
return new Promise((resolve, reject) => {
// 获取所有数据库列表
indexedDB
.databases()
.then((databases) => {
const allDatabasesData = [];
// 遍历所有数据库
const dbPromises = databases.map((db) => {
return new Promise((dbResolve, dbReject) => {
const request = indexedDB.open(db.name);
request.onsuccess = () => {
const database = request.result;
const transaction = database.transaction(database.objectStoreNames, 'readonly');
const dbData = { name: db.name, stores: {} };
// 遍历数据库中的每个对象存储
for (let storeName of database.objectStoreNames) {
const storeData = [];
const store = transaction.objectStore(storeName);
const cursorRequest = store.openCursor();
cursorRequest.onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
storeData.push(cursor.value);
cursor.continue();
} else {
// 当遍历完所有数据时,将数据保存到 dbData 中
dbData.stores[storeName] = storeData;
if (
Object.keys(dbData.stores).length === database.objectStoreNames.length
) {
// 完成一个数据库的所有对象存储数据
dbResolve(dbData);
}
}
};
cursorRequest.onerror = (error) => {
dbReject(error);
};
}
};
request.onerror = (error) => {
dbReject(error);
};
});
});
// 等待所有数据库的数据获取完成
Promise.all(dbPromises)
.then((results) => {
resolve(results);
})
.catch(reject);
})
.catch(reject);
});
});
fs.writeFileSync('allData.json', JSON.stringify(allData, null, 2));
// console.log(allData[0].stores.keyvaluepairs); // 打印所有数据库的数据
}
// await browser.close();
})().catch((err) => {
console.error(err);
process.exit(1);
});