Quero fazer uma captura de tela de uma página com o Chrome Headless, e vimos --screenshot
as --virtual-time-budget
opções e as opções 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 também queremos capturá-los.
Estou procurando uma maneira de tirar uma captura de tela, digamos, 5 segundos depois que a página é carregada, e não exatamente quando é considerada carregada.
Estamos chamando o Chrome Headless de nosso aplicativo NodeJS da seguinte forma:
cp.spawnSync("google-chrome-beta", ["--headless", "--disable-gpu", "--screenshot", "--profile-directory=Default", "--window-size=1920,6200", "--virtual-time-budget=25000", url]);
Sabemos que existem possíveis bibliotecas npm que podem conseguir 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).
TL; DR
Existe alguma maneira de fazer o Chrome Headless esperar alguns segundos após o carregamento da página antes de fazer uma captura de tela?
fonte
nodejs index.js --url="http://www.eff.org" --delay=5000
por 5 segundos de atraso.Respostas:
Eu estava procurando a mesma coisa. O que eu encontrei é o marionetista do google. https://github.com/GoogleChrome/puppeteer
Existem muitos exemplos, mas basicamente você pode fazer o que eu fiz.
fonte
UnhandledPromiseRejectionWarning: Error: ERROR: "networkidle" option is no longer supported. Use "networkidle2" instead
Como afirma Vlastimil Ovčáčík , David Schnurr escreveu e compartilhou um script nodeJS para esse objetivo exato no Medium .
O script deve ser plug and play, menos algumas dependências.
A instalação é a seguinte:
git clone https://github.com/schnerd/chrome-headless-screenshots.git
npm install chrome-remote-interface minimist
node index.js --url="/superuser/1209741/how-to-take-a-screenshot-of-a-page-n-seconds-after-page-is-loaded-with-chrome-he" --delay=4000
fonte