1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-03-11 15:00:10 +02:00
ferret/pkg/drivers/cdp/helpers.go

112 lines
2.1 KiB
Go
Raw Normal View History

package cdp
2018-09-26 22:03:06 -04:00
import (
"context"
"github.com/MontFerret/ferret/pkg/drivers"
"github.com/MontFerret/ferret/pkg/drivers/common"
2018-09-26 22:03:06 -04:00
"github.com/mafredri/cdp"
"github.com/mafredri/cdp/protocol/emulation"
"github.com/mafredri/cdp/protocol/network"
2018-09-26 22:03:06 -04:00
"github.com/mafredri/cdp/protocol/page"
"golang.org/x/sync/errgroup"
2018-09-26 22:03:06 -04:00
)
2018-11-15 14:33:53 -05:00
type (
batchFunc = func() error
)
2018-09-26 22:03:06 -04:00
func runBatch(funcs ...batchFunc) error {
eg := errgroup.Group{}
for _, f := range funcs {
eg.Go(f)
}
return eg.Wait()
}
func enableFeatures(ctx context.Context, client *cdp.Client, params drivers.Params) error {
if err := client.Page.Enable(ctx); err != nil {
return err
}
return runBatch(
func() error {
return client.Page.SetLifecycleEventsEnabled(
ctx,
page.NewSetLifecycleEventsEnabledArgs(true),
)
},
func() error {
return client.DOM.Enable(ctx)
},
func() error {
return client.Runtime.Enable(ctx)
},
2018-09-27 00:26:56 -04:00
func() error {
ua := common.GetUserAgent(params.UserAgent)
2018-11-12 14:53:36 -05:00
//logger.
// Debug().
// Timestamp().
// Str("user-agent", ua).
// Msg("using User-Agent")
2018-11-12 14:53:36 -05:00
// do not use custom user agent
if ua == "" {
return nil
}
return client.Emulation.SetUserAgentOverride(
ctx,
emulation.NewSetUserAgentOverrideArgs(ua),
)
},
2018-11-21 22:45:00 -05:00
func() error {
return client.Network.Enable(ctx, network.NewEnableArgs())
},
2018-11-21 22:45:00 -05:00
func() error {
return client.Page.SetBypassCSP(ctx, page.NewSetBypassCSPArgs(true))
},
func() error {
if params.Viewport == nil {
return nil
}
orientation := emulation.ScreenOrientation{}
if !params.Viewport.Landscape {
orientation.Type = "portraitPrimary"
orientation.Angle = 0
} else {
orientation.Type = "landscapePrimary"
orientation.Angle = 90
}
scaleFactor := params.Viewport.ScaleFactor
if scaleFactor <= 0 {
scaleFactor = 1
}
deviceArgs := emulation.NewSetDeviceMetricsOverrideArgs(
params.Viewport.Width,
params.Viewport.Height,
scaleFactor,
params.Viewport.Mobile,
).SetScreenOrientation(orientation)
return client.Emulation.SetDeviceMetricsOverride(
ctx,
deviceArgs,
)
},
)
}