Skip to content

浏览器管理

使用 puppeteer 的第一步就是启动(launch)或连接(connect)一个浏览器

launch

puppeteer 自己携带了一个特定版本的浏览器,所谓的 launch 就是启动该默认的浏览器,主基本的流程:

JavaScript
import puppeteer from "puppeteer";

const browser = await puppeteer.launch();

await browser.close();

launch 可以接受一个 LaunchOptions 对象来控制浏览器的一些行为,其中比较重要的包括:

参数 描述
browser:'chrome \| 'firefox' = 'chrome' 要启动的浏览器
env: Record<string,string> = process.env 指定浏览器可见的环境变量
executablePath:string 用于替代默认 chrome 浏览器的其他浏览器的可执行路径
args:string[] 要传递给浏览器实例的其他命令行参数(指定代理时很有用)
headless: boolean = true 无头模式,需要注意默认是无头的
acceptInsecureCerts:boolean = false 是否自动忽略 HTTPS 错误
defaultViewport = {width:800, height: 600} 默认窗口大小

connect

可以使用 connect 方法来连接一个已经启动了的浏览器:

JavaScript
const browser = await puppeteer.connect({
  browserWSEndpoint: "ws://HOST:PORT/devtools/browser/<id>",
});

const page = await browser.newPage();

browser.disconnect();

Note

browser.close() 不同,browser.disconnect() 不会关闭浏览器,甚至不会关闭任何页面。

Note

可以使用 Browser.wsEndpoint() 来返回 WebSocket URL,也可以使用命令行开启 debug 模式来获取。具体查看Browser Endpoints

Browser 类

Browser代表一个浏览器,launch/connect 会返回该对象实例。他是我们操作的入口,具有以下属性和方法:

成员 描述
connected: boolean 只读属性,表示 puppeteer 是否连接到该浏览器
close() -> Promise<void> 关闭浏览器以及关联的所有页面
disconnect() -> Promise<void> 断开 puppeteer 与浏览器的连接
defaultBrowserContext() -> BrowserContext 获取默认的浏览器上下文,注意他无法被关闭
createBrowserContext(opts) -> Promise<BrowserContext> 创建一个浏览器上下文
browserContexts() -> BrowserContext[] 获取打开的浏览器上下文列表
newPage() -> Promise<Page> 在默认浏览器上下文中创建一个新页面
pages() -> Promise<Page[]> 返回所有浏览器上下文中的所有页面
wsEndpoint() -> string 返回连接到该浏览器的 WebSocket URL

BrowserContext

如果需要隔离自动化任务,可以创建一个浏览器上下文

每次 launch 时,都会包含一个默认的浏览器上下文,他们是共享的。也可以使用 Browser.createBrowserContext() 来创建一个独立的上下文,他们具有独立的 cookies/localStorage 等:

JavaScript
import puppeteer from "puppeteer";

const browser = await puppeteer.launch();

const context = await browser.createBrowserContext();

const page1 = await context.newPage();
const page2 = await context.newPage();

await context.close();

Note

该类包含了 Browser 类中的多数相关方法,不同是他针对的是当前上下文本身。例如 BrowserContext.pages() 返回的是当前浏览器上下文打开的 page 对象。