Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Stuck "undefined" sessions #5103

@williamoliveira

Description

@williamoliveira

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

Image

Additional context
Browserless version: ghcr.io/browserless/chrome:v2.34.1
Rod version: v0.116.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions