const { chromium } = require('playwright'); const path = 'C:\\Users\\然然小可爱\\Desktop\\数学乐园\\index.html'; (async () => { const browser = await chromium.launch({ headless: true }); const page = await browser.newPage({ viewport: { width: 800, height: 900 } }); page.on('pageerror', e => console.log(' ERROR:', e.message)); await page.goto('file:///' + path.replace(/\\/g, '/')); await page.waitForTimeout(1000); // Unlock all await page.evaluate(() => { S.stars = [3,3,3,3]; sv(); renderMap(); }); await page.waitForTimeout(300); // Navigate via goChap await page.evaluate(() => goChap(3)); await page.waitForTimeout(500); const gl = await page.$eval('#cGl', e => e.textContent).catch(() => 'ERR'); console.log('当前段:', gl); // Walk through KPs for (let step = 0; step < 7; step++) { const act = await page.$('.act.show'); if (act) await act.click(); await page.waitForTimeout(500); const label = await page.$eval('#cGl', e => e.textContent).catch(() => '?'); const svgAnims = await page.evaluate(() => { const svgs = document.querySelectorAll('#cCo svg'); let n = 0; svgs.forEach(s => { if (s.innerHTML.includes('animate')) n++; }); return n; }); console.log((step+1) + '. ' + label + ' SVG动画:' + svgAnims + '个'); } // Final content check const body = await page.evaluate(() => document.body.innerHTML); const checks = [ ['展开图滑入', body.includes('展开图演示')], ['角度弧线', body.includes('∠=')], ['钟面8:30', body.includes('8:30')], ['射线延伸', body.includes('x2')], ['中点滑动', body.includes('cx"')], ]; console.log('\n动画内容:'); checks.forEach(c => console.log(' ' + (c[1] ? '✅' : '❌') + ' ' + c[0])); await browser.close(); })().catch(e => console.log('失败:', e.message));