注册 登录

清河洛

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()

Browser.NewContext()

4. 创建Page实例

5. 进行相关操作

6. 最后由内向外依次关闭:Page、BrowserContext、Browser、Playwright



网址导航