Skip to content

Client 客户端

🔌 `pkg/sdk/client.go` — 长生命周期采集客户端。

Client 持有连接池,复用 Chrome 实例,适合在程序生命周期内多次截图。

📁 源码:pkg/sdk/client.go

构造

方法源码说明
NewClient(opts)L78标准构造
NewRemoteClient(wsURL, max)L113连远程 Chrome

核心方法

方法源码说明
Capture(url, options...)L147链式截图
CaptureWithContextL152带 context
Screenshot(url, opts)L160结构体截图
ScreenshotWithContextL166带 context
ScreenshotBytesL189直接取 PNG 字节

证据方法

方法源码说明
ScreenshotHTMLL249HTML 源码
ScreenshotHeadersL261响应头
ScreenshotCookiesL280Cookies
ScreenshotConsoleL299Console 日志
ScreenshotNetworkL318网络日志

便捷封装

方法源码说明
ScreenshotWithFormatL337jpeg/webp 格式
ScreenshotToPathL353直接存盘
ScreenshotWithDelayL360额外等待
ScreenshotWithTimeoutL374自定义超时
ScreenshotWithProxyL388单代理
ScreenshotWithProxyListL402代理列表轮换
ScreenshotWithProxyFileL416代理文件
ScreenshotWithCustomHeadersL444自定义请求头
ScreenshotWithUserAgentL458自定义 UA
ScreenshotWithAcceptLanguageL472语言
ScreenshotWithFingerprintL486指纹注入

内部流程

生命周期

别忘 defer client.Close()

Client 持有 Chrome 连接池,不 Close 会泄漏浏览器进程。正确模式:

go
client, _ := sdk.NewClient(opts)
defer client.Close()   // ← 必须有
for _, url := range urls {
    res, _ := client.Capture(url, sdk.WithFullPage())
}
  • ✅ 长生命周期服务:构造一次,循环复用,程序退出前 Close
  • ✅ 短期一次性任务:用 sdk.SharedCapture 更省心,无需管理 Client

Client vs SharedCapture 复用路径

两条路径都复用 Driver 池,区别在池的归属与生命周期管理:

SharedCapture 走全局共享池单例(见 共享池),适合单次/少量调用;NewClient 自管池,适合循环复用。

下一步

基于 MIT 许可发布