1const { Actor } = require('apify');
2const puppeteer = require('puppeteer');
3
4Actor.main(async () => {
5 const input = await Actor.getInput() ?? {};
6 if (!input.url) throw new Error('Input must contain a "url" field.');
7
8 console.log(`Opening URL: ${input.url}`);
9 const browser = await puppeteer.launch({
10 executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || '/usr/bin/google-chrome-stable',
11 args: ['--no-sandbox', '--disable-dev-shm-usage'],
12 });
13 const page = await browser.newPage();
14 await page.goto(input.url, { waitUntil: 'networkidle2' });
15
16 const dimensions = await page.evaluate(() => ({
17 width: document.documentElement.clientWidth,
18 height: document.documentElement.clientHeight,
19 deviceScaleFactor: window.devicePixelRatio,
20 }));
21 console.log('Dimensions:', JSON.stringify(dimensions));
22
23 const screenshot = await page.screenshot({ fullPage: true });
24 await Actor.setValue('screenshot.png', screenshot, { contentType: 'image/png' });
25
26 const pdf = await page.pdf({ format: 'A4' });
27 await Actor.setValue('page.pdf', pdf, { contentType: 'application/pdf' });
28
29 await browser.close();
30
31 const storeId = process.env.ACTOR_DEFAULT_KEY_VALUE_STORE_ID;
32 console.log(`Screenshot: https://api.apify.com/v2/key-value-stores/${storeId}/records/screenshot.png`);
33 console.log(`PDF: https://api.apify.com/v2/key-value-stores/${storeId}/records/page.pdf?disableRedirect=1`);
34 console.log('Done.');
35});