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
- Variables
- type Browser
- func (b *Browser) GetContent(ctx context.Context, pageURL string) (*PageContent, error)
- func (b *Browser) GetLinks(ctx context.Context, pageURL string) ([]Link, error)
- func (b *Browser) GetMarkdown(ctx context.Context, pageURL string) (string, error)
- func (b *Browser) GetText(ctx context.Context, pageURL string) (string, error)
- type BrowserConfig
- type BrowserTool
- type Image
- type JSONAPITool
- type Link
- type PageContent
- type ScreenshotBackend
- type ScreenshotOptions
- type ScreenshotTool
- func (st *ScreenshotTool) Description() string
- func (st *ScreenshotTool) Execute(ctx context.Context, args map[string]any) (any, error)
- func (st *ScreenshotTool) Name() string
- func (st *ScreenshotTool) Schema() map[string]any
- func (st *ScreenshotTool) Validate(args map[string]any) error
- func (st *ScreenshotTool) WithBackend(b ScreenshotBackend) *ScreenshotTool
- type URLParseTool
Constants ¶
const MaxBrowserResponseSize = 10 * 1024 * 1024
MaxBrowserResponseSize 浏览器最大响应体大小(10MB)
Variables ¶
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 = errors.New("navigation failed") )
Functions ¶
This section is empty.
Types ¶
type Browser ¶
type Browser struct {
// contains filtered or unexported fields
}
Browser 简化浏览器 使用 HTTP 客户端实现基本的网页抓取功能
func (*Browser) GetContent ¶
GetContent 获取页面内容
func (*Browser) GetMarkdown ¶
GetMarkdown 获取页面 Markdown 内容
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 浏览器配置
type BrowserTool ¶
type BrowserTool struct {
// contains filtered or unexported fields
}
BrowserTool 浏览器工具
func NewBrowserTool ¶
func NewBrowserTool(config ...*BrowserConfig) *BrowserTool
NewBrowserTool 创建浏览器工具
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 工具
type Link ¶
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 ¶
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) 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 解析工具