Existe várias formas de resolver esse problemas, algumas já foram mencionadas pelo pessoal, vou te da mais uma alternativa e você pode analisar qual é a melhor para o seu projeto.
Existe um API que faz isso, a base dela é feita com o puppeteer
, site oficial da api
Exemplo de um screenshot do tabnews com a api: https://api.urlbox.io/v1/ca482d7e-9417-4569-90fe-80f7c5e1c781/ab76588c92a344a96034e0f5c8340e9d1c190e93/png?url=https%3A%2F%2Fwww.tabnews.com.br%2F