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 を参照してください。
Run
では多くの値が返されるため、Action
を使用できません
ActionFunc
でラップします。
ctx、キャンセル := chromedp.NewContext(context.Background())defer cancel()chromedp.Run(ctx, chromedp.ActionFunc(func(ctx context.Context) エラー { _, err := domain.SomeAction().Do (ctx) エラーを返します}))
ヘッドレス環境でchromedpを使いたい
最も簡単な方法は、chromedp/headless-shell イメージ内で chromedp を使用する Go プログラムを実行することです。このイメージには、Chrome の小型ヘッドレス ビルドであるheadless-shell
含まれており、 chromedp
これをすぐに見つけることができます。
headless-shell
- chromedp
テストに使用されるheadless-shell
のビルド
chromedp: ウェブを推進する新しい方法 - GopherCon SG 2017 の講演
Chrome DevTools プロトコル - Chrome DevTools プロトコル リファレンス
chromedp の例 - chromedp
のより複雑な例
github.com/chromedp/cdproto
- 生成された Chrome DevTools プロトコル API の Go リファレンス
github.com/chromedp/pdlgen
- cdproto
の生成に使用されるツール
github.com/chromedp/chromedp-proxy
- CDP クライアントとブラウザをログ記録するためのシンプルな CDP プロキシ