Fix linter errors. Enhance error handling in search functions across multiple engines

This commit is contained in:
Rustem Kamalov
2026-04-14 01:12:17 +03:00
parent bc59de46fb
commit de59d07d47
5 changed files with 70 additions and 19 deletions

View File

@@ -166,8 +166,14 @@ func (baid *Baidu) SearchImage(query core.Query) ([]core.SearchResult, error) {
if !baid.Browser.LeavePageOpen {
defer page.Close()
}
page.Reload()
page.WaitLoad()
if err := page.Reload(); err != nil {
baid.logger.Error("Page reload failed: %s", err)
return nil, core.ErrSearchTimeout
}
if err := page.WaitLoad(); err != nil {
baid.logger.Error("Page load wait failed: %s", err)
return nil, core.ErrSearchTimeout
}
result, err := page.Timeout(baid.Timeout).Search("body > pre")
if err != nil {
@@ -235,7 +241,9 @@ func (baid *Baidu) SearchImage(query core.Query) ([]core.SearchResult, error) {
searchPage += 1
if !baid.Browser.LeavePageOpen {
page.Close()
if err := page.Close(); err != nil {
baid.logger.Debug("Page close error: %v", err)
}
}
}

View File

@@ -82,7 +82,9 @@ func (bing *Bing) acceptCookies(page *rod.Page) {
if err != nil {
return
}
consentBtn.Click(proto.InputMouseButtonLeft, 1)
if err := consentBtn.Click(proto.InputMouseButtonLeft, 1); err != nil {
bing.logger.Debug("Cookie consent click failed: %v", err)
}
time.Sleep(time.Millisecond * 500)
}
@@ -113,7 +115,10 @@ func (bing *Bing) Search(query core.Query) ([]core.SearchResult, error) {
}
defer bing.close(page)
page.WaitLoad()
if err := page.WaitLoad(); err != nil {
bing.logger.Error("Initial page load wait failed: %s", err)
return nil, core.ErrSearchTimeout
}
if bing.checkCaptcha(page) {
bing.logger.Error("Captcha detected: %s", url)
@@ -121,7 +126,10 @@ func (bing *Bing) Search(query core.Query) ([]core.SearchResult, error) {
}
bing.acceptCookies(page)
page.WaitLoad()
if err := page.WaitLoad(); err != nil {
bing.logger.Error("Post-consent page load wait failed: %s", err)
return nil, core.ErrSearchTimeout
}
organicElements, err := page.Timeout(bing.Timeout).Elements("li.b_algo")
if err != nil {
@@ -262,7 +270,10 @@ func (bing *Bing) SearchImage(query core.Query) ([]core.SearchResult, error) {
}
defer bing.close(page)
page.WaitLoad()
if err := page.WaitLoad(); err != nil {
bing.logger.Error("Initial image page load wait failed: %s", err)
return nil, core.ErrSearchTimeout
}
// Check for captcha
if bing.checkCaptcha(page) {
@@ -274,7 +285,10 @@ func (bing *Bing) SearchImage(query core.Query) ([]core.SearchResult, error) {
bing.acceptCookies(page)
// Wait for image results to load
page.WaitLoad()
if err := page.WaitLoad(); err != nil {
bing.logger.Error("Image results load wait failed: %s", err)
return nil, core.ErrSearchTimeout
}
time.Sleep(time.Second * 2)
// Find all image result containers using CSS selector

View File

@@ -285,7 +285,10 @@ func (ddg *DuckDuckGo) SearchImage(query core.Query) ([]core.SearchResult, error
}
// Wait for page to load
page.WaitLoad()
if err := page.WaitLoad(); err != nil {
ddg.logger.Error("Wait load failed: %s", err)
return searchResults, core.ErrSearchTimeout
}
time.Sleep(time.Second * 2) // Give time for images to load
// Try multiple selectors for DuckDuckGo image results

View File

@@ -147,7 +147,13 @@ func (gogl *Google) acceptCookies(page *rod.Page) {
gogl.logger.Debug("Cannot get cookie consent buttons: %s", err)
return
}
btnElms[3].Click(proto.InputMouseButtonLeft, 1)
if len(btnElms) < 4 {
gogl.logger.Debug("Cookie consent buttons unavailable")
return
}
if err := btnElms[3].Click(proto.InputMouseButtonLeft, 1); err != nil {
gogl.logger.Debug("Cookie consent click failed: %s", err)
}
}
@@ -219,7 +225,9 @@ func (gogl *Google) Search(query core.Query) ([]core.SearchResult, error) {
gogl.logger.Debug("Missing link")
continue
}
link.MoveMouseOut()
if err := link.MoveMouseOut(); err != nil {
gogl.logger.Debug("Move mouse out failed: %s", err)
}
href, err := link.Property("href")
if err != nil {
@@ -255,8 +263,13 @@ func (gogl *Google) Search(query core.Query) ([]core.SearchResult, error) {
// Unvail answer contents
for _, answ := range answers {
answ.Click(proto.InputMouseButtonLeft, 1)
answ.Focus()
if err := answ.Click(proto.InputMouseButtonLeft, 1); err != nil {
gogl.logger.Debug("Answer expand click failed: %s", err)
continue
}
if err := answ.Focus(); err != nil {
gogl.logger.Debug("Answer focus failed: %s", err)
}
//answ.Page().WaitRepaint()
}
time.Sleep(time.Millisecond * 2000)
@@ -274,7 +287,9 @@ func (gogl *Google) Search(query core.Query) ([]core.SearchResult, error) {
gogl.logger.Debug("Missing answer link")
continue
}
link.MoveMouseOut()
if err := link.MoveMouseOut(); err != nil {
gogl.logger.Debug("Move mouse out failed: %s", err)
}
href, err := link.Property("href")
if err != nil {
@@ -368,9 +383,18 @@ func (gogl *Google) SearchImage(query core.Query) ([]core.SearchResult, error) {
defer gogl.close(page)
for len(searchResultsMap) < query.Limit {
page.WaitLoad()
page.Mouse.Scroll(0, 1000000, 1)
page.WaitLoad()
if err := page.WaitLoad(); err != nil {
gogl.logger.Error("Image page load wait failed: %s", err)
return *core.ConvertSearchResultsMap(searchResultsMap), core.ErrSearchTimeout
}
if err := page.Mouse.Scroll(0, 1000000, 1); err != nil {
gogl.logger.Error("Image page scroll failed: %s", err)
return *core.ConvertSearchResultsMap(searchResultsMap), core.ErrSearchTimeout
}
if err := page.WaitLoad(); err != nil {
gogl.logger.Error("Image results load wait failed: %s", err)
return *core.ConvertSearchResultsMap(searchResultsMap), core.ErrSearchTimeout
}
results, err := page.Timeout(gogl.Timeout).Search("div[data-hveid][data-ved][jsaction]")
if err != nil {
@@ -453,7 +477,9 @@ func (gogl *Google) SearchImage(query core.Query) ([]core.SearchResult, error) {
}
searchResultsMap[*dataVed] = gR
r.Remove()
if err := r.Remove(); err != nil {
gogl.logger.Debug("Failed to remove parsed image element: %s", err)
}
}
}

View File

@@ -52,7 +52,7 @@ func googleResultParser(response *http.Response) ([]core.SearchResult, error) {
// Find URL - look for the anchor that contains the h3 title
linkTag := item.Find("h3").Parent()
if linkTag.Is("a") == false {
if !linkTag.Is("a") {
linkTag = item.Find("h3").Closest("a")
}