chromedp - Go 浏览器自动化
Go 语言浏览器自动化库,基于 Chrome DevTools Protocol,无需外部依赖,支持截图、网络监控和复杂页面操作
GitHub: chromedp/chromedp (12,951 stars)
2026年4月15日
chromedevtoolsgo
什么是 chromedp?
chromedp 是一个 Go 语言库,用于驱动支持 Chrome DevTools Protocol 的浏览器。不需要外部依赖(如 Selenium),是 Go 语言中进行浏览器自动化的轻量级方案。
安装
go get -u github.com/chromedp/chromedp
需要系统已安装 Chrome/Chromium。
快速开始
package main
import (
"context"
"fmt"
"log"
"github.com/chromedp/chromedp"
)
func main() {
ctx, cancel := chromedp.NewContext(context.Background())
defer cancel()
var title string
err := chromedp.Run(ctx,
chromedp.Navigate("https://www.google.com"),
chromedp.Title(&title),
)
if err != nil {
log.Fatal(err)
}
fmt.Println("Page title:", title)
}
常用操作
查找和点击
chromedp.Click("#submit-button")
chromedp.SendKeys("input[name=username]", "myuser")
chromedp.Submit("form")
chromedp.WaitVisible("#result", chromedp.ByID)
截图
var buf []byte
chromedp.Run(ctx, chromedp.CaptureScreenshot(&buf))
// 全页面截图
chromedp.FullScreenshot(&buf, 90)
执行 JavaScript
var result string
chromedp.Evaluate(`document.title`, &result)
表单处理
chromedp.Run(ctx,
chromedp.Navigate("https://example.com/login"),
chromedp.SendKeys("#username", "myuser"),
chromedp.SendKeys("#password", "mypass"),
chromedp.Click("#login-btn"),
chromedp.WaitVisible("#dashboard"),
)
调试
ctx, cancel := chromedp.NewContext(
context.Background(),
chromedp.WithHeadless(false), // 显示浏览器窗口
)
Docker 环境
FROM chromedp/headless-shell
COPY myapp /myapp
CMD ["/myapp"]
最佳实践
- 复用 Context:创建一次
chromedp.NewContext,在多个操作中复用 defer cancel():确保资源释放- 显式等待:不要用
Sleep,用WaitVisible等条件等待 - 错误处理:每个操作都可能失败,做好错误处理
参考
- GitHub: chromedp/chromedp
- Go 文档: https://pkg.go.dev/github.com/chromedp/chromedp