Como tirar uma captura de tela de uma página N segundos depois que a página é carregada com o Chrome Headless?

15

Eu quero fazer uma captura de tela de uma página com o Google Chrome Headless, e vimos as duas opções --screenshot e --virtual-time-budget para tirar uma captura de tela e limitar o tempo de carregamento do navegador.

No entanto, tenho elementos na página que aguardam a renderização de DOMContentLoaded e queremos capturá-los também.

Estou procurando uma maneira de tirar uma captura de tela, digamos, 5 segundos após a página ser carregada, em vez de quando ela é considerada carregada.

Estamos chamando o Chrome Headless de nosso aplicativo NodeJS assim:

cp.spawnSync("google-chrome-beta", ["--headless", "--disable-gpu", "--screenshot", "--profile-directory=Default", "--window-size=1920,6200", "--virtual-time-budget=25000", url]);

Sabemos que existem bibliotecas npm possíveis que podem alcançar isso usando uma API do nó, em vez de usar opções de linha de comando, mas estamos preocupados com a estabilidade (a equipe do Chrome gosta de quebrar todas as APIs internas regularmente). / p>

TL; DR

Existe alguma maneira de fazer o Chrome Headless aguardar alguns segundos após o carregamento da página antes de fazer uma captura de tela?

    
por Madara Uchiha 16.05.2017 / 16:24

2 respostas

4

Eu estava procurando a mesma coisa. O que eu encontrei é o marionetista do google. link

Existem muitos exemplos, mas basicamente você pode fazer o que eu fiz.

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();

})();
    
por 15.09.2017 / 16:19
1

Como Vlastimil Ovčáčík declara, David Schnurr escreveu e compartilhou um script nodeJS exatamente para esse fim em Médio .

O script deve ser plug and play, menos algumas dependências.

A configuração é assim:

  1. Clone o repositório do Git.
    git clone https://github.com/schnerd/chrome-headless-screenshots.git
  2. Instalar dependências:
    npm install chrome-remote-interface minimist
  3. Execute o script em 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
por 16.08.2017 / 22:43