Go的Playwright库
qingheluo2025-05-16清河洛37
Playwright是一个微软开源的跨平台的浏览器自动化工具,通过单个API自动执行Chromium,Firefox和WebKit浏览器,支持无头浏览器(headless)目前官方仅支持python、node、java和.NET,暂时没有官方的Go支持,要想通过Go使用Playwright,需要使用第三方库playwright-go就是在github上的开源的用于使用Go来操作Playwright的库,开源网址是:playwright-go安装库go get -u github.com/playwright-community/playwright-go下载浏览器及驱动
方式一,通过命令...
Playwright是一个微软开源的跨平台的浏览器自动化工具,通过单个API自动执行Chromium,Firefox和WebKit浏览器,支持无头浏览器(headless)
目前官方仅支持python、node、java和.NET,暂时没有官方的Go支持,要想通过Go使用Playwright,需要使用第三方库
playwright-go就是在github上的开源的用于使用Go来操作Playwright的库,开源网址是:playwright-go
安装库
go get -u github.com/playwright-community/playwright-go
下载浏览器及驱动
方式一,通过命令行安装
1.安装命令行工具
go install github.com/playwright-community/playwright-go/cmd/playwright
2.使用命令行安装
playwright install [--with-deps]
使用了--with-deps选项会额外安装必要的依赖项
方式二,在Go文件中使用代码进行安装
playwright.Install(options ...*RunOptions) error
因为安装系统依赖项需要权限,该方式可能会有某些依赖项安装失败
type RunOptions struct {
DriverDirectory string
// 驱动下载目录,也可使用环境变量PLAYWRIGHT_DRIVER_PATH设置
// 实际为:该值+"/ms-playwright-go/x.xx.xx"目录
// Windows: %USERPROFILE%\AppData\Local
// macOS: ~/Library/Caches
// Linux: ~/.cache
OnlyInstallShell bool
// 只下载无头shell(仅适用于chromium浏览器)
SkipInstallBrowsers bool
// 是否跳过浏览器程序下载
Browsers []string
// chromium、webkit、firefox
}
Playwright的常用使用步骤
1. 创建Playwright实例
Playwright实例中有已经包装好的针对各种浏览器的统一的操作方法
Run(options ...*RunOptions) (*Playwright, error)
type Playwright struct {
Selectors Selectors
// 安装自定义选择器引擎
Chromium BrowserType
Firefox BrowserType
WebKit BrowserType
Request APIRequest
}
Playwright常用方法
Stop() error 停止 Playwright 实例
2. 创建Browser实例
Browser实例常用来设置浏览器启动参数、沙盒模式、下载目录、环境变量、浏览器可执行文件、代理、用户数据目录等
首先通过Playwright实例的属性获取BrowserType,然后通过BrowserType的Launch()方法创建Browser实例
type BrowserType interface { ExecutablePath() string // 获取浏览器可执行文件的路径 Launch(options ...BrowserTypeLaunchOptions) (Browser, error) // 获取Browser实例 LaunchPersistentContext(userDataDir string, options ...BrowserTypeLaunchPersistentContextOptions) (BrowserContext, error) // 创建一个指定用户数据目录的浏览器上下文实例 // 该目录存储浏览器会话数据,如Cookie和本地存储 // 传递一个空字符串会创建临时目录 // 浏览器不允许使用同一用户数据目录启动多个实例 Name() string // 获取浏览器名称,chromium、webkit、firefox }
Playwright.(Chromium|Firefox|WebKit).Launch(options ...BrowserTypeLaunchOptions) (Browser, error)
type BrowserTypeLaunchOptions struct { Args []string `json:"args"` // 传递给浏览器实例的参数,注意某些参数可能会破坏Playwright功能 Channel *string `json:"channel"` // 指定要使用的浏览器的分发渠道 // chromium(无头模式)、msedge、chrome、chrome-beta、chrome-dev等等 ChromiumSandbox *bool `json:"chromiumSandbox"` // 是否开启沙河模式 DownloadsPath *string `json:"downloadsPath"` // 指定下载目录,默认创建临时目录 // 下载的文件在浏览器关闭时会被删除 Env map[string]string `json:"env"` // 指定浏览器可见的环境变量 ExecutablePath *string `json:"executablePath"` // 指定浏览器可执行文件的路径,相对路径相对于当前工作目录 Headless *bool `json:"headless"` // 是否使用无头模式,默认true Proxy *Proxy `json:"proxy"` SlowMo *float64 `json:"slowMo"` // 将Playwright操作减慢指定的毫秒数 Timeout *float64 `json:"timeout"` // 浏览器启动超时时间(毫秒),默认300000,设为0禁用超时 TracesDir *string `json:"tracesDir"` // 保存用户数据到指定目录 }
Browser常用方法
type Browser interface { Emit(name string, payload ...interface{}) bool ListenerCount(name string) int On(name string, handler interface{}) Once(name string, handler interface{}) RemoveListener(name string, handler interface{}) RemoveListeners(name string) OnDisconnected(fn func(Browser)) // 当连接断开时 BrowserType() BrowserType Close() error // 关闭Browser实例 Contexts() []BrowserContext // 返回所有打开的浏览器上下文 IsConnected() bool // 浏览器进程是否已连接 NewContext(options ...BrowserNewContextOptions) (BrowserContext, error) // 创建一个BrowserContext实例 NewPage(options ...BrowserNewPageOptions) (Page, error) // 在新的BrowserContext中创建新的Page // 关闭此页面也将关闭上下文 Version() string // 获取浏览器的版本 }
3. 创建BrowserContext实例
BrowserContext实例常用来设置浏览器的功能,如下载、安全、缩放、浏览器尺寸、定位、权限、用户状态、用户代理等信息
BrowserContext实例创建有两种方式:
BrowserType.LaunchPersistentContext()