Je souhaite effectuer une capture d'écran d'une page avec Chrome Headless. Nous avons déjà vu les commutateurs --screenshot
et --virtual-time-budget
qui permettent de prendre une capture d'écran et de limiter le temps de chargement du navigateur.
J'ai des éléments sur la page mais attendons que DOMContentLoaded soit rendu, et nous voulons aussi les capturer.
Je cherche un moyen de prendre une capture d'écran, disons, 5 secondes après la page est chargée, au lieu d'être correcte lorsqu'elle est considérée comme chargée.
Nous appelons Chrome Headless depuis notre application NodeJS comme suit:
cp.spawnSync("google-chrome-beta", ["--headless", "--disable-gpu", "--screenshot", "--profile-directory=Default", "--window-size=1920,6200", "--virtual-time-budget=25000", url]);
Nous savons que certaines bibliothèques npm peuvent atteindre cet objectif en utilisant une API de nœud au lieu d'utiliser des commutateurs de ligne de commande, mais nous sommes préoccupés par la stabilité (l'équipe de Chrome aime casser régulièrement toutes ses API internes).
Est-il possible de laisser Chrome Headless attendre quelques secondes après le chargement de la page avant de prendre une capture d'écran?
Je cherchais la même chose. Ce que j'ai trouvé, c'est Google Marionnettiste. https://github.com/GoogleChrome/puppeteer
Il y a beaucoup d'exemples, mais en gros, vous pouvez faire ce que j'ai fait.
const puppeteer = require('puppeteer');
function timeout(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
};
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setViewport({width: 5960, height: 4209})
await page.goto('http://stackoverflow.com', {waitUntil: 'networkidle'});
await timeout(10000)
await page.screenshot({path: 'example.png'});
browser.close();
})();
Comme l'indique Vlastimil Ovčáčík , David Schnurr a écrit et partagé un script nodeJS à cet effet sur Moyen .
Le script doit être plug and play, moins certaines dépendances.
La configuration est en tant que telle:
git clone https://github.com/schnerd/chrome-headless-screenshots.git
npm install chrome-remote-interface minimist
node index.js --url="https://superuser.com/questions/1209741/how-to-take-a-screenshot-of-a-page-n-seconds-after-page-is-loaded-with-chrome-he" --delay=4000