chromedp
包是一种更快、更简单的方法来驱动支持 Go 中的 Chrome DevTools 协议的浏览器,无需外部依赖。
按照通常的 Go 方式安装:
$ go get -u github.com/chromedp/chromedp
请参阅 Go 参考以获取文档和示例。此外,示例存储库包含更多有关复杂操作的示例以及其他常见的高级任务,例如获取全页屏幕截图。
我看不到任何 Chrome 浏览器窗口
默认情况下,Chrome 以无头模式运行。请参阅DefaultExecAllocatorOptions
以及覆盖默认选项的示例。
我看到“上下文已取消”错误
当与浏览器的连接丢失时, chromedp
会取消上下文,并可能导致此错误。例如,如果手动关闭浏览器,或者浏览器进程已被终止或以其他方式终止,则会发生这种情况。
我的 Go 程序完成后 Chrome 就会退出
在 Linux 上, chromedp
配置为通过强制终止任何已启动的 Chrome 子进程来避免资源泄漏。如果您需要启动长时间运行的 Chrome 实例,请手动启动 Chrome 并使用RemoteAllocator
进行连接。
在没有
Run
情况下执行操作会导致“无效上下文”
默认情况下, chromedp
上下文没有执行器,但如果需要,可以手动指定;有关示例,请参阅问题#326。
我无法将
Action
与Run
一起使用,因为它返回许多值
用ActionFunc
包装它:
ctx, cancel := chromedp.NewContext(context.Background())defer cancel()chromedp.Run(ctx, chromedp.ActionFunc(func(ctx context.Context) error { _, err := domain.SomeAction().Do (ctx) 返回错误}))
我想在无头环境中使用 chromedp
最简单的方法是在 chromedp/headless-shell 镜像中运行使用 chromedp 的 Go 程序。该图像包含headless-shell
,这是 Chrome 的一个较小的无头构建, chromedp
能够开箱即用地找到它。
headless-shell
- 用于测试chromedp
的headless-shell
版本
chromedp:驱动网络的新方式 - GopherCon SG 2017 演讲
Chrome DevTools 协议 - Chrome DevTools 协议参考
chromedp 示例 - chromedp
的更复杂示例
github.com/chromedp/cdproto
- 生成的 Chrome DevTools Protocol API 的 Go 参考
github.com/chromedp/pdlgen
- 用于生成cdproto
的工具
github.com/chromedp/chromedp-proxy
- 用于记录 CDP 客户端和浏览器的简单 CDP 代理