diff --git a/node.go b/node.go index 000c6a0..64221f7 100644 --- a/node.go +++ b/node.go @@ -87,8 +87,21 @@ func (n node) ForEach(selector string, fn func(Node) error) error { } func (n node) SetHidden(val bool) error { - _, err := n.locator.Evaluate(fmt.Sprintf(`(element) => element.hidden = %t;`, val), nil) - return err + visible, err := n.locator.IsVisible() + if err != nil { + return fmt.Errorf("error checking visibility: %w", err) + } + if visible == !val { + return nil + } + + // Set the hidden property + _, err = n.locator.Evaluate(fmt.Sprintf(`(element) => element.hidden = %t;`, val), nil) + if err != nil { + return fmt.Errorf("error setting hidden property: %w", err) + } + + return nil } func escapeJavaScript(s string) string { diff --git a/playwright.go b/playwright.go index 0e81340..3656ece 100644 --- a/playwright.go +++ b/playwright.go @@ -36,6 +36,10 @@ const ( PlayWrightBrowserSelectionWebKit PlayWrightBrowserSelection = "webkit" ) +type Size struct { + Width int + Height int +} type PlayWrightBrowserOptions struct { UserAgent string // If empty, defaults to "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0" Browser PlayWrightBrowserSelection // If unset defaults to Firefox. @@ -46,6 +50,9 @@ type PlayWrightBrowserOptions struct { CookieJar ShowBrowser bool // If false, browser will be headless + + Dimensions Size + DarkMode bool } func cookieToPlaywrightOptionalCookie(cookie Cookie) playwright.OptionalCookie { @@ -76,6 +83,7 @@ func NewPlayWrightBrowser(opts ...PlayWrightBrowserOptions) (Browser, error) { UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0", Browser: PlayWrightBrowserSelectionFirefox, Timeout: &thirtySeconds, + DarkMode: false, } for _, o := range opts { @@ -91,6 +99,13 @@ func NewPlayWrightBrowser(opts ...PlayWrightBrowserOptions) (Browser, error) { if o.CookieJar != nil { opt.CookieJar = o.CookieJar } + if o.Dimensions.Width > 0 && o.Dimensions.Height > 0 { + opt.Dimensions = o.Dimensions + } + if o.DarkMode { + opt.DarkMode = true + } + opt.ShowBrowser = o.ShowBrowser } @@ -133,8 +148,26 @@ func NewPlayWrightBrowser(opts ...PlayWrightBrowserOptions) (Browser, error) { return nil, err } + var viewport *playwright.Size + if opt.Dimensions.Width > 0 && opt.Dimensions.Height > 0 { + viewport = &playwright.Size{ + Width: opt.Dimensions.Width, + Height: opt.Dimensions.Height, + } + } + + var scheme *playwright.ColorScheme + + if opt.DarkMode { + scheme = playwright.ColorSchemeDark + } else { + scheme = playwright.ColorSchemeNoPreference + } + c, err := browser.NewContext(playwright.BrowserNewContextOptions{ - UserAgent: playwright.String(opt.UserAgent), + UserAgent: playwright.String(opt.UserAgent), + Viewport: viewport, + ColorScheme: scheme, }) if err != nil { return nil, err