-
Notifications
You must be signed in to change notification settings - Fork 978
Open
Description
Describe the bug
Every new session opened is creating an accompanying "undefined" session that does not goes away when the program is closed and cannot be closed using the kill endpoint
To Reproduce
package main
import (
"context"
"fmt"
"log/slog"
"net/url"
"os"
"regexp"
"testing"
"time"
"github.com/go-rod/rod"
"github.com/go-rod/rod/lib/proto"
"github.com/stretchr/testify/require"
)
func TestRodBrowserless(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
defer cancel()
browserURL := buildTestBrowserURL()
slog.Info("Connecting to browser...", slog.String("browserURL", browserURL))
browser := rod.New().NoDefaultDevice().ControlURL(browserURL).Context(ctx)
err := browser.Connect()
require.NoError(t, err, "failed to connect to browser")
slog.Info("Browser connected successfully")
slog.Info("Creating new page...")
page, err := browser.Page(proto.TargetCreateTarget{URL: "about:blank"})
require.NoError(t, err, "failed to open about:blank page")
page = page.Context(ctx)
slog.Info("New page created successfully")
page.MustSetUserAgent(&proto.NetworkSetUserAgentOverride{
UserAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
})
slog.Info("Loading Google...")
err = page.Timeout(60 * time.Second).Navigate("https://www.google.com")
require.NoError(t, err, "failed to navigate to Google")
slog.Info("Navigation succeeded, waiting for page load...")
page.MustWaitLoad()
slog.Info("Page loaded successfully")
slog.Info("Calling page.Close()...")
err = page.Context(ctx).Timeout(10 * time.Second).Close()
if err != nil {
slog.Error("failed to close page", slog.Any("err", err))
} else {
slog.Info("Page closed")
}
slog.Info("Calling browser.Close()...")
err = browser.Context(ctx).Timeout(10 * time.Second).Close()
if err != nil {
slog.Error("failed to close browser", slog.Any("err", err))
} else {
slog.Info("Browser closed")
}
slog.Info("Test completed successfully")
}
func buildTestBrowserURL() string {
dir := "/usr/src/app/sessions/rod-test"
browserlessAddress := getEnv("BROWSERLESS_ADDRESS", "browserless:3000")
browserlessToken := getEnv("BROWSERLESS_TOKEN", "KTDOGQMWARODRBJS")
chromeAddress := getEnv("CHROME_ADDRESS", fmt.Sprintf("ws://%s/chrome?token=%s", browserlessAddress, browserlessToken))
launchArgs := regexp.MustCompile(`\s+`).ReplaceAllString(fmt.Sprintf(
`{"args":[
"--disable-web-security",
"--allow-running-insecure-content",
"--disable-default-apps",
"--no-sandbox",
"--window-size=1024,768",
"--user-data-dir=%s"
]}`,
dir,
), "")
return fmt.Sprintf("%s&launch=%s", chromeAddress, url.QueryEscape(launchArgs))
}
func getEnv(key, defaultValue string) string {
value := os.Getenv(key)
if value == "" {
return defaultValue
}
return value
}Screenshots
Additional context
Browserless version: ghcr.io/browserless/chrome:v2.34.1
Rod version: v0.116.2
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels