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