Dockerfile
FROM apify/actor-node-puppeteer-chrome:15-10.1.0
COPY package*.json ./
RUN npm --quiet set progress=false \
&& npm install --only=prod --no-optional \
&& echo "Installed NPM packages:" \
&& (npm list --all || true) \
&& echo "Node.js version:" \
&& node --version \
&& echo "NPM version:" \
&& npm --version
COPY --chown=node:node . ./
main.js
const Apify = require('apify');
Apify.main(async () => {
const input = await Apify.getValue('INPUT');
if (!input || !input.url) throw new Error('Invalid input, must be a JSON object with the "url" field!');
console.log('Launching Puppeteer...');
const browser = await Apify.launchPuppeteer();
console.log(`Opening URL: ${input.url}`);
const page = await browser.newPage();
await page.goto(input.url);
console.log('Determining page dimensions...');
const dimensions = await page.evaluate(() => ({
width: document.documentElement.clientWidth,
height: document.documentElement.clientHeight,
deviceScaleFactor: window.devicePixelRatio
}));
console.log(`Dimension: ${JSON.stringify(dimensions)}`);
console.log('Saving screenshot...');
const screenshotBuffer = await page.screenshot();
await Apify.setValue('screenshot.png', screenshotBuffer, { contentType: 'image/png' });
console.log('Closing Puppeteer...');
await browser.close();
console.log('Done.');
console.log('You can check the output in the key-value on the following URLs:');
const storeId = process.env.APIFY_DEFAULT_KEY_VALUE_STORE_ID;
console.log(`- https://api.apify.com/v2/key-value-stores/${storeId}/records/screenshot.png`);
});
package.json
{
"name": "apify-project",
"version": "1.3.4",
"description": "",
"author": "It's not you it's me",
"license": "ISC",
"dependencies": {
"apify": "latest"
},
"scripts": {
"start": "node main.js"
}
}