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 代理