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]); const cursorRequest = objectStore.openCursor(); const allData = []; cursorRequest.onsuccess = (event) => { const cursor = event.target.result; if (cursor) { // console.log(cursor.key); // console.log(JSON.stringify(value)); const key = cursor.key; const value = cursor.value; allData.push({ key, value }); cursor.continue(); } else { resolve(allData); } }; }; request.onerror = (event) => { reject(event.target.error); }; }); }); // console.log(result); // const cookie = await page.cookies(); // fs.writeFileSync('./cookie.json', JSON.stringify(cookie)); const localStorageData = await page.evaluate(() => { return JSON.stringify(localStorage); // 将 localStorage 转换为对象 }); fs.writeFileSync('./localStorage.json', localStorageData); fs.writeFileSync('./indexedDB.json', JSON.stringify(result)); } await browser.close(); })().catch((err) => { console.error(err); process.exit(1); });