import puppeteer, { launch, Locator } from 'puppeteer'; // v23.0.0 or later import fs from 'fs'; import { resolve } from 'path'; (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 () => { return new Promise((resolve, reject) => { const request = indexedDB.open('hlk_touch_test_14920'); request.onsuccess = (event) => { const db = event.target.result; const transaction = db.transaction(db.objectStoreNames, 'readonly'); const objectStore = transaction.objectStore(db.objectStoreNames[0]); // resolve('success'); const cursorRequest = objectStore.openCursor(); cursorRequest.onsuccess = (event) => { const cursor = event.target.result; if (cursor) { console.log(cursor.key); const value = cursor.value; console.log(JSON.stringify(value)); cursor.continue(); } else { resolve('success'); } }; }; request.onerror = (event) => { reject(event.target.error); }; }); }); console.log(result); } // await browser.close(); })().catch((err) => { console.error(err); process.exit(1); });