Selenium 的核心是 WebDriver,WebDriver 用于驱动浏览器。Selenium 中存在三个角色:
WebDriver API
比如 Python selenium 包
WebDriver
每种浏览器都有自己的驱动。它是二进制程序,其中包含一个 HTTP Server。API 与 WebDriver 之间使用(基于 HTTP 协议的)JSON wire protocol 进行通信
浏览器
比如 Chrome。WebDriver 的版本必须匹配浏览器的版本
综上,执行一条 Selenium 指令的流程大概是:
使用 Selenium 时,需要安装浏览器和对应的 WebDriver,并且 Selenium 基于单向的 HTTP 协议,所以先排除 Selenium。
Puppeteer 和 Playwright 使用 Devtools Protocol 与内置的浏览器进行通信,Devtools Protocol 基于双向通信的 WebSocket 协议,利用 Websocket 协议实现与浏览器内核的快速数据通道。因此它们安装简单,并且可以自动获取浏览器的实际情况。
下面是摘自 Puppeteer 官网的一段话:
Most things that you can do manually in the browser can be done using Puppeteer!
(你在浏览器中可以手工做的大多数事情都可以使用 Puppeteer 来完成!)
Puppeteer 由 Google Chrome 团队开发,它对 Chrome 拥有无与伦比的支持。但因为它专注于 Chrome 和 Node.js,所以对于非 Node.js 开发者需要排除它。