From 7f0f32ac4e0e21a46153e12688487e0f935294ce Mon Sep 17 00:00:00 2001 From: Rustem Kamalov Date: Thu, 3 Jul 2025 02:29:12 +0300 Subject: [PATCH] Handle failed navigation --- baidu/search.go | 11 +++++++++-- core/browser.go | 10 +++++++--- core/browser_test.go | 7 +++---- google/search.go | 14 +++++++++++--- yandex/search.go | 10 ++++++++-- 5 files changed, 38 insertions(+), 14 deletions(-) diff --git a/baidu/search.go b/baidu/search.go index ef87845..fd7fffd 100644 --- a/baidu/search.go +++ b/baidu/search.go @@ -74,7 +74,10 @@ func (baid *Baidu) Search(query core.Query) ([]core.SearchResult, error) { return nil, err } - page := baid.Navigate(url) + page, err := baid.Navigate(url) + if err != nil { + return nil, err + } results, err := page.Timeout(baid.Timeout).Search("div.c-container.new-pmd") if err != nil { @@ -154,7 +157,11 @@ func (baid *Baidu) SearchImage(query core.Query) ([]core.SearchResult, error) { } // Get anti-crawler cookies first, then reload page - page := baid.Navigate(url) + page, err := baid.Navigate(url) + if err != nil { + return nil, err + } + if !baid.LeavePageOpen { defer page.Close() } diff --git a/core/browser.go b/core/browser.go index 293a3d3..df4fdd7 100644 --- a/core/browser.go +++ b/core/browser.go @@ -97,7 +97,7 @@ func (b *Browser) IsInitialized() bool { } // Open URL -func (b *Browser) Navigate(URL string) *rod.Page { +func (b *Browser) Navigate(URL string) (*rod.Page, error) { logrus.Debug("Navigate to: ", URL) b.browser = rod.New().ControlURL(b.browserAddr) @@ -127,7 +127,11 @@ func (b *Browser) Navigate(URL string) *rod.Page { page.MustEmulate(devices.Device{ AcceptLanguage: b.LanguageCode, }) - page.MustNavigate(URL) + + err := page.Navigate(URL) + if err != nil { + return nil, err + } wait := page.MustWaitRequestIdle() // may cause bugs with google @@ -135,7 +139,7 @@ func (b *Browser) Navigate(URL string) *rod.Page { wait() } - return page + return page, nil } func (b *Browser) Close() error { diff --git a/core/browser_test.go b/core/browser_test.go index efc921d..c776949 100644 --- a/core/browser_test.go +++ b/core/browser_test.go @@ -38,13 +38,12 @@ func TestBot(t *testing.T) { t.Fatalf("Error failed initializing browser: %s", err) } - page := browser.Navigate("https://bot.sannysoft.com") + page, _ := browser.Navigate("https://bot.sannysoft.com") page.MustScreenshotFullPage("./test/screenshot_bot.png") - page = browser.Navigate("https://www.whatismybrowser.com/") + page, _ = browser.Navigate("https://www.whatismybrowser.com/") page.MustScreenshotFullPage("./test/screenshot_browser.png") - page = browser.Navigate("https://abrahamjuliot.github.io/creepjs/") + page, _ = browser.Navigate("https://abrahamjuliot.github.io/creepjs/") page.MustScreenshotFullPage("./test/screenshot_creep.png") - } diff --git a/google/search.go b/google/search.go index 9d79e84..d093e12 100644 --- a/google/search.go +++ b/google/search.go @@ -70,7 +70,7 @@ func (gogl *Google) getTotalResults(page *rod.Page) (int, error) { func (gogl *Google) solveCaptcha(page *rod.Page, sitekey, datas string) bool { logrus.Debugf("Solve google Captcha: sitekey=%s, datas=%s, url=%s", sitekey, datas, page.MustInfo().URL) - resp, err := gogl.CaptchaSolver.SolveReCaptcha2(sitekey, page.MustInfo().URL, datas) + resp, err := gogl.CaptchaSolver.SolveReCaptcha2(sitekey, page.MustInfo().URL) if err != nil { logrus.Errorf("Error solving google captcha: %s", err) return false @@ -143,7 +143,11 @@ func (gogl *Google) Search(query core.Query) ([]core.SearchResult, error) { if err != nil { return nil, err } - page := gogl.Navigate(url) + page, err := gogl.Navigate(url) + if err != nil { + return nil, err + } + defer gogl.close(page) gogl.preparePage(page) @@ -338,7 +342,11 @@ func (gogl *Google) SearchImage(query core.Query) ([]core.SearchResult, error) { return nil, err } - page := gogl.Navigate(url) + page, err := gogl.Navigate(url) + if err != nil { + return nil, err + } + defer gogl.close(page) for len(searchResultsMap) < query.Limit { diff --git a/yandex/search.go b/yandex/search.go index 853df64..d31b349 100644 --- a/yandex/search.go +++ b/yandex/search.go @@ -124,7 +124,10 @@ func (yand *Yandex) Search(query core.Query) ([]core.SearchResult, error) { return nil, err } - page := yand.Navigate(url) + page, err := yand.Navigate(url) + if err != nil { + return nil, err + } // Get all search results in page searchRes, err := page.Timeout(yand.Timeout).Search("li.serp-item") @@ -185,7 +188,10 @@ func (yand *Yandex) SearchImage(query core.Query) ([]core.SearchResult, error) { } searchPage += 1 - page := yand.Navigate(url) + page, err := yand.Navigate(url) + if err != nil { + return nil, err + } if !yand.LeavePageOpen { defer page.Close()