Puppeteer简介

820 阅读3分钟

作用与依赖安装

Puppeteer是一个由Google Chrome团队开发的Node.js库,它提供了一个高级API,可以控制Chrome或Chromium浏览器的操作,实现类似于人类对浏览器的操作,比如打开网页、输入文字、点击按钮等等。使用Puppeteer可以方便地进行自动化测试、爬虫、网页截图等操作。

  • 网页截图或者生成 PDF

  • 爬取 SPA 或 SSR 网站

  • UI 自动化测试,模拟表单提交,键盘输入,点击等行为

  • 捕获网站的 timeline trace,用来帮助分析性能问题。

  • 创建一个最新的自动化测试环境,使用最新的 js 和最新的 Chrome 浏览器运行测试用例

  • 测试 Chrome 扩展程序

依赖安装

当你安装 Puppeteer 时,它会下载最新版本的Chromium(~170MB Mac,~282MB Linux,~280MB Win),以保证可以使用 API。

pnpm add puppeteer

用法与API介绍

初识Puppeteer - 手把手教学 - 掘金 (juejin.cn)

创建一个浏览器实例

// { headless: 'new' } 是最新的无头模式启用方式,原本方式为 { headless: true }
const browser = await puppeteer.launch({ headless: 'new' })
//   const browser = await puppeteer.launch({ headless: true })

什么是无头模式?

在无界面的环境中运行 Chrome

创建一个标签页实例

const page = await browser.newPage()

使用拦截器

// 启用请求拦截
  await page.setRequestInterception(true)
  page.on('request', interceptedRequest => {
    // if (
    //   interceptedRequest.url().endsWith('.png') ||
    //   interceptedRequest.url().endsWith('.jpg')
    // )
    //   interceptedRequest.abort()
    // else interceptedRequest.continue()
    // 2. 忽略不必要的请求,如图片,视频样式等等
    const whitelist = ['document', 'script', 'xhr', 'fetch']
    if (!whitelist.includes(interceptedRequest.resourceType())) {
      // 中断请求
      return interceptedRequest.abort()
    }
    // 3. 其它请求正常继续
    interceptedRequest.continue()
  })

打开指定url并获取响应内容

const url = 'https://item.jd.com/100058934613.html'
const response = await page.goto(url, {
    timeout: 30 * 1000,
    waitUntil: 'networkidle2',
  })
  const text = await response.text()

waitUntil <string|Array> 满足什么条件认为页面跳转完成,默认是 load 事件触发时。指定事件数组,那么所有事件触发后才认为是跳转完成。事件包括

  • load - 页面的load事件触发时
  • domcontentloaded - 页面的 DOMContentLoaded 事件触发时
  • networkidle0 - 至少500毫秒内,不再有网络连接时触发(与timeout参数搭配使用)
  • networkidle2 - 至少500毫秒内,网络连接数不超过2个(与timeout参数搭配使用)

关闭浏览器

browser.close()

参考文章

puppeteer 截图,pdf,宽度不完整,缺失,处理方式

初识Puppeteer - 手把手教学 - 掘金 (juejin.cn)

非SSR项目快速利用Puppeteer实现SEO

puppeteer API中文介绍

Nodejs 之 Puppeteer 通用 SSR 方案 - 掘金 (juejin.cn)

vue.js - 基于Vue SEO的四种方案 - 冷子欲的前端 - SegmentFault 思否

GitHub - puppeteer/puppeteer: Node.js API for Chrome

Puppeteer Guides | Puppeteer (pptr.dev)

puppeteer/examples at main · puppeteer/puppeteer · GitHub

GitHub - checkly/puppeteer-examples: Puppeteer example scripts for running Headless Chrome from Node.

API Reference | Puppeteer (pptr.dev)

Koa 中返回 html 文件引发的思考 - 掘金 (juejin.cn)

网站如何判断是爬虫用户访问的呢? - 知乎 (zhihu.com)

如何查看网站是否被收录? - 知乎 (zhihu.com)

javascript - Puppeteer 无法获取完整的源代码

SPA 的 SEO 方案对比、最终实践

巧用Puppeteer解决SEO问题

黑帽SEO,黑帽SEO优化技术手法篇(一)

SEO优化中什么是黑帽,灰帽以及白帽手法?

黑帽seo技术教学(教程)

SEO视频教程

如何通过 User-Agent 识别百度蜘蛛

puppeteer-不需重构,无痛加强vue单页面应用的SEO,提升百度收录排名

Puppeteer更通用的SPA单页面应用(vue,react等)搜索引擎seo优化方案

Puppeteer文件上传

使用node+puppeteer破解验证码

利用puppeteer破解极验的滑动验证

前端爬虫无间道-puppeteer检测与绕过