diff --git a/src/pages/services/CaptchaSolver.py b/src/pages/services/CaptchaSolver.py index 1544bee..2a184ff 100644 --- a/src/pages/services/CaptchaSolver.py +++ b/src/pages/services/CaptchaSolver.py @@ -11,11 +11,6 @@ import base64 import queue import ddddocr -from selenium.common.exceptions import ( - NoSuchElementException, - TimeoutException, -) - from base.MsgBase import MsgBase from pages.LoginPage import LoginPage @@ -38,6 +33,9 @@ class CaptchaSolver(MsgBase): try: img_src = login_page.getCaptchaImageSrc() + if img_src is None: + self._showTrace("验证码图片元素定位时发生错误 !", self.TraceLevel.ERROR) + return "" base64_str = img_src.split(',', 1)[1] captcha_img = base64.b64decode(base64_str) captcha_text = self._ocr.classification(captcha_img) @@ -45,15 +43,9 @@ class CaptchaSolver(MsgBase): self._showTrace(f"识别到验证码为 : '{captcha_text}'", 20, no_log=True) if len(captcha_text) != 4: self._showLog("识别到的验证码长度不等于 4 个字符 !", self.TraceLevel.WARNING) - raise Exception("识别到的验证码长度不等于 4 个字符 !") + return "" return captcha_text - except (NoSuchElementException, TimeoutException) as e: - self._showTrace(f"验证码识别失败 ! : {e}", self.TraceLevel.ERROR) - return "" - except (ValueError, OSError) as e: - self._showTrace(f"验证码识别失败 ! : {e}", self.TraceLevel.ERROR) - return "" - except Exception as e: + except ValueError as e: self._showTrace(f"验证码识别失败 ! : {e}", self.TraceLevel.ERROR) return "" @@ -61,20 +53,13 @@ class CaptchaSolver(MsgBase): self, ) -> str: - try: - self._showMsg("请输入验证码:") - captcha_text = self._waitMsg(timeout=15) - self._showTrace(f"输入的验证码为 : '{captcha_text}'", 20, no_log=True) - if len(captcha_text) != 4: - self._showLog("输入的验证码长度不等于 4 个字符 !", self.TraceLevel.WARNING) - raise Exception("输入的验证码长度不等于 4 个字符 !") - return captcha_text - except ValueError as e: - self._showTrace(f"输入验证码失败 ! : {e}", self.TraceLevel.ERROR) - return "" - except Exception as e: - self._showTrace(f"输入验证码失败 ! : {e}", self.TraceLevel.ERROR) + self._showMsg("请输入验证码:") + captcha_text = self._waitMsg(timeout=15) + self._showTrace(f"输入的验证码为 : '{captcha_text}'", 20, no_log=True) + if len(captcha_text) != 4: + self._showLog("输入的验证码长度不等于 4 个字符 !", self.TraceLevel.WARNING) return "" + return captcha_text def solveCaptcha( self, diff --git a/src/pages/services/RecordChecker.py b/src/pages/services/RecordChecker.py index c7cef7f..7151f0b 100644 --- a/src/pages/services/RecordChecker.py +++ b/src/pages/services/RecordChecker.py @@ -112,20 +112,21 @@ class RecordChecker(MsgBase): try: time_element = records_view.getRecordTimeElement(reservation) info_elements = records_view.getRecordInfoElements(reservation) - except (NoSuchElementException, TimeoutException, StaleElementReferenceException): + except (NoSuchElementException, StaleElementReferenceException): return { "date": "", "time": {"begin": "", "end": ""}, "info": {"location": "", "status": ""}, } - except Exception: + try: + time_data = self._decodeReserveTime(time_element) + info_data = self._decodeReserveInfo(info_elements) + except StaleElementReferenceException: return { "date": "", "time": {"begin": "", "end": ""}, "info": {"location": "", "status": ""}, } - time_data = self._decodeReserveTime(time_element) - info_data = self._decodeReserveInfo(info_elements) return { "date": time_data["date"], "time": time_data["time"], @@ -152,7 +153,10 @@ class RecordChecker(MsgBase): records_view = shell.gotoRecordsView() for _ in range(max_check_times): - reservations = records_view.loadRecords() + try: + reservations = records_view.loadRecords() + except TimeoutException: + reservations = None if reservations is None: return None for reservation in reservations[checked_count:]: diff --git a/src/pages/services/ReserveChecker.py b/src/pages/services/ReserveChecker.py index 9be86e2..3d06acd 100644 --- a/src/pages/services/ReserveChecker.py +++ b/src/pages/services/ReserveChecker.py @@ -88,11 +88,22 @@ class ReserveChecker(MsgBase): ) -> bool: cur_time = time.strftime("%H:%M", time.localtime()) + cur_date = time.strftime("%Y-%m-%d", time.localtime()) if reserve_info.get("begin_time") is None: reserve_info["begin_time"] = {} if "time" not in reserve_info["begin_time"]: reserve_info["begin_time"]["time"] = cur_time self._showTrace(f"开始时间未指定, 自动设置为当前时间: {cur_time}") + elif reserve_info.get("date") == cur_date: + begin_mins = timeStrToMins(reserve_info["begin_time"]["time"]) + cur_mins = timeStrToMins(cur_time) + if begin_mins < cur_mins: + self._showTrace( + f"开始时间 {reserve_info['begin_time']['time']} 已过当前时间 {cur_time}, " + f"自动调整为当前时间", + self.TraceLevel.WARNING, + ) + reserve_info["begin_time"]["time"] = cur_time if "max_diff" not in reserve_info["begin_time"]: reserve_info["begin_time"]["max_diff"] = 30 self._showTrace("开始时间最大时间差未指定, 自动设置为 30 分钟")