Skip to content

Commit

Permalink
feat: add navigate document with evaluate args
Browse files Browse the repository at this point in the history
bundleman committed Jul 21, 2024
1 parent c6bbdbb commit 29906e3
Showing 3 changed files with 60 additions and 7 deletions.
33 changes: 26 additions & 7 deletions pkg/drivers/cdp/page.go
Original file line number Diff line number Diff line change
@@ -2,6 +2,7 @@ package cdp

import (
"context"
"github.com/mafredri/cdp/protocol/runtime"
"hash/fnv"
"io"
"regexp"
@@ -30,13 +31,14 @@ type (
HTMLPageEvent string

HTMLPage struct {
mu sync.Mutex
closed values.Boolean
logger zerolog.Logger
conn *rpcc.Conn
client *cdp.Client
network *net.Manager
dom *dom.Manager
mu sync.Mutex
closed values.Boolean
logger zerolog.Logger
conn *rpcc.Conn
client *cdp.Client
network *net.Manager
dom *dom.Manager
evaluateArgs *drivers.EvaluateArgs
}
)

@@ -119,6 +121,8 @@ func LoadHTMLPage(
domManager,
)

p.SetEvaluateArgs(params.EvaluateArgs)

if params.URL != BlankPageURL && params.URL != "" {
err = p.Navigate(ctx, values.NewString(params.URL))
} else {
@@ -507,6 +511,17 @@ func (p *HTMLPage) Navigate(ctx context.Context, url values.String) error {
return err
}

if p.evaluateArgs != nil {
eval, err := p.client.Runtime.Evaluate(ctx, runtime.NewEvaluateArgs(p.evaluateArgs.Expression))
if err != nil {
return err
}

if eval.ExceptionDetails != nil {
return eval.ExceptionDetails
}
}

return p.reloadMainFrame(ctx)
}

@@ -664,3 +679,7 @@ func (p *HTMLPage) loadMainFrame(ctx context.Context) error {
func (p *HTMLPage) getCurrentDocument() *dom.HTMLDocument {
return p.dom.GetMainFrame()
}

func (p *HTMLPage) SetEvaluateArgs(args *drivers.EvaluateArgs) {
p.evaluateArgs = args
}
5 changes: 5 additions & 0 deletions pkg/drivers/params.go
Original file line number Diff line number Diff line change
@@ -37,6 +37,7 @@ type (
Ignore *Ignore
SimpleHTTPRequest *SimpleHTTPRequest
MaxRedirectsLimit uint8
EvaluateArgs *EvaluateArgs
}

SimpleHTTPRequest struct {
@@ -51,4 +52,8 @@ type (
Headers *HTTPHeaders
Viewport *Viewport
}

EvaluateArgs struct {
Expression string
}
)
29 changes: 29 additions & 0 deletions pkg/stdlib/html/document.go
Original file line number Diff line number Diff line change
@@ -248,6 +248,16 @@ func newPageLoadParams(url values.String, arg core.Value) (PageLoadParams, error
res.MaxRedirectsLimit = uint8(values.ToInt(maxRedirectsLimit))
}

evaluateArgsRaw, exists := obj.Get(values.NewString("evaluateArgs"))
if exists {
evaluateArgs, err := parseSimpleEvaluateArgs(evaluateArgsRaw)
if err != nil {
return res, err
}

res.EvaluateArgs = evaluateArgs
}

case types.String:
res.Driver = arg.(values.String).String()
case types.Boolean:
@@ -595,3 +605,22 @@ func parseSimpleHTTPRequest(value core.Value) (*drivers.SimpleHTTPRequest, error

return req, nil
}

func parseSimpleEvaluateArgs(value core.Value) (*drivers.EvaluateArgs, error) {
if err := core.ValidateType(value, types.Object); err != nil {
return nil, err
}

args := &drivers.EvaluateArgs{}

reqObj := value.(*values.Object)

expression, expressionExists := reqObj.Get("expression")
if !expressionExists {
return nil, errors.New("expression doesn't exists")
}

args.Expression = expression.String()

return args, nil
}

0 comments on commit 29906e3

Please sign in to comment.