feat: 添加 HLK 平台数据拉取脚本
- 新增 HLK 平台登录和数据拉取脚本 - 使用 Puppeteer 实现自动化登录和数据抓取 - 添加打印 IndexedDB 数据的功能
This commit is contained in:
parent
cc1251eda9
commit
1d4797ece3
133
hlk.spec.js
Normal file
133
hlk.spec.js
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
import { launch, Locator } from 'puppeteer'; // v23.0.0 or later
|
||||||
|
|
||||||
|
(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);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(allData[0].stores.keyvaluepairs); // 打印所有数据库的数据
|
||||||
|
}
|
||||||
|
|
||||||
|
// await browser.close();
|
||||||
|
})().catch((err) => {
|
||||||
|
console.error(err);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
Loading…
Reference in New Issue
Block a user