diff --git a/BokBonCheck/SearchModel/KwangjuCityLibrarySearcher.cs b/BokBonCheck/SearchModel/KwangjuCityLibrarySearcher.cs index 1498a66..c0ebfa8 100644 --- a/BokBonCheck/SearchModel/KwangjuCityLibrarySearcher.cs +++ b/BokBonCheck/SearchModel/KwangjuCityLibrarySearcher.cs @@ -288,6 +288,8 @@ namespace BokBonCheck { try { + await Task.Delay(500); + // 방법 4: 페이지 로딩 상태 확인 wait.Until(d => { diff --git a/BokBonCheck/SearchModel/NamguLibrarySearcher.cs b/BokBonCheck/SearchModel/NamguLibrarySearcher.cs index eea9a07..7228ec1 100644 --- a/BokBonCheck/SearchModel/NamguLibrarySearcher.cs +++ b/BokBonCheck/SearchModel/NamguLibrarySearcher.cs @@ -367,27 +367,53 @@ namespace BokBonCheck await WaitForPageChange(new WebDriverWait(_driver, TimeSpan.FromSeconds(15))); // 검색 결과 수 추출 - var resultCount = ExtractBookCount(_driver); - - result.BookCount = resultCount; - result.IsSuccess = true; + var resultCount = ExtractBookCount(_driver, searchTerm,out string ermsg); + if(resultCount == -1) + { + result.IsSuccess = false; + result.ErrorMessage = ermsg; + } + else + { + result.BookCount = resultCount; + result.IsSuccess = true; + result.ErrorMessage = ermsg; + } + } catch (Exception ex) { result.IsSuccess = false; result.ErrorMessage = ex.Message; result.BookCount = 0; - } - + } + return result; } - private int ExtractBookCount(IWebDriver driver) + private int ExtractBookCount(IWebDriver driver, string searchTerm, out string errmessage) { + errmessage = string.Empty; try { // div.search-result 내부의 span에서 '전체 N' 텍스트 추출 var resultDiv = driver.FindElement(By.CssSelector("div.search-result")); + + var bodytext = resultDiv.Text; + if(bodytext.Contains("검색결과가 없습니다")) + { + errmessage = "검색결과없음"; + return 0; + } + + var searchkey = resultDiv.FindElement(By.XPath("//*[@id=\"sub\"]/section[3]/div/div/div/div/div[2]/div[1]/p/b")); + var searchtitle = searchkey.Text; + + if (searchTerm.Contains(searchtitle) == false) + { + errmessage = $"검색어 불일치({searchtitle}/{searchTerm})"; + return -1; + } var span = resultDiv.FindElement(By.XPath(".//span[contains(text(),'전체')]")); string text = span.Text; // 예: "전체 5 " var match = System.Text.RegularExpressions.Regex.Match(text, @"전체\s*(\d+)"); @@ -395,11 +421,17 @@ namespace BokBonCheck { return int.Parse(match.Groups[1].Value); } - return 0; + else + { + errmessage = "수량항목없음"; + return -1; + } + } - catch + catch (Exception ex) { - return 0; + errmessage = ex.Message; + return -1; } } @@ -408,6 +440,8 @@ namespace BokBonCheck { try { + await Task.Delay(500); + // 방법 4: 페이지 로딩 상태 확인 wait.Until(d => { @@ -418,8 +452,9 @@ namespace BokBonCheck // 방법 5: 특정 텍스트가 페이지에 나타날 때까지 대기 wait.Until(d => { - var pageText = d.FindElement(By.TagName("body")).Text; - return pageText.Contains("전체") || pageText.Contains("건") || pageText.Contains("검색결과"); + var pageText = d.FindElement(By.ClassName("search-result")).Text; + if (pageText.Contains("검색결과가 없습니다")) return true; + return pageText.Contains("에 대하여") && pageText.Contains("검색되었습니다"); }); }