From fd5abb5f1e497e7383740ce5c6ec2f97840e32c8 Mon Sep 17 00:00:00 2001 From: KenanZhu <3471685733@qq.com> Date: Tue, 11 Nov 2025 09:00:20 +0800 Subject: [PATCH] chore(LibReserve, LibCheckin): * We use a more clear and structured output message of reservation. Complete the LibCheckin for the upcoming new feature : 'Auto Check-in' --- LibCheckin.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++++-- LibReserve.py | 12 +++------ 2 files changed, 73 insertions(+), 10 deletions(-) diff --git a/LibCheckin.py b/LibCheckin.py index 57544ef..a3d2f52 100644 --- a/LibCheckin.py +++ b/LibCheckin.py @@ -34,7 +34,74 @@ class LibCheckin(LibOperator): def _waitResponseLoad( - self, + self ) -> bool: - pass \ No newline at end of file + try: + WebDriverWait(self.__driver, 5).until( + EC.presence_of_element_located((By.CLASS_NAME, "ui_dialog")) + ) + WebDriverWait(self.__driver, 2).until( + EC.presence_of_element_located((By.CLASS_NAME, "resultMessage")) + ) + WebDriverWait(self.__driver, 2).until( + EC.element_to_be_clickable((By.CLASS_NAME, "btnOK")) + ) + result_message_element = self.__driver.find_element( + By.CLASS_NAME, "resultMessage" + ) + ok_btn = self.__driver.find_element(By.CLASS_NAME, "btnOK") + except: + self._showTrace("签到时发生未知错误 !") + return False + print(result_message_element) + result_message = result_message_element.text + if "签到成功" in result_message: + try: + detail_elements = self.__driver.find_elements( + By.CSS_SELECTOR, ".resultMessage dd" + ) + except: + pass + if detail_elements: + details = [element.text for element in detail_elements if element.text.strip()] + if len(details) >= 5: + self._showTrace(f"\n"\ + f" 签到成功 !\n"\ + f" {details[1]}\n"\ + f" {details[2]}\n"\ + f" {details[3]}\n"\ + f" {details[4]}") + else: + self._showTrace( + " 签到成功 !\n"\ + " 未获取到签到详情 !") + ok_btn.click() + return True + else: + failure_reason = result_message.replace("签到失败", "").strip() + self._showTrace(f"签到失败: {failure_reason}") + ok_btn.click() + return False + + + def checkin( + self, + username: str + ) -> bool: + + if self.__driver is None: + self._showTrace("未提供有效 WebDriver 实例 !") + return False + try: + checkin_btn = WebDriverWait(self.__driver, 2).until( + EC.element_to_be_clickable((By.ID, "btnCheckIn")) + ) + except: + self._showTrace(f"用户 {username} 签到界面加载失败 !") + return False + if "disabled" in checkin_btn.get_attribute("class"): + self._showTrace("签到按钮不可用, 可能不在场馆内, 请连接图书馆网络后重试") + return False + checkin_btn.click() + return self._waitResponseLoad() diff --git a/LibReserve.py b/LibReserve.py index b2aa514..700187e 100644 --- a/LibReserve.py +++ b/LibReserve.py @@ -83,16 +83,12 @@ class LibReserve(LibOperator): raise if "预定好了" in title or "预约成功" in title or "操作成功" in title: if len(contents) >= 6: - date_val = contents[1].split(" : ")[1].strip() if " : " in contents[1] else contents[1].strip() - time_val = contents[2].split(" : ")[1].strip() if " : " in contents[2] else contents[2].strip() - seat_val = contents[3].split(" : ")[1].strip() if " : " in contents[3] else contents[3].strip() - checkin_val = contents[5].strip() self._showTrace(f"\n"\ f" 预约成功 !\n"\ - f" 预约日期: {date_val}, \n"\ - f" 预约时间: {time_val}, \n"\ - f" 预约座位: {seat_val}, \n"\ - f" 签到时间: {checkin_val}") + f" {contents[1]}\n"\ + f" {contents[2]}\n"\ + f" {contents[3]}\n"\ + f" 签到时间 :{contents[5]}") else: self._showTrace(f"\n"\ f" 预约成功 !\n"\