我可以使用puppeeter拍摄整张屏幕截图+包括15K网页的分页吗?

时间:2018-11-19 14:45:45

标签: google-chrome-headless

我正在寻找15K网页的屏幕截图,否则我将希望对其进行手动视觉检查。如果我能够收集这些屏幕截图,则将使我的工作更加轻松。

虽然我知道可以使用Puppeteer拍摄多个屏幕截图,但我也想拍摄FULL PAGE屏幕截图;并且最好在同一文件中包含所有其他分页页面。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

简短的答案是:是的,可以。我不确定性能,但是使用木偶戏要实现您想要的功能没有任何技术限制。

长话短说:做得好又干净可能有点棘手。而且,它需要一些技巧来使其能够抵抗错误。拥有某种重试随机失败的进程的机制也是很好的。但是,最简单的实现是:

  1. 将这15k网页存储在.csv文件或数据库集合之类的位置。
  2. 以某种结构化的方式加载应用程序中的所有记录,例如以下类实例的列表:

class WebpageProcess {
  private status = 'NOT_STARTED';
  
  public url;
  
  constructor(url) {
    this.url = url;
  }
  
  public function setSuccess() {
    this.status = 'SUCCESS';
  }
  
  public function setFailure() {
    this.status = 'FAILED';
  }
  
  public function getStatus() {
    return this.status;
  }
}

  1. 迭代浏览每个网页,直到页面完全加载并制作屏幕截图为止。
  2. 如果需要重命名文件,对其进行标记或添加元数据。
  3. 如果进程成功,则将状态更改为SUCCESS
  4. 如果进程失败,则将其标记为FAILED
  5. 最后,生成一个报告,说明有多少个进程失败并列出所有进程。

要制作屏幕快照,必须使用带有标志page.screenshot()的方法fullPage: true。文档:https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagescreenshotoptions

但是,Internet上的一些人抱怨该功能并不总是能正常工作。相反,建议使用解决问题的npm库puppeteer-full-page-screenshot。您必须自己玩游戏,然后检查它是否对您有用。