Skip to content

Commit

Permalink
Feature/MontFerret#236 cookies (MontFerret#242)
Browse files Browse the repository at this point in the history
* Added KeepCookies option to CDP driver

* Added LoadDocumentParams

* Added COOKIE_GET and COOKIE_SET methods
  • Loading branch information
ziflex authored and Владимир Фетисов committed Apr 10, 2019
1 parent 3562e50 commit 04d60b2
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 12 deletions.
29 changes: 22 additions & 7 deletions pkg/drivers/cdp/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ package cdp

type (
Options struct {
proxy string
userAgent string
address string
Name string
Proxy string
UserAgent string
Address string
KeepCookies bool
}

Option func(opts *Options)
Expand All @@ -14,7 +16,8 @@ const DefaultAddress = "http://127.0.0.1:9222"

func newOptions(setters []Option) *Options {
opts := new(Options)
opts.address = DefaultAddress
opts.Name = DriverName
opts.Address = DefaultAddress

for _, setter := range setters {
setter(opts)
Expand All @@ -26,19 +29,31 @@ func newOptions(setters []Option) *Options {
func WithAddress(address string) Option {
return func(opts *Options) {
if address != "" {
opts.address = address
opts.Address = address
}
}
}

func WithProxy(address string) Option {
return func(opts *Options) {
opts.proxy = address
opts.Proxy = address
}
}

func WithUserAgent(value string) Option {
return func(opts *Options) {
opts.userAgent = value
opts.UserAgent = value
}
}

func WithKeepCookies() Option {
return func(opts *Options) {
opts.KeepCookies = true
}
}

func WithCustomName(name string) Option {
return func(opts *Options) {
opts.Name = name
}
}
44 changes: 39 additions & 5 deletions pkg/drivers/http/document.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,16 @@ import (
)

type HTMLDocument struct {
url values.String
docNode *goquery.Document
element drivers.HTMLElement
url values.String
cookies []drivers.HTTPCookie
}

func NewHTMLDocument(
url string,
node *goquery.Document,
url string,
cookies []drivers.HTTPCookie,
) (drivers.HTMLDocument, error) {
if url == "" {
return nil, core.Error(core.ErrMissedArgument, "document url")
Expand All @@ -35,7 +37,7 @@ func NewHTMLDocument(
return nil, err
}

return &HTMLDocument{values.NewString(url), node, el}, nil
return &HTMLDocument{node, el, values.NewString(url), cookies}, nil
}

func (doc *HTMLDocument) MarshalJSON() ([]byte, error) {
Expand Down Expand Up @@ -82,7 +84,7 @@ func (doc *HTMLDocument) Hash() uint64 {
}

func (doc *HTMLDocument) Copy() core.Value {
cp, err := NewHTMLDocument(string(doc.url), doc.docNode)
cp, err := NewHTMLDocument(doc.docNode, string(doc.url), doc.cookies)

if err != nil {
return values.None
Expand All @@ -92,7 +94,17 @@ func (doc *HTMLDocument) Copy() core.Value {
}

func (doc *HTMLDocument) Clone() core.Value {
cp, err := NewHTMLDocument(string(doc.url), goquery.CloneDocument(doc.docNode))
var cookies []drivers.HTTPCookie

if doc.cookies != nil {
cookies = make([]drivers.HTTPCookie, 0, len(doc.cookies))

for i, c := range doc.cookies {
cookies[i] = c
}
}

cp, err := NewHTMLDocument(goquery.CloneDocument(doc.docNode), string(doc.url), cookies)

if err != nil {
return values.None
Expand Down Expand Up @@ -161,6 +173,28 @@ func (doc *HTMLDocument) SetURL(_ context.Context, _ values.String) error {
return core.ErrInvalidOperation
}

func (doc *HTMLDocument) GetCookies(_ context.Context) (*values.Array, error) {
if doc.cookies == nil {
return values.NewArray(0), nil
}

arr := values.NewArray(len(doc.cookies))

for _, c := range doc.cookies {
arr.Push(c)
}

return arr, nil
}

func (doc *HTMLDocument) SetCookies(_ context.Context, _ ...drivers.HTTPCookie) error {
return core.ErrNotSupported
}

func (doc *HTMLDocument) DeleteCookies(_ context.Context, _ ...drivers.HTTPCookie) error {
return core.ErrNotSupported
}

func (doc *HTMLDocument) Navigate(_ context.Context, _ values.String) error {
return core.ErrNotSupported
}
Expand Down

0 comments on commit 04d60b2

Please sign in to comment.