В этой статье блога мы углубимся в мир chromedp и рассмотрим различные методы выполнения команд CDP (протокол Chrome DevTools). Мы предоставим примеры кода для каждого метода, что позволит вам понять и реализовать их в своих проектах. Независимо от того, являетесь ли вы новичком или опытным разработчиком, цель этого руководства — дать вам знания, позволяющие эффективно использовать возможности chromedp.
- Использование chromedp.Run:
Пакет chromedp предоставляет функцию «Выполнить», которая позволяет синхронно выполнять команды CDP. Вот пример:
package main
import (
"context"
"log"
"github.com/chromedp/cdproto/network"
"github.com/chromedp/chromedp"
)
func main() {
ctx, cancel := chromedp.NewContext(context.Background())
defer cancel()
var response string
err := chromedp.Run(ctx,
chromedp.Navigate("https://example.com"),
chromedp.WaitVisible("body"),
chromedp.OuterHTML("html", &response),
)
if err != nil {
log.Fatal(err)
}
log.Println(response)
}
- Использование chromedp.RunResponse:
Метод RunResponse позволяет выполнять команды CDP и получать ответ. Вот пример:
package main
import (
"context"
"log"
"github.com/chromedp/cdproto/network"
"github.com/chromedp/chromedp"
)
func main() {
ctx, cancel := chromedp.NewContext(context.Background())
defer cancel()
var response *network.GetResponseBodyResult
err := chromedp.RunResponse(ctx,
chromedp.Navigate("https://example.com"),
chromedp.WaitVisible("body"),
chromedp.ActionFunc(func(ctx context.Context) error {
result, err := network.GetResponseBody().Do(ctx)
if err != nil {
return err
}
response = result
return nil
}),
)
if err != nil {
log.Fatal(err)
}
log.Println(response.Body)
}
- Использование chromedp.Evaluate:
Метод Evaluate позволяет выполнять код JavaScript в контексте браузера и получать результат. Вот пример:
package main
import (
"context"
"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://example.com"),
chromedp.Evaluate(`document.title`, &title),
)
if err != nil {
log.Fatal(err)
}
log.Println(title)
}
- Использование chromedp.ActionFunc:
Метод ActionFunc позволяет определять пользовательские действия с помощью команд CDP. Вот пример:
package main
import (
"context"
"log"
"github.com/chromedp/chromedp"
)
func main() {
ctx, cancel := chromedp.NewContext(context.Background())
defer cancel()
var title string
action := chromedp.ActionFunc(func(ctx context.Context) error {
var err error
title, err = chromedp.Title().Do(ctx)
return err
})
err := chromedp.Run(ctx,
chromedp.Navigate("https://example.com"),
action,
)
if err != nil {
log.Fatal(err)
}
log.Println(title)
}