first commit
This commit is contained in:
86
utils/screenshot.js
Normal file
86
utils/screenshot.js
Normal file
@@ -0,0 +1,86 @@
|
||||
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
|
||||
};
|
||||
Reference in New Issue
Block a user