Limit the number of redirects and store all accessed URLs
and0x00 opened this issue · comments
Rod Version: v0.116.0
The code to demonstrate your question
Hello, how could I implement rod.Hijack in order to allow a limited number of redirects when accessing a web page? I would also like to store all pages accessed, is this possible? THANKS!!!
My current code looks like this:
package browser
import (
"log"
"time"
"github.com/go-rod/rod"
"github.com/go-rod/rod/lib/launcher"
"github.com/go-rod/rod/lib/proto"
"github.com/go-rod/stealth"
)
// Browser struct represents the browser.
type Browser struct {
browser *rod.Browser
pages []*Page
debug bool
}
// Page struct represents the browser page.
type Page struct {
page *rod.Page
stealth bool
url string
maxRedirects int
}
// NewBrowser initializes a new Browser instance.
func NewBrowser(debug bool) *Browser {
return &Browser{
debug: debug,
}
}
// Initialize starts the browser.
func (b *Browser) Start() error {
log.Println("Initializing browser...")
// Launcher configuration
l := launcher.New()
if b.debug {
l = l.Headless(false).Devtools(true)
}
defer l.Cleanup()
// Launching the browser
launchURL, err := l.Launch()
if err != nil {
log.Printf("Failed to launch browser: %v\n", err)
return err
}
log.Printf("Browser launched at URL: %s\n", launchURL)
b.browser = rod.New().ControlURL(launchURL)
if b.debug {
b.browser = b.browser.Trace(true).SlowMotion(3 * time.Second)
}
// Connecting to the browser
err = b.browser.Connect()
if err != nil {
log.Printf("Failed to connect to browser: %v\n", err)
return err
}
log.Println("Browser connected successfully.")
err = b.NewPage("https://youtube.com", true, 1)
if err != nil {
log.Printf("Failed to open initial blank page: %v\n", err)
return err
}
log.Println("Page created, waiting for load and stability...")
b.pages[0].page.MustWaitLoad().MustWaitStable()
log.Println("Page opened successfully.")
return nil
}
// NewPage creates a new page in the browser.
func (b *Browser) NewPage(url string, isStealth bool, maxRedirects int) error {
var err error
var rodPage *rod.Page
if isStealth {
if b.debug {
log.Fatalln("Stealth mode is not supported in debug mode.")
}
log.Printf("Creating stealth page for URL: %s\n", url)
rodPage, err = stealth.Page(b.browser)
if err != nil {
log.Printf("Failed to create stealth page: %v\n", err)
return err
}
} else {
log.Printf("Creating new page for URL: %s\n", url)
rodPage, err = b.browser.Page(proto.TargetCreateTarget{URL: url})
if err != nil {
log.Printf("Failed to create new page: %v\n", err)
return err
}
}
rodPage.MustNavigate(url)
time.Sleep(5 * time.Second)
page := &Page{
page: rodPage,
url: url,
stealth: isStealth,
maxRedirects: maxRedirects,
}
b.pages = append(b.pages, page)
log.Println("New page created successfully.")
return nil
}
google "golang http client CheckRedirect"