// 决定性诊断: node scripts/diag3.mjs import puppeteer from 'puppeteer-core' const EDGE = 'C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe' const token = process.argv[2] const browser = await puppeteer.launch({ executablePath: EDGE, 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('console', m => console.log('[页面]', m.type(), m.text().slice(0, 120))) await page.goto(`http://localhost:8000/combine?token=${encodeURIComponent(token)}`, { waitUntil: 'networkidle2' }) await page.waitForSelector('.lib-item') await page.click('.lib-item') await new Promise(r => setTimeout(r, 500)) const box = await (await page.$('.canvas-box')).boundingBox() await page.mouse.click(box.x + box.width / 2, box.y + box.height / 2, { button: 'right' }) await new Promise(r => setTimeout(r, 300)) const res = await page.evaluate(() => { const items = document.querySelectorAll('.ctx-item') const el = items[items.length - 1] window.__nativeClicks = 0 el.addEventListener('click', () => window.__nativeClicks++) el.click() // 合成点击 return { items: items.length, nativeAfterSynthetic: window.__nativeClicks, menuStill: !!document.querySelector('.ctx-menu'), } }) console.log('合成点击结果:', JSON.stringify(res)) // 真实点击 await page.mouse.click(box.x + box.width / 2 + 30, box.y + box.height / 2 + 10) await new Promise(r => setTimeout(r, 300)) const st = await page.evaluate(() => ({ nativeClicks: window.__nativeClicks, units: window.__ccDebug.units().length, })) console.log('真实点击后:', JSON.stringify(st)) await browser.close()