86 lines
2.5 KiB
JavaScript
86 lines
2.5 KiB
JavaScript
import puppeteer, { launch, Locator } from 'puppeteer'; // v23.0.0 or later
|
|
import fs from 'fs';
|
|
import { resolve } from 'path';
|
|
import { writeIndexedDB, readIndexedDB } from './utils.js';
|
|
|
|
(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(`${msg.args()[i]}`);
|
|
}
|
|
});
|
|
|
|
// 获取浏览器中的 IndexedDB 数据
|
|
const result = await page.evaluate(async (readIndexedDBFnString) => {
|
|
// 使用 eval() 执行传入的函数代码
|
|
eval(readIndexedDBFnString);
|
|
return await readIndexedDB();
|
|
// const readIndexedDBFn = new Function('return ' + readIndexedDBFnString)();
|
|
// return await readIndexedDBFn();
|
|
// 调用传入的函数并等待其返回结果
|
|
}, readIndexedDB.toString());
|
|
|
|
const localStorageData = await page.evaluate(() => {
|
|
return JSON.stringify(localStorage); // 将 localStorage 转换为对象
|
|
});
|
|
fs.writeFileSync('./indexedDB.json', JSON.stringify(result));
|
|
fs.writeFileSync('./localStorage.json', localStorageData);
|
|
}
|
|
|
|
await browser.close();
|
|
})().catch((err) => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|