mirror of
https://github.com/karust/openserp.git
synced 2026-08-05 16:53:54 +08:00
Fix linter errors. Enhance error handling in search functions across multiple engines
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user