browser

package
v0.5.13 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 13, 2026 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Overview

Package browser 提供浏览器自动化工具

本包实现了浏览器自动化功能:

  • 网页抓取:获取网页内容

  • 截图:获取网页截图

  • 元素交互:点击、输入、滚动

  • JavaScript 执行:运行自定义脚本

  • 多标签页管理

  • Playwright: 浏览器自动化

  • Puppeteer: Chrome DevTools Protocol

  • Selenium: WebDriver API

使用示例:

browser := browser.NewBrowser()
content, err := browser.GetContent(ctx, "https://example.com")

Index

Constants

View Source
const MaxBrowserResponseSize = 10 * 1024 * 1024

MaxBrowserResponseSize 浏览器最大响应体大小(10MB)

Variables

View Source
var (
	// ErrBrowserNotAvailable 浏览器不可用
	ErrBrowserNotAvailable = errors.New("browser not available")

	// ErrPageNotFound 页面未找到
	ErrPageNotFound = errors.New("page not found")

	// ErrElementNotFound 元素未找到
	ErrElementNotFound = errors.New("element not found")

	// ErrTimeout 操作超时
	ErrTimeout = errors.New("operation timeout")

	// ErrNavigationFailed 导航失败
	ErrNavigationFailed = errors.New("navigation failed")
)

Functions

This section is empty.

Types

type Browser

type Browser struct {
	// contains filtered or unexported fields
}

Browser 简化浏览器 使用 HTTP 客户端实现基本的网页抓取功能

func NewBrowser

func NewBrowser(config ...*BrowserConfig) *Browser

NewBrowser 创建浏览器

func (*Browser) GetContent

func (b *Browser) GetContent(ctx context.Context, pageURL string) (*PageContent, error)

GetContent 获取页面内容

func (b *Browser) GetLinks(ctx context.Context, pageURL string) ([]Link, error)

GetLinks 获取页面链接

func (*Browser) GetMarkdown

func (b *Browser) GetMarkdown(ctx context.Context, pageURL string) (string, error)

GetMarkdown 获取页面 Markdown 内容

func (*Browser) GetText

func (b *Browser) GetText(ctx context.Context, pageURL string) (string, error)

GetText 获取页面纯文本

type BrowserConfig

type BrowserConfig struct {
	// Headless 无头模式
	Headless bool `json:"headless"`

	// Timeout 默认超时时间
	Timeout time.Duration `json:"timeout"`

	// UserAgent 用户代理
	UserAgent string `json:"user_agent"`

	// ProxyURL 代理地址
	ProxyURL string `json:"proxy_url"`

	// ViewportWidth 视口宽度
	ViewportWidth int `json:"viewport_width"`

	// ViewportHeight 视口高度
	ViewportHeight int `json:"viewport_height"`

	// JavaScriptEnabled 是否启用 JavaScript
	JavaScriptEnabled bool `json:"javascript_enabled"`

	// ImageLoadingEnabled 是否加载图片
	ImageLoadingEnabled bool `json:"image_loading_enabled"`
}

BrowserConfig 浏览器配置

func DefaultBrowserConfig

func DefaultBrowserConfig() *BrowserConfig

DefaultBrowserConfig 默认浏览器配置

type BrowserTool

type BrowserTool struct {
	// contains filtered or unexported fields
}

BrowserTool 浏览器工具

func NewBrowserTool

func NewBrowserTool(config ...*BrowserConfig) *BrowserTool

NewBrowserTool 创建浏览器工具

func (*BrowserTool) Description

func (bt *BrowserTool) Description() string

Description 工具描述

func (*BrowserTool) Execute

func (bt *BrowserTool) Execute(ctx context.Context, args map[string]any) (any, error)

Execute 执行工具

func (*BrowserTool) Name

func (bt *BrowserTool) Name() string

Name 工具名称

func (*BrowserTool) Schema

func (bt *BrowserTool) Schema() map[string]any

Schema 工具 Schema

func (*BrowserTool) Validate

func (bt *BrowserTool) Validate(args map[string]any) error

Validate 验证参数

type Image

type Image struct {
	// Src 图片地址
	Src string `json:"src"`

	// Alt 替代文本
	Alt string `json:"alt"`

	// Width 宽度
	Width int `json:"width,omitempty"`

	// Height 高度
	Height int `json:"height,omitempty"`
}

Image 图片

type JSONAPITool

type JSONAPITool struct {
	// contains filtered or unexported fields
}

JSONAPITool JSON API 请求工具

func NewJSONAPITool

func NewJSONAPITool(timeout ...time.Duration) *JSONAPITool

NewJSONAPITool 创建 JSON API 工具

func (*JSONAPITool) Description

func (jt *JSONAPITool) Description() string

Description 工具描述

func (*JSONAPITool) Execute

func (jt *JSONAPITool) Execute(ctx context.Context, args map[string]any) (any, error)

Execute 执行工具

func (*JSONAPITool) Name

func (jt *JSONAPITool) Name() string

Name 工具名称

func (*JSONAPITool) Schema

func (jt *JSONAPITool) Schema() map[string]any

Schema 工具 Schema

func (*JSONAPITool) Validate

func (jt *JSONAPITool) Validate(args map[string]any) error

Validate 验证参数

type Link struct {
	// Text 链接文本
	Text string `json:"text"`

	// URL 链接地址
	URL string `json:"url"`

	// Title 链接标题
	Title string `json:"title,omitempty"`
}

Link 链接

type PageContent

type PageContent struct {
	// URL 页面 URL
	URL string `json:"url"`

	// Title 页面标题
	Title string `json:"title"`

	// HTML 原始 HTML
	HTML string `json:"html,omitempty"`

	// Text 纯文本内容
	Text string `json:"text"`

	// Markdown Markdown 格式内容
	Markdown string `json:"markdown,omitempty"`

	// Links 页面链接
	Links []Link `json:"links,omitempty"`

	// Images 页面图片
	Images []Image `json:"images,omitempty"`

	// Metadata 元数据
	Metadata map[string]string `json:"metadata,omitempty"`

	// LoadTime 加载时间(毫秒)
	LoadTime int64 `json:"load_time_ms"`
}

PageContent 页面内容

type ScreenshotBackend

type ScreenshotBackend interface {
	Capture(ctx context.Context, url string, opts ScreenshotOptions) (image []byte, format string, err error)
}

ScreenshotBackend 是真实截图后端接口。

框架不内置浏览器自动化(Playwright/Puppeteer/chromedp 等为重依赖),通过本接口 让用户注入真实后端。注入后 ScreenshotTool 返回真实截图字节;未注入时返回带明确 标注的占位 SVG(不伪造成真实截图)。

Capture 返回截图字节与图像格式(如 "png"/"jpeg")。

type ScreenshotOptions

type ScreenshotOptions struct {
	FullPage bool // 是否整页截图
	Width    int  // 视口宽度
	Height   int  // 视口高度
}

ScreenshotOptions 截图参数。

type ScreenshotTool

type ScreenshotTool struct {
	// contains filtered or unexported fields
}

ScreenshotTool 截图工具

func NewScreenshotTool

func NewScreenshotTool(config ...*BrowserConfig) *ScreenshotTool

NewScreenshotTool 创建截图工具

func (*ScreenshotTool) Description

func (st *ScreenshotTool) Description() string

Description 工具描述

func (*ScreenshotTool) Execute

func (st *ScreenshotTool) Execute(ctx context.Context, args map[string]any) (any, error)

Execute 执行工具

func (*ScreenshotTool) Name

func (st *ScreenshotTool) Name() string

Name 工具名称

func (*ScreenshotTool) Schema

func (st *ScreenshotTool) Schema() map[string]any

Schema 工具 Schema

func (*ScreenshotTool) Validate

func (st *ScreenshotTool) Validate(args map[string]any) error

Validate 验证参数

func (*ScreenshotTool) WithBackend

func (st *ScreenshotTool) WithBackend(b ScreenshotBackend) *ScreenshotTool

WithBackend 注入真实截图后端并返回自身(链式)。 注入后 Execute 返回真实截图;未注入时返回占位 SVG。

type URLParseTool

type URLParseTool struct{}

URLParseTool URL 解析工具

func NewURLParseTool

func NewURLParseTool() *URLParseTool

NewURLParseTool 创建 URL 解析工具

func (*URLParseTool) Description

func (ut *URLParseTool) Description() string

Description 工具描述

func (*URLParseTool) Execute

func (ut *URLParseTool) Execute(ctx context.Context, args map[string]any) (any, error)

Execute 执行工具

func (*URLParseTool) Name

func (ut *URLParseTool) Name() string

Name 工具名称

func (*URLParseTool) Schema

func (ut *URLParseTool) Schema() map[string]any

Schema 工具 Schema

func (*URLParseTool) Validate

func (ut *URLParseTool) Validate(args map[string]any) error

Validate 验证参数

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL