// 室外场景墙体/窗体位置修复验证截图: node verify-wall.mjs // ① 默认(室外+45°+全关) ② 正面视角全关(检查扇矩形是否出框) ③ 46% 开合(按压-移动-释放驱动 el-slider) import puppeteer from 'puppeteer-core' const browser = await puppeteer.launch({ executablePath: 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe', headless: 'new', args: ['--window-size=1440,900', '--enable-unsafe-swiftshader', '--use-gl=angle', '--use-angle=swiftshader'], defaultViewport: { width: 1440, height: 900 }, }) const page = await browser.newPage() page.on('pageerror', e => console.log(`[JS异常] ${String(e).slice(0, 200)}`)) const token = process.argv[2] const sleep = ms => new Promise(r => setTimeout(r, ms)) await page.goto(`http://localhost:8000/threed?token=${encodeURIComponent(token)}`, { waitUntil: 'networkidle2' }) await sleep(2600) const cv = await (await page.$('.threed-wrap canvas')).boundingBox() await page.screenshot({ path: 'D:/Code/huamenchuang/shots/verify-wall-closed.png', clip: cv }) console.log('✓ 默认(室外+45°+全关)截图完成') // 切正面视角(真实鼠标点击 radio) const frontBtn = await page.evaluateHandle(() => { const spans = [...document.querySelectorAll('.el-radio-button__inner')] return spans.find(s => s.textContent.trim() === '正面') }) const fb = await frontBtn.asElement().boundingBox() await page.mouse.click(fb.x + fb.width / 2, fb.y + fb.height / 2) await sleep(800) await page.screenshot({ path: 'D:/Code/huamenchuang/shots/verify-wall-front.png', clip: cv }) console.log('✓ 正面视角截图完成') // 切回 45° const degBtn = await page.evaluateHandle(() => { const spans = [...document.querySelectorAll('.el-radio-button__inner')] return spans.find(s => s.textContent.trim() === '45°') }) const db = await degBtn.asElement().boundingBox() await page.mouse.click(db.x + db.width / 2, db.y + db.height / 2) await sleep(600) // 46% 开合: 真实按压-移动-释放驱动 el-slider const handle = await page.$('.ctrl .el-slider__button') const hr = await handle.boundingBox() await page.mouse.move(hr.x + hr.width / 2, hr.y + hr.height / 2) await page.mouse.down() const runway = await page.$('.ctrl .el-slider__runway') const rr = await runway.boundingBox() for (let i = 1; i <= 12; i++) { await page.mouse.move(rr.x + rr.width * 0.46, hr.y + hr.height / 2, { steps: 1 }) await sleep(40) } await page.mouse.up() await sleep(1400) await page.screenshot({ path: 'D:/Code/huamenchuang/shots/verify-wall-open46.png', clip: cv }) console.log('✓ 46% 开合截图完成') await browser.close()