screenshot.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. const puppeteer = require('puppeteer-core');
  2. const http = require('http');
  3. const fs = require('fs');
  4. const path = require('path');
  5. function startServer(root, port) {
  6. return new Promise(resolve => {
  7. const srv = http.createServer((req, res) => {
  8. let fp = path.join(root, decodeURIComponent(req.url.split('?')[0]));
  9. if (!fs.existsSync(fp) || fs.statSync(fp).isDirectory()) fp = path.join(root, 'index-v2.html');
  10. const ext = path.extname(fp).toLowerCase();
  11. const mime = { '.html':'text/html', '.js':'application/javascript', '.css':'text/css', '.png':'image/png', '.jpg':'image/jpeg' };
  12. try { res.writeHead(200, { 'Content-Type': mime[ext] || 'application/octet-stream' }); fs.createReadStream(fp).pipe(res); }
  13. catch(e) { res.writeHead(404); res.end(); }
  14. });
  15. srv.listen(port, () => resolve(srv));
  16. });
  17. }
  18. (async () => {
  19. const root = 'C:\\Users\\Administrator\\lab-safety-monitor';
  20. const port = 19527;
  21. const srv = await startServer(root, port);
  22. const browser = await puppeteer.launch({
  23. executablePath: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
  24. headless: 'new',
  25. args: ['--no-sandbox','--disable-setuid-sandbox','--window-size=9600,2800']
  26. });
  27. const page = await browser.newPage();
  28. await page.setViewport({ width: 9600, height: 2800, deviceScaleFactor: 1 });
  29. await page.goto(`http://localhost:${port}/index-v2.html`, { waitUntil: 'networkidle0', timeout: 30000 });
  30. await new Promise(r => setTimeout(r, 2000));
  31. // 关闭预警弹窗
  32. await page.evaluate(() => {
  33. const modal = document.getElementById('alert-modal');
  34. if (modal) modal.style.display = 'none';
  35. window.showAlert = () => {};
  36. });
  37. // 等待摄像头初始化
  38. await new Promise(r => setTimeout(r, 5000));
  39. await page.screenshot({ path: 'C:\\Users\\Administrator\\lab-safety-monitor\\design-preview.png', fullPage: true });
  40. console.log('Done');
  41. await browser.close();
  42. srv.close();
  43. })().catch(e => { console.error(e.message); process.exit(1); });