41 lines
1.7 KiB
JavaScript
41 lines
1.7 KiB
JavaScript
import puppeteer from 'puppeteer'
|
|
import fs from 'node:fs'
|
|
|
|
const url = 'http://localhost:5174/?projectId=4ed64f05c0&objectId=b8ff7fa87ba35b2ca40863d3003ead1d'
|
|
const browser = await puppeteer.launch({ headless: true, args: ['--no-sandbox'] })
|
|
const page = await browser.newPage()
|
|
await page.setViewport({ width: 1200, height: 800, deviceScaleFactor: 1 })
|
|
const logs = []
|
|
page.on('console', (msg) => logs.push(`${msg.type()}: ${msg.text()}`))
|
|
page.on('pageerror', (err) => logs.push(`pageerror: ${err.message}`))
|
|
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 })
|
|
await page.waitForFunction(() => document.querySelector('#log')?.textContent?.includes('Done.'), { timeout: 180000 })
|
|
await page.screenshot({ path: 'scratch/lite-viewer-object.png', fullPage: false })
|
|
const data = await page.evaluate(() => {
|
|
const canvas = document.querySelector('#viewer canvas')
|
|
const log = document.querySelector('#log')?.textContent
|
|
const rect = canvas?.getBoundingClientRect()
|
|
let sample = null
|
|
if (canvas) {
|
|
const c = document.createElement('canvas')
|
|
c.width = canvas.width
|
|
c.height = canvas.height
|
|
const ctx = c.getContext('2d')
|
|
ctx.drawImage(canvas, 0, 0)
|
|
const img = ctx.getImageData(0, 0, c.width, c.height).data
|
|
let nonBg = 0
|
|
let min = 255
|
|
let max = 0
|
|
for (let i = 0; i < img.length; i += 16) {
|
|
const r = img[i], g = img[i + 1], b = img[i + 2]
|
|
min = Math.min(min, r, g, b)
|
|
max = Math.max(max, r, g, b)
|
|
if (!(Math.abs(r - 223) < 4 && Math.abs(g - 228) < 4 && Math.abs(b - 234) < 4)) nonBg++
|
|
}
|
|
sample = { width: canvas.width, height: canvas.height, min, max, nonBg }
|
|
}
|
|
return { log, rect, sample }
|
|
})
|
|
console.log(JSON.stringify({ url, data, logs }, null, 2))
|
|
await browser.close()
|