Runner 核心
🏃 `pkg/runner/runner.go` — 执行器。
Runner 是单次截图执行的核心,协调 Driver 与 Writer。
📁 源码:
pkg/runner/runner.go
类型
Runner
Runner 持有一个 Driver 和一组 Writer,是单次执行的编排者。
Writer 接口
Writer 抽象 Result 的持久化:
go
type Writer interface {
// 把 Result 写到对应目的地
}实现见 Writer。
构造
go
func NewRunner(logger *slog.Logger, driver Driver, opts Options, writers []Writer) (*Runner, error)参数:
logger:结构化日志器driver:浏览器驱动(通常是ChromeDP)opts:截图配置writers:持久化 Writer 列表(可多个)
执行流程
Runner 内部职责
┌──────────────────────── Runner ────────────────────────┐
│ Options ──► 配置 Driver(视口/UA/代理/Cookie/JS/指纹) │
│ │
│ Driver ──► 导航 ► 交互 ► 截图 ► 采集证据 │
│ │
│ 组装 Result: │
│ ├─ URL/FinalURL/ResponseCode/Title │
│ ├─ HTML/Headers/Cookies/Console/Network/TLS │
│ ├─ Technologies (techdetect) │
│ ├─ PerceptionHash (phash) │
│ └─ SchemaVersion │
│ │
│ 分发 Result ──► [JSONLWriter, CSVWriter, StdoutWriter, DBWriter]
└──────────────────────────────────────────────────────────┘多 Writer 分发
Runner 不直接写文件,而是把 Result 分发给注入的 []Writer。这让输出格式可插拔:
与 DriverPool 的关系
Runner 本身持单 Driver;并发复用由 DriverPool/PoolDriver/共享池单例在更上层处理。Runner 关注"一次执行",池关注"复用"。