Files
screenshot-tools/utils/screenshot.js
Frank John Begornia c926590e1d first commit
2025-12-23 01:51:15 +08:00

87 lines
2.1 KiB
JavaScript

const fs = require('fs');
const puppeteer = require('puppeteer');
const { screenshotConfig } = require('../config/config');
/**
* Check if screenshot files exist
* @param {Array} filenames - Array of filenames to check
* @returns {Boolean}
*/
function checkScreenshotsExist(filenames) {
return filenames.every(filename =>
fs.existsSync(screenshotConfig.outputDir + filename)
);
}
/**
* Generate screenshots using Puppeteer
* @param {String} url - URL to capture
* @param {Array} clipConfigs - Array of clip configurations {filename, clip}
* @param {Object} options - Additional options (viewport, waitTime)
* @returns {Promise}
*/
async function generateScreenshots(url, clipConfigs, options = {}) {
const viewport = options.viewport || {
width: screenshotConfig.viewportWidth,
height: screenshotConfig.viewportHeight
};
const waitTime = options.waitTime || screenshotConfig.waitTime;
const browser = await puppeteer.launch({
headless: true,
args: screenshotConfig.puppeteerArgs
});
try {
const page = await browser.newPage();
page.on('load', () => {
console.log('Page load event fired');
});
await page.setViewport(viewport);
await page.goto(url, {
waitUntil: 'domcontentloaded',
waitLoad: true,
waitNetworkIdle: true
});
await page.waitFor(waitTime);
// Capture all screenshots
for (const config of clipConfigs) {
await page.screenshot({
path: screenshotConfig.outputDir + config.filename,
clip: config.clip
});
}
console.log('Screenshots generated successfully');
} finally {
await browser.close();
console.log('Browser closed');
}
}
/**
* Build response payload with thumbnail URLs
* @param {Object} filenames - Object with thumbnail filename properties
* @returns {Object}
*/
function buildResponsePayload(filenames) {
const payload = { time: new Date().toISOString() };
for (const [key, filename] of Object.entries(filenames)) {
payload[key] = screenshotConfig.baseUrl + filename;
}
return payload;
}
module.exports = {
checkScreenshotsExist,
generateScreenshots,
buildResponsePayload
};