Das Paket chromedp
ist eine schnellere und einfachere Möglichkeit, Browser, die das Chrome DevTools-Protokoll in Go unterstützen, ohne externe Abhängigkeiten zu steuern.
Installieren Sie auf die übliche Go-Art:
$ go get -u github.com/chromedp/chromedp
Die Dokumentation und Beispiele finden Sie in der Go-Referenz. Darüber hinaus enthält das Beispiel-Repository weitere Beispiele für komplexe Aktionen und andere häufige Aufgaben auf hoher Ebene, wie z. B. das Erstellen ganzseitiger Screenshots.
Ich kann kein Chrome-Browserfenster sehen
Standardmäßig wird Chrome im Headless-Modus ausgeführt. Siehe DefaultExecAllocatorOptions
und ein Beispiel zum Überschreiben der Standardoptionen.
Ich sehe die Fehlermeldung „Kontext abgebrochen“.
Wenn die Verbindung zum Browser unterbrochen wird, bricht chromedp
den Kontext ab und es kann zu diesem Fehler kommen. Dies geschieht beispielsweise, wenn der Browser manuell geschlossen wird oder wenn der Browserprozess abgebrochen oder auf andere Weise beendet wurde.
Chrome wird beendet, sobald mein Go-Programm beendet ist
Unter Linux ist chromedp
so konfiguriert, dass Ressourcenverluste vermieden werden, indem alle gestarteten untergeordneten Chrome-Prozesse zwangsweise beendet werden. Wenn Sie eine Chrome-Instanz mit langer Laufzeit starten müssen, starten Sie Chrome manuell und stellen Sie eine Verbindung mit RemoteAllocator
her.
Das Ausführen einer Aktion ohne
Run
führt zu einem „ungültigen Kontext“.
Standardmäßig verfügt ein chromedp
Kontext nicht über einen Executor, dieser kann jedoch bei Bedarf manuell angegeben werden; Ein Beispiel finden Sie in Ausgabe Nr. 326.
Ich kann keine
Action
mitRun
verwenden, da sie viele Werte zurückgibt
Wickeln Sie es mit einem ActionFunc
ein:
ctx, cancel := chromedp.NewContext(context.Background())defer cancel()chromedp.Run(ctx, chromedp.ActionFunc(func(ctx context.Context) error { _, err := domain.SomeAction().Do (ctx) return err}))
Ich möchte chromedp in einer Headless-Umgebung verwenden
Der einfachste Weg besteht darin, das Go-Programm auszuführen, das chromedp im chromedp/headless-shell-Image verwendet. Dieses Bild enthält headless-shell
, eine kleinere Headless-Version von Chrome, die chromedp
sofort finden kann.
headless-shell
– Ein Build der headless-shell
, der zum Testen chromedp
verwendet wird
chromedp: Eine neue Art, das Web voranzutreiben – Vortrag auf der GopherCon SG 2017
Chrome DevTools-Protokoll – Referenz zum Chrome DevTools-Protokoll
chromedp-Beispiele – Kompliziertere Beispiele für chromedp
github.com/chromedp/cdproto
– Go-Referenz für die generierte Chrome DevTools Protocol API
github.com/chromedp/pdlgen
– Tool zum Generieren cdproto
github.com/chromedp/chromedp-proxy
– ein einfacher CDP-Proxy zum Protokollieren von CDP-Clients und Browsern