Puppeteer基本介绍

前言

在本次分享中,我们将学习如何使用JavaScript自动抓取网页。为此,我们将使用Puppeteer。Puppeteer是一个Node库,它提供了丰富的API允许我们控制无头Chrome浏览器。无头Chrome浏览器是一个无需实际运行Chrome浏览器即可运行Chrome浏览器的方法。
-----我们将编写JavaScript代码来自动运行Goole Chrome浏览器.

什么是Chrome DevTool Protocal

  • CDP基于WebSocket,利用WebSocket实现与浏览器内核的快速数据通道
  • CDP分为多个域(DOM、Debugger、Network、Profile、Console...),每个域都定义了相关的命令和事件
  • 我们可以给予CDP封装一些工具对Chrome浏览器进行调试分析,比如我们常用的“Chrome开发者工具”就是基于CDP实现的
  • 很多有用的工具都是基于CDP实现的,比如Chrome开发者工具Puppetteer

什么是Headless Chrome

  • 可以在无界面的环境中运行Chrome
  • 通过命令行或者程序语言操作Chrome
  • 无需人的干预,运行更稳定
    总结:Headless Chrome就是Chrome浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有Chrome支持的特性运行程序

Pupperteer是什么

Pupperteer是一个Node库,它提供了一个高级API通过DevTools协议控制Chromium或Chrome。Puppeteer默认一headless模式运行,但是可以通过修改配置文件运行“有头”模式。

Puppeteer可以做什么?

  • 网页截图或生成PDF(可以设置截图的设备、针对页面中某块区域截图或生成PDF)
  • 爬取SPA或SSR网站
  • UI自动化测试,模拟表单提交、键盘输入、点击等行为
  • 捕获网站的时间线,帮助诊断性能问题
  • 创建一个时时更新的自动化测试环境。使用最新的JavaScript和浏览器功能直接在最新版本的Chrome中执行测试
  • 测试浏览器扩展

Puppeteer API分层结构

Puppeteer中的API分层结构基本和浏览器保存一致,我对常使用到的几个类简单介绍一下:

  • Browser:对应一个浏览器实例,一个浏览器可以包含多个BrowserContent
  • BrowserContent:对应浏览器一个上下文会话,就像我们打开一个普通的Chrome之后又打开一个隐身模式的浏览器一样,一个BrowserContent可以包含多个Page
  • ExecutionContent:是Javascript的执行环境
  • ElementHandle:对应DOM的一个元素节点,通过该实例可以实现对元素的点击,填写表单等行为
  • Tracing: 抓去性能数据进行分析
  • Response:页面收到的响应
  • Request: 页面发出的请求

使用Puppeteer进行数据抓取的基本步骤如下:

  1. 安装Puppeteer库和相关依赖
  2. 创建一个新的页面,并启动一个浏览器
  3. 打开一个新的页面(可设置请求头、设置代理、cookie之类的)
  4. 访问目标网站,并等待页面加载完成
  5. 使用选择器或XPath定位元素,并获取元素的属性或文本
  6. 将获取的数据存储到本地文件或数据库中
  7. 关闭页面和浏览器

此处评论已关闭