用 Puppeteer 截图

2019-04-24
标签: PUPPETEER

按照 《Puppteer 配置浏览器属性》一文配置浏览器后,启动浏览器并打开网页,第一件可以自动完成的事情就是截图。 本文详细讨论截图的一些细节操作。

基本代码框架

本文介绍的函数,将基于下面的代码。这段代码实现了一个启动浏览器、并打开指定的网页的过程:

async function () {

  const url = 'https://www.baidu.com'
  const width = 1600
  const height = 900
  let browser = await puppeteer.launch({
			headless: false, 
			ignoreHTTPSErrors: true,
			slowMo: 100,
			args: [
            '--no-sandbox',
            '--disable-setuid-sandbox',
            `--window-size=${width},${height}`
        ]
  })

  let page = await browser.newPage()
  await page.goto(url)
}

截图的内容

可以针对页面或者某一个页面元素截图,分别使用 page.screenshot() 函数 和 elementHandle.screenshot()函数。下面首先介绍针对页面的截图。

页面截图

可以保存为 jpeg、png、pdf 三种格式。前两种图片格式,可以直接体现在保存的文件名里:

await page.screenshot({path: 'homepage.png'}) 
await page.screenshot({path: 'homepage.jpeg'}) 

因为 pdf 文件格式的可配置项很多,为了得到 pdf 格式,需要调用 另一个 pdf 函数

await page.pdf({path: 'homepage.pdf'}) 

这三种截图文件格式,如果不指定 path 参数,将不会写入文件。

如果截得的是 jpeg 格式,还能指定文件的压缩质量,从0~100不等,100是最高质量。

await page.screenshot({
         path: 'homepage.jpeg',
         quality: 99
}) 

页面滚动截图

默认截图得到的是视口内的页面,如果希望实现一边拖动滚动条,一边截图,一直得到完整的页面截图,需要令 fullPage 参数为 true

await page.screenshot({
         path: 'homepage.png',
         fullPage: true
}) 

页面元素截图

还可以针对某个特定元素截图,可以用来特别关注某个关键的页面元素的外观。具体方法是首先获得 该元素的引用,再调用 screenshot 函数

let logo = await page.waitForSelector('#lg')

await logo.screenshot({
         path: 'homepage.png'
}) 

一个可用的版本

async function () {

  const url = 'https://www.baidu.com'
  const width = 1600
  const height = 900
  let browser = await puppeteer.launch({
			headless: false, 
			ignoreHTTPSErrors: true,
			slowMo: 100,
			args: [
            '--no-sandbox',
            '--disable-setuid-sandbox',
            `--window-size=${width},${height}`
        ]
  })

  let page = await browser.newPage()
  await page.goto(url)
  let logo = await page.waitForSelector('#lg')

  await logo.screenshot({
         path: 'homepage.png'
  }) 
}

如果您对本站内容有疑问或者寻求合作,欢迎 联系邮箱邮箱已到剪贴板

标签: PUPPETEER

欢迎转载本文,惟请保留 原文出处 ,且不得用于商业用途。
本站 是个人网站,若无特别说明,所刊文章均为原创,并采用 署名协议 CC-BY-NC 授权。